Первый язык

Модератор: Модераторы разделов

Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Первый язык

Сообщение eduard_pustobaev »

diesel писал(а):
02.05.2007 22:04
не :) ты немного не туда меня понял :) когда ты знаешь что такое цикл - то как это пишется - просто формальность. И тут неважно где ты узнал что такое цикл на самом деле(мне даже С-шный вариант for'а кажется более понятным ). Вот только вокруг и в этом цикле будет куча всего странного, необычного, нового, неочевидного... что сам цикл рискует остаться без внимания, что в итоге приводит к невообразимой каше, без всякого ООП. ООП это вообще отдельная тема для разговора :)

А ну тогда ясно. Потому и стараются обучение с паскаля обычно начинать. Чтоб поменьше простора для творчество, а не потому, что он очень прост или хорош. Конструкция делает то, что должна. Ни больше, ни меньше, хочешь заюзать переменную - сначала её объяви(а не в каком-то там цикле)... Шаг влево, шаг вправо - расстрел.
P.S. Правильный это подход или нет судить не берусь...
В дисгармонии со вселенной.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Первый язык

Сообщение v04bvs »

Skladnoy писал(а):
03.05.2007 00:30
v04bvs
А что? Никто же не предлагает учить такой черной магии. А вообще вся эта конструкция производит впечатление довольно интересного хака. Я даже почти понял как это работает. Но это все таки хак и использование средств языка не по назначению (-: Что-то из этого должно вырасти

А это и есть настоящий современный С++. Почитай исходники boost-а.

Xenon писал(а):
03.05.2007 00:32
По поводу тех конструкций, что ты тут понавертел - ну, во-первых, новичку не обязательно сразу кидаться в крайности - я могу привести какой-нибудь ужасно/страшно/жутко сложный код на Паскале и сказать - эй, хлопец, этот язык очень сложный :)

На паскале физически не получится. Ну нет там сложных конструкций. Максимум что можно там сделать - нечитаемый код. Код, который я привёл - вроде бы вполне читаем.

Да, соглашусь, есть рамки - asm естественно сложный

Что же там сложного? Муторный, но не сложный. Ты же не будешь утверждать, что подсчёт 123456 * 123789 в стобик - сложное занятие.

но я если рассматривать С++ и Паскаль - я бы не сказал, что оба этих языка слишком сильно отличаются по начальной сложности. Да, если копать глубоко, а еще и прикупив "Современное Проектирование" Александреску, то, конечно, С++ может показаться очень сложным. Но начинаем с малого, а потом растем. Сейчас много хороших книг, с помощью которых новичок спокойно встанет на ноги (это вам не Страуструп).

Ну положим я вовсе не за паскаль. Имхо в 21 веке начинать надо либо с лиспа\схемы, либо с питона.
Проблема С++ в том, что если на нём начинать учиться, возникает огромное число сложностей, и острых углов. Конечно рано или поздно они все будут осилены, но сам язык будет отвлекать от сути программирования. Реализация какой нибудь сортировки может превратится в сражение с синтаксисом. Недаром подавляющее большинство участников на школьных олимпиадах по программированию используют паскаль. Он банально проще для алгоритмов.
А программировать без хорошо развитого алгоритмического мышления - самоубийство.
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: Первый язык

Сообщение ddc »

v04bvs писал(а):
02.05.2007 23:22
Вот этот код я рожал дня 2. Это кстати не мой, я полностью до него так и не додумался. При том, что я С++ знаю года 3, программирую практически только на нём года полтора.
Вероятно полнейшее незнание языков семейства C меня извиняет, но я не понимаю не только функцию этого кода, но и вообще о чём это. :blush:
Спасибо сказали:
Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: Первый язык

Сообщение Skladnoy »

v04bvs писал(а):
03.05.2007 00:56
А это и есть настоящий современный С++. Почитай исходники boost-а.

Я знаю. С++ в конце концов мультипарадигменный язык. На нем можно писать по разному (-; То этот код все таки черная магия шаблонов.

Но вообще говоря, в этом примере нет ничего по сути сложного. Вообще ничего. Вся имеющаяся сложность - привнесенная. Имеющиеся языковые конструкции неадекватны задаче. Получается что-то отчасти похожее на программирование на асме. Ровно так же мысли впихиваются в неподходящий для их описания язык.

v04bvs писал(а):
03.05.2007 00:56
Что же там сложного? Муторный, но не сложный. Ты же не будешь утверждать, что подсчёт 123456 * 123789 в стобик - сложное занятие.

Зависит от того что считать сложным.

С тезисом, что не надо начинать с С++ я согласен. Язык состоит из странностей и издержек эволюционного развития. Я видел, что могут написать на нем, не умея на нем писать. Это страшно. Самый убийственный пример:

Код: Выделить всё

int perep[32];
void init_perep(){
    int x[] = {1,33,3,35,5,37,7,39,9,41,11,43,13,45,15,47,17,49,19,51,21,53,23,55,25,57,27,59,
29,61,31,63};
    for (int i = 0; i <32; i++) perep[i] = x[i];
}

А вот с какого языка надо начинать я не знаю. Мне трудно сказать.
Спасибо сказали:
Аватара пользователя
Xenon
Бывший модератор
Сообщения: 359
ОС: Debian

Re: Первый язык

Сообщение Xenon »

v04bvs, сам язык (asm) возможно, несложен, но ты же должен знать архитектуру ЭВМ? Язык высоко уровня типа С++ и прочие не требуют этого, поэтому я назвал его сложным (в общем изучение типа).
Я даже не знаю насчет школ - просто у меня такое ощущение, что Паскаль изучают только потому, что ТАК сложилось и не более того :))
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Первый язык

Сообщение Uncle_Theodore »

Xenon писал(а):
03.05.2007 01:27
Я даже не знаю насчет школ - просто у меня такое ощущение, что Паскаль изучают только потому, что ТАК сложилось и не более того :))

Да нет, Паскаль был изначально придуман как язык для преподавания. :) Сам Вирт так говорил...
Спасибо сказали:
Аватара пользователя
Xenon
Бывший модератор
Сообщения: 359
ОС: Debian

Re: Первый язык

Сообщение Xenon »

Uncle_Theodore, ага, а Страуструп говорил, что С++ был сделан для прикола :) Я, конечно, передергиваю, но ... :) Не знаю даже, может у меня сдвиг по фазе относительно Паскаля :)
Спасибо сказали:
Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: Первый язык

Сообщение Skladnoy »

Uncle_Theodore
Ну мало ли что для чего создавалось. Вот линукс создавался как игрушка для хакеров и не более того. Так что существующие традиции имеют большое значение.

Xenon
Он был создан как расширение обычного Си. Туда добавили классы, еще что-то... потом еще...
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Первый язык

Сообщение Uncle_Theodore »

Я не говорил, что Вирту хорошо удалось справиться с поставленной задачей, бо Паскаль не люблю... :D
Спасибо сказали:
Аватара пользователя
Xenon
Бывший модератор
Сообщения: 359
ОС: Debian

Re: Первый язык

Сообщение Xenon »

Skladnoy, да, но это уже потом стало расширением. Изначально Страуструп, как говорится, пошалил :)
Спасибо сказали:
Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: Первый язык

Сообщение Skladnoy »

Xenon
Это надо лезть в историю создания С++. А мне, конечно, лень. Да и вообще это уже совсем оффтоп
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Первый язык

Сообщение Liksys »

Тут уже оффтопят два листа :) Надо вырезать в отдельныю тему, имхо.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Первый язык

Сообщение t.t »

Uncle_Theodore писал(а):
02.05.2007 17:52
Ребята, ну Лисп же это только мозги ломать... С его функциональной парадигмой... smile.gif
И куда потом сии знания применить?
А процедурненький С -- все как на ладони. Что надо сделать? Вот это. Как делаем? Вот так и сяк. Ясно изложил алгоритм -- он тут же и в программу вылился.
Фор хум хау :) Мне функциональная парадигма больше по душе пришлась, чем процедурная. На аксиоматическую теорию похоже :) А ещё лучше -- когда можно объединить процедурный подход с функциональным; OCaml, например, или даже тот же питон такое немного позволяет. Довольно интересно. Хотя.. пожалуй, твоя правда: _начинать_ с фп пожалуй всё-таки не стоит.

Uncle_Theodore писал(а):
02.05.2007 17:52
Вы бы еще ПРОЛОГ посоветовали, ей-богу...
Тоже была такая мысль :) Интересная штука, правда мне как-то не пошёл.

А вот C++ как раз не советую. Если ООП -- то лучше уж smalltalk тогда. А если чистая процедурка -- то C без плюсов.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Первый язык

Сообщение sash-kan »

кстати, по поводу того, почему неспециалисту имеет смысл учить lisp (точнее, scheme), а не что-нибудь более процедурное, afair, неплохо написано в предисловии к htdp
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Первый язык

Сообщение Liksys »

t.t писал(а):
03.05.2007 19:53
Если ООП -- то лучше уж smalltalk тогда.
Python, имхо. Он и для серьезных задач, и для обучения хорошо подходит.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Первый язык

Сообщение t.t »

diesel писал(а):
02.05.2007 18:44
В этом плане скриптовые языки гораздо проще(даже perl
Перл проще? Да ладно :)

selfanim.pl

#!/usr/bin/perl $_=' $q= "\4 7" ;wh ile($;=$z+=.5 ){ %c =$r =0;$/="";while( 21+$ z> ( $; +=.05)) {$c{i nt $ _+ 26 +2*( $r+=. 0 1 9 )*s in $; }{1 - $_ +10+int$r*c os$; }=1 f or(0..1)}$t=re v e r s e; $/. =`cl s` ." #! /u sr /bi n/ pe rl \n\ $_=$q\n" ;f or $y (1. .20){ $c {$ _ } { $y }? $ /.= chop$ t:( $/ . ="\4 0")for( 0..53 ); $ /.=" \n"}system("cls ") ;p ri nt "$/$q;s ;". c h r(92) ."s; ; g; eva l\n" } ';s;\s;;g;eval

2Xenon: Шурик, а тебя каким ветром? Сколько уже тебя не видно-то было?.. Не пропадай так больше.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Первый язык

Сообщение t.t »

Liksys писал(а):
03.05.2007 20:04
Python, имхо. Он и для серьезных задач, и для обучения хорошо подходит.
Я как бы об ООП... Питон -- это, мягко говоря, не чистый ООП-язык. Строго говоря -- не только ООП. А грубо говоря -- почти не ООП :)
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Первый язык

Сообщение Uncle_Theodore »

Я все-таки думаю, что учить надо так
Процедурненький язык --> ООП --> Декларативный --> Функциональный.
Потому как:
1) На каждом этапе можно остановиться.
2) Если человек глубоко лезть не хочет, ему важен ответ на вопрос "Как сделать?"
Потом возникает вопрос "А как устроено?" -- то есть, ООП.
Потом -- изыски. Декларативный стоИт впереди функционального только из-за SQL...
Спасибо сказали:
Аватара пользователя
Xenon
Бывший модератор
Сообщения: 359
ОС: Debian

Re: Первый язык

Сообщение Xenon »

t.t, [OFFTOPIC] Да в жизни просто все резко меняться стало (переезд в Питер тот же) - на Линь опять подсел, вот и вернулся сюда :). Здарова! [OFFTOPIC]
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Первый язык

Сообщение sash-kan »

Uncle_Theodore, imho (справедливости ради - не только мое) - если абсолютно не знаком с языками программирования, функциональный лисп гораздо понятней и легче в освоении, нежели любой процедурный язык. он ближе к естественному языку и к человеческой логике. опять же повторюсь - imho.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Первый язык

Сообщение t.t »

Uncle_Theodore писал(а):
03.05.2007 21:41
Я все-таки думаю, что учить надо так
Процедурненький язык --> ООП --> Декларативный --> Функциональный.
Потому как:
1) На каждом этапе можно остановиться.
2) Если человек глубоко лезть не хочет, ему важен ответ на вопрос "Как сделать?"
Где глубже лезть придётся -- это, кстати, ещё вопрос.
(defun min (a b)
(if (< a b) a b) )
И ни о каких типах, заметьте, не надо заморачиваться: будет работать _для любой_ пары (a b), для которой определено отношение <. И не надо о макросах; для макроса я на раз пример приведу, который его "поломает" ;)

sash-kan писал(а):
03.05.2007 22:08
Uncle_Theodore, imho (справедливости ради - не только мое) - если абсолютно не знаком с языками программирования, функциональный лисп гораздо понятней и легче в освоении, нежели любой процедурный язык. он ближе к естественному языку и к человеческой логике. опять же повторюсь - imho.
Присоединюсь к "имху": мне он показался намного понятнее и того же smalltalk-а -- самого показательного ОО-языка, который многие почему-то считают близким к естественному; он близок лишь по семантике, но не по логике.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Xenon
Бывший модератор
Сообщения: 359
ОС: Debian

Re: Первый язык

Сообщение Xenon »

t.t, я уже, кстати, хотел жестоко матюгнуться на тот пример, что ты привел. Только потом перечитал, что там defun, а не define и вообще не макрос это :)
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Первый язык

Сообщение Uncle_Theodore »

sash-kan писал(а):
03.05.2007 22:08
Uncle_Theodore, imho (справедливости ради - не только мое) - если абсолютно не знаком с языками программирования, функциональный лисп гораздо понятней и легче в освоении, нежели любой процедурный язык. он ближе к естественному языку и к человеческой логике. опять же повторюсь - imho.

Вот не думается мне так... :)
Возможно, это зависит от того, насколько человеку вообще близко понятие функции. В Российском образовании понятие функции вводится в школе достаточно рано, и через какое-то время, к тому моменту, как человек начинает изучать программирование, оно становится более-менее привычным. В США, например, первокурсник может вообще впервые услышать про функцию лет в 19... И поверьте, братцы, что объяснить такому человеку, что же такое есть эта самая функция -- это практически подвиг Геракла... :)
С другой стороны, я думаю, человек даже и без начального математического образования может вполне нормально объяснить приезжему, как найти площадь Ленина... А такие инструкции и есть конструирование простейшего алгоритма...
Если учить программированию в более раннем возрасте или людей с формализмом математики не очень знакомым, то куда как легче объяснять что-то типа "Ну как мы ездим на лифте? Открываем дверь в подъезд, заходим. Если двери лифта не открыты, то нажимаем кнопку...", чем говорить о функциях, которые эвалюируются куда-то там и определены на других функциях...

Так думается... :)
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Первый язык

Сообщение t.t »

Uncle_Theodore писал(а):
03.05.2007 22:31
говорить о функциях, которые эвалюируются куда-то там и определены на других функциях...
А зачем так сложно? Чтобы запрограммировать действие, алгоритмически эквивалентное "вызову лифта", о функциях высших порядков (функторах) даже сам факт их существования знать не нужно. (Вот если надо будет преобразовать "вызов лифта" в "вызов такси"... но тут на "процедурнике" вообще замучаешься.)

t.t писал(а):
03.05.2007 22:19
Где глубже лезть придётся -- это, кстати, ещё вопрос.
(defun min (a b)
(if (< a b) a b) )
И ни о каких типах, заметьте, не надо заморачиваться: будет работать _для любой_ пары (a b), для которой определено отношение <. И не надо о макросах; для макроса я на раз пример приведу, который его "поломает"
А минимум для _произвольного_ числа аргументов? На лиспе максимум втрое длиннее того, что я написал для двух; и из дополнительных понятий кроме собственно синтаксиса лиспа, требует только хотя бы интуитивного понимания принципа индукции. А на сях?..
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
kernel_mode
Сообщения: 347
Статус: infinity++
ОС: Gentoo(desktop)/Arch(laptop)

Re: Первый язык

Сообщение kernel_mode »

eduard_pustobaev писал(а):
02.05.2007 21:31
Неинтересно как-то. Ну и что? Сожрёт усю память?


Ещё вариант:

Код: Выделить всё

#include <malloc.h>
int main() {
        int *a;
        while (true)
                a = (int*)malloc(10000);
        return 0;
}

:)
Спасибо сказали:
Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: Первый язык

Сообщение Skladnoy »

Кстати, раз уж тут зашли такие разговоры про функциональное программирование, то может участники подскажут хорошую литературу на эту тему. Хочется изучить, а с чего начинать непонятно.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Первый язык

Сообщение diesel »

на posix.ru напомнили известную историю, частично по теме диспута:

Однажды Мастер Фу сказал заезжему программисту: "В одной строке кода shell-
сценария больше духа UNIX, чем в десяти тысячах строк на языке С!"
Программист, гордый своими знаниями в С, ответтил: "Может ли быть такое?
Ведь С - язык, в котором реализовано само ядро UNIX!"
На это Мастер Фу ответил: "Это так. Тем не менее, в одной строке shell-сценария
больше духа UNIX, чем в десяти тысячах строк С!"
Программист выглядел удрученным. "Но ведь через язык С мы познаем просвещенность
патриарха Ритчи! Мы уподобляемся человеку с операционной системой и компьютером,
который получает непревзойденную производительность!"
Мастер Фу сказал: "То, что ты говоришь, правда. Однако в одной строке shell-
сценария больше духа UNIX чем в десяти тысячах строк С".
Программист усмехнулся и поднялся, чтобы удалиться. Но Мастер Фу кивнул
своему ученику Ньюби, который писал строку shell-кода на стоящей рядом белой
доске, и сказал: "Господин программист, посмотрите на этот конвейер! Не заняла бы
его реализация на С десять тысяч строк?"
Просматривая то, что написал Ньюби, программист что-то бормотал в бороду.
В конце концов он согласился, что это так.
"И сколько часов потребовалось бы вам для реализации и отладки этой программы
на языке С?"
"Много", - признал заезжий программист. "Но только безумец стал бы тратить
столько времени, когда его ждет множество более достойных задач".
"Так кто лучше понимает дух UNIX?" - спросил Мастер Фу. "Тот, кто пишет
десять тысяч строк, или тот, кто, сознавая тщетность этих усилий, извлекает пользу,
не программируя?"
Услышав это, программист достиг просветления.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Первый язык

Сообщение Zeus »

Какая поучительная притча :)
А на чём, интересно, были написаны команды, участвовавшие в "конвеере"? :D
Это всё-равно, что ВижуалБасикёр, накидавший на формочку ActivX'ов и написавший пару функций отклика на события будет заявлять, что C++ - отстой с лишними наворотами - вот, ВижуалБасик нужно использовать!
Спасибо сказали:
NoMad
Сообщения: 92
ОС: Debian 4.0

Re: Первый язык

Сообщение NoMad »

Всем спасибо, я в итоге похоже остановлюсь на Scheme/Common Lisp, скорее даже на первом. Огромное спасибо за книги. Если кто-нибудь знает еще что-нибудь по теме - подскажите!
2all: я же в самом первом посте ясно дал понять, что практическое применение языка меня интересует в последнюю очередь. Области применения всяких C/C++/C#/Shell/Java/VBasic я знаю, меня интересует язык который нагляден в образовательных целях. Насколько я понимаю, lisp потому и жив, что он хорош как инструмент обучения, а области практического применения у него либо очень экзотичны либо отсутствуют. Мне программирование нужно как хобби, мозги поломать - задачи порешать. А вы тут: asm, C#... Pyhton еще куда ни шло, но мне книги по lisp (особенно фины) понравились больше, но вполне возможно, что позже займусь и питоном.
Спасибо сказали:
Аватара пользователя
Santa_Klaus
Сообщения: 160
Статус: О`Балдуй
ОС: Debian Lenny и много чего ещё

Re: Первый язык

Сообщение Santa_Klaus »

На мой взгляд, начать хорошо с питона. Как тут уже и говорилось. А дальше - что больше понравится :)
Я не тормоз, я основательный :)
Спасибо сказали: