LINUX.ORG.RU

Язык для обучения программированию


1

7

Понятно, что Java - наверное самый мэйнстрим на текущий момент, ну с C#(Mono)(я не рассматриваю здесь пыхпых, джаваскрипт и прочий веб), но мне известна(как и большинству местных) статья, что изучение с Явы вредно для мозгов.
И вот, столкнувшись с тем, что отданные под моё руководство студенты 3го курса не сильно способны заниматься программированием на С++, задумался, как решить эту проблему, избегая 2х тупиков - делать всё за них, и выгнать их.
Допуская, что производительность языка не нужна(хотя, ввиду того, что делаем мы в основном числодробилки, это очень сильно допущение) и вообще у нас под рукой кластер, какой язык посоветует ЛОР, помогающий развить мозг молодых учёных до уровня С/С++? Да и вообще, список годных для обучения, и негодных соответственно. Думал было python, но тем не в нём производительность недостаточная, а самому реализовывать затратные вещи на С пока не хочется.
Update: vb и delphi не Ъ ввиду того, что я то под линуксом сижу. Update 2: всё, наработанное за время использование предложенного языка, не хочется терять, поэтому хорошо бы, если б можно было соединять уже готовые вещи с C/C++. Насчёт pascal я просто никогда такого не желал, там такое есть?

★★★★

Последнее исправление: aptyp (всего исправлений: 2)

Ответ на: комментарий от livi

В «сферическом случае» можно было бы начинать с Пролога или Хаскеля

Haskell не знаю зачем учить отдельно от какого-нибудь курса матана, а Prolog можно оставить на самостоятельное закрепление исчисления высказываний. Я бы начинал учить программированию студентов с языка, на котором можно сделать что-нибудь, если не захватывающее, то хотя бы веселое - на эту роль подходят как Logo, так и Lisp.

alienclaster ★★★
()

Мы числодробилки пишем на связке С++ и Python (для числодробилок это оптимальное сочетание, подробнее напр. тут www.linux.org.ru/wiki/en/User:AIv/LRnLA, про связывание С++ и питона тут http://a-iv.ru/pyart/cpp2py.pdf).

Поскольку студенты (МФТИ) уже на бакалаврский диплом пишут какой то свой код, то и приходится их с середины третьего курса учить линуксу и C++ (семестр), Python (семестр) и еще семестр всяко разно. Но они правда приходят уже зная С в каком то объеме и имея некоторый опыт работы под линуксом. В принципе, в С++ на уровне числодробилок ничего архисложного нету (при условии что они как то знают С).

ЗЫ тред не читал.

AIv ★★★★★
()
Ответ на: комментарий от AIv

В принципе, в С++ на уровне числодробилок ничего архисложного нету (при условии что они...

..знают мат. часть). :)

shty ★★★★★
()
Ответ на: комментарий от anonymous

Читал ли ты SICP

прикинь себе, и продолжая нашу увлекательную беседу - а знаешь ли ты что такое asembler?

упорок?

просто «лавсанчег», хотя это, может, одно и то же, не знаю...

shty ★★★★★
()
Ответ на: комментарий от shty

..знают мат. часть).

Это отдельная песня. Но в общем, на основе скромного 5ми летнего опыта - среднестатистический студент МФТИ посещающий 80% занятий за семестр овладевает С++ на уровне достаточном для написания диплома бакалавра. Ну а какие у нас дипломы бакалавра Вы знаете... ;-)

AIv ★★★★★
()
Ответ на: комментарий от shty

Поедем дальше - знаешь ли ты, что Си это абстракция регистро-стековой машины, называемой PDP-11, которая невероятно сильно отличается от наших современных машин, причем в худшую сторону, что в свою очередь делает ее крайне хуевой абстракцией современных регистро-стековых машин?

anonymous
()
Ответ на: комментарий от anonymous

Чувааак... а знаешь ли ты, что размер движков шаттла соответствует ширине двух лошадниых задниц древнего Рима? Слыхал про проклятие обратной совместимости? Лети уже на Марс, строй там конвейр по производствус совершенно новых оригинальных компов и пиши для него совершенно новый ЯП. И тока ты будешь им пользоваться...

Ладно PDP-11, современные компы до сих пор имеют архитектуру фон Неймана... которая кстати аццки тормозит развитие.

AIv ★★★★★
()

Можно старому сишнику вставить свои 1.5 копейки?

(сюрприз!) Либо Паскаль, либо Питон (имхо, Питон лучше)

Через некоторое время начать тыкать в C/C++.

PS: Всякие лиспы не предлагаю, потому что для прикладных математиков, имхо, это не совсем подходит. Хотя сам scheme пользую (но я не математик).

OldFatMan
()
Ответ на: комментарий от AIv

..знают мат. часть).

Это отдельная песня. Но в общем, на основе скромного 5ми летнего опыта - среднестатистический студент МФТИ посещающий 80% занятий за семестр овладевает С++ на уровне достаточном для написания диплома бакалавра.

ну, я больше про математическую составляющую, а она в мфти не то чтобы слабая, скорее даже наоборот :)

shty ★★★★★
()
Ответ на: комментарий от shty

Да, база у них хорошая (у меня такой увы нету). Но как бы уж очень их знания абстрактны зачастую... на практике оказывается что все совсем по другому, скажем косинус посчитанный как скалярное произведение единичных векторов за счет ошибки округления оказывается больше единицы;-)

AIv ★★★★★
()

pascal, c. Последнее предпочтительнее. Хватит насиловать труп..

papochka
()
Ответ на: комментарий от AIv

Архитектура фон-неймана(а конкретнее, augumented RASP) у современных компьютеров потому, что круче и практичнее еще не придумали.

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

anonymous
()

делаем мы в основном числодробилки

Ну так и надо использовать язык, предназначенный для числодробилок - фортран. Время освоения - неделя.

Думал было python, но тем не в нём производительность недостаточная

python+matplotlib - отличный инструмент для изучающих численные методы. Медленные процедуры пишутся на фортране, matplotlib - для построения графиков.

yvv ★★☆
()
Ответ на: комментарий от alienclaster

shty, как я понял, отрицает что(дословно) «Си это убогая абстракция убогой регистро-стековой машины(полноценная — это CL, например), которая возникла вообще исключительно из-за убогости железа 60х-70х, а остается в живых только благодаря огромному количеству уже написанного на ней говнокода(главным образом, кода ОС), который вменяемым людям лень переписывать.»

anonymous
()
Ответ на: комментарий от dikiy

фортран фактически рипнулся уже

Это заблуждение. В численном моделировании используется повсеместно, и развивается.

yvv ★★☆
()
Ответ на: комментарий от Jetty

Ну так где там статья о том, чем отличается компьютерный алгоритм от алгоритма? Или там определение, или еще чего?

vasily_pupkin ★★★★★
()
Ответ на: комментарий от yvv

Ну так и надо использовать язык, предназначенный для числодробилок - фортран. Время освоения - неделя.

Фортран хороший ЯП. Но и для числодробилок бывает нужно ООП, вирт ф-ии, шаблоны и пр. фигня - за счет них время разработки существенно сокращается. Быстро выучив фортран можно со временем упереться в его эээ... примитивность;-)

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Тема убогости С в «современном контексте» не раскрыта. На чем ты предлагаешь разрабатывать ОС, на лиспе для лисп-машин? Или не обучать студентов С и навыкам работы с де-факто существующими и используемыми архитектурами?

alienclaster ★★★
()
Ответ на: комментарий от anonymous

знаешь ли ты, что Си это абстракция регистро-стековой машины, называемой PDP-11, которая невероятно сильно отличается от наших современных машин, причем в худшую сторону, что в свою очередь делает ее крайне хуевой абстракцией современных регистро-стековых машин?

о, сколько пафоса...

ну, раз ты для себя решил, что мир созрел уже для твоих откровений и вскарабкался на броневичок, предлагаю тебе следующую повестку твоей пламенной речи:

1. расскажи про архитектуру той самой «регистро-стековой» pdp-11
2. обязательно рассказажи про то что ты называешь «наши современные машины», ибо это, для нас крестьян, тайна великая
3. проведи сравнительный анализ различий п.1 и п.2
4. поведай, о владыко, неграмотному народу про разработку компиляторов и их дизайн (обязательно расскажи про front-end и back-end)
5. расскажи про язык Си, про его историю появления, про то на каком базисе он был разработан и каковы его характерные особенности
6. проанализируй п 5. с учётом информации в п. 4, проведи анализ связи синтаксиса и генерируемого машинного представления
7. в выводах обоснуй зависимость качества языка программирования от качества абстракции таргет-архитектуры, построй графики

тогда все крестьяне твои

ну и в заключении, пара риторических вопросов:

1. ты и правда считаешь, что язык Си как один раз разработали, так с тех пор исходные коды потеряли и везде используют старый блоб, подпирая его костылями, чтобы работало?
2. ты и правда считаешь, что для каждой архитектуры должен быть свой язык, учитывающий только её нюансы (и этот язык, конечно, не должен быть похож ни на одного своего предшественника - ведь архитектуры же различаются)?
3. почему ты считаешь, что ЛNСП, придуманный задолго до Си подходит для описания архитектур(ы?) «наших современных машин»
4. скажи, почему ты считаешь, что надо постоянно отрицать накопленный опыт разработки программных систем?

shty ★★★★★
()
Ответ на: комментарий от anonymous

Си, его убогость в современных контекстах

Да всем это уже понятно, даже мне, многолетнему сишнику. Времена меняются, ЯП не всегда за ними успевают.

распространенность Си

Между прочим, это веская причина его изучать.

на нем написана куча legacy-кода

И это тоже.

Почему до сих пор не создан ЯП - «истинный убийца» Си? Чем его заменить в некоторых областях задач?

Когда появится такой «заменитель» с прогрессивными концепциями, я перестану использовать Си для новых задач, буду только поддерживать legacy-code.

OldFatMan
()
Ответ на: комментарий от alienclaster

Си «изучается» за неделю, когда остальная теоретическая база дана(регистровые машины, фреймы активации, алгоритмы - как минимум).

Практике Си не обучить и за пять лет.
Таким образом, изучить его студенты могут и самостоятельно, если им надо.

Теоретическую базу нужно давать с примерами на нормальном, но еще достаточно простом, языке; Scheme - идеальный вариант.

ОС - если новую, то на нормальном языке, да на том же лиспе, да, на каком-нибудь развитии CL. Лисп-машины не нужны, современные архитектуры процессоров(типа x64) для лиспов подходят достаточно хорошо.
Примеры, в современности, уже есть - Singularity. .NET хоть и не лисп, но достаточно близок к нему.

Если дорабатывать старую - собственно никто и не отрицает, что тут вариант только Си, потому что кодовая база на Си, интерфейс ОС - Си, модель исполнения - Си, разделение процессов - нужное для Си, и так далее.

anonymous
()
Ответ на: комментарий от AIv

Фортран хороший ЯП. Но и для числодробилок бывает нужно ООП, вирт ф-ии, шаблоны и пр. фигня - за счет них время разработки существенно сокращается. Быстро выучив фортран можно со временем упереться в его эээ... примитивность;-)

Ничего подобного.

Фортран более примитивный язык, чем c++, но более высокого уровня и заточен именно для численного моделирования. Соответственно, численные схемы на фортране, значительно короче чем на c++ (меньше кода), и реализуются значительно быстрее. В связи с тем что в фортране запрещены конструкции, которые затрудняют автоматическую оптимизацию кода, компиляторы фортрана производят очень быстрый код.

Фортрановские модули легко компилируются в модули для питона, так что в примитивность упереться никак не получается.

yvv ★★☆
()
Ответ на: комментарий от OldFatMan

Между прочим, это веская причина его изучать.

На COBOL написано еще больше. Веская причина изучать COBOL?

anonymous
()
Ответ на: комментарий от AIv

Да, база у них хорошая (у меня такой увы нету)

база - это не что-то постоянное :) она имеет тенденцию к расширению, при соответствующих практических занятиях

так что, думаю коллега, Вы просто скромничаете :)

на практике оказывается что все совсем по другому, скажем косинус посчитанный как скалярное произведение единичных векторов за счет ошибки округления оказывается больше единицы;-)

хехе :) да, помню как у них округливались глаза при сшивании практической часть с теоретической

shty ★★★★★
()
Ответ на: комментарий от anonymous

На COBOL написано еще больше. Веская причина изучать COBOL?

А почему бы и нет? Кстати, я когда-то по собственной инициативе около года ковырялся в Коболе из любопытства (без производственной необходимости) главным образом из-за того, что на нём «ещё больше всего понаписано».

Ну а на вопросы ответы-то будут?

PS: Ох, уж эти мне «дёргатели удобных фрагментиков»... ;)

OldFatMan
()
Ответ на: комментарий от shty

ты и правда считаешь, что язык Си как один раз разработали, так с тех пор исходные коды потеряли и везде используют старый блоб, подпирая его костылями, чтобы работало?

Менялся он мало. В отличие от его дитя-выродка C++.

ты и правда считаешь, что для каждой архитектуры должен быть свой язык, учитывающий только её нюансы (и этот язык, конечно, не должен быть похож ни на одного своего предшественника - ведь архитектуры же различаются)?

Естественно, не нужен. Что не делает Си не устаревшим говном, не подходящим для современных машин.

почему ты считаешь, что ЛNСП, придуманный задолго до Си подходит для описания архитектур(ы?) «наших современных машин»

Лиспы, в отличие от Си - развивались.
В сишечке хоть вычисляемое goto то есть? А уж какой-нибудь non-local-exit? Херушки. А в лиспах - есть.

скажи, почему ты считаешь, что надо постоянно отрицать накопленный опыт разработки программных систем?

Собственно, я за то чтобы как раз наоборот. То о чем ты сказал - этим мейнстрим постоянно занимается, переизобретая лиспы.

anonymous
()
Ответ на: комментарий от anonymous

Само по себе оспаривание этих вещей это признак глубокой неграмотности и агрессивной невежественности, собственно поэтому я и встрял.

ты «встрял» не поэтому, а потому, что усиленно изучая всевозможные «исчисления», «системы типов» (ну, казалось тебе что это круто, кто ж тебя поругает за это) и т.д. заблудился и уже не видишь за деревьями леса

shty ★★★★★
()
Ответ на: комментарий от OldFatMan

Про убийцу Си - надо плясать от задачи. Частично я выше ответил.

Если говорить о поддержки легаси на Си, то конечно, альтернатив Си нет, ггг.

anonymous
()
Ответ на: комментарий от shty

Знаешь ли ты, что лисп это не язык как таковой, а динамическая виртуальная машина?
Собственно .NET от лиспа отличается разве что стековой направленностью и несколько урезанными execution model и системой типов.

anonymous
()
Ответ на: комментарий от alienclaster

А сразу во вторую от ограниченности java

Оно студентом надо? Судя по положению дел им бы хоть что-то осилить... А так конечно, можно OCaml или Haskell, но тогда точно все забьют. (у нас и OCaml был, и пришлось учить, хотя забить хотелось) Но тут ситуация другая: если студенты забьют то ТСу придётся самому за них всё делать.

А что же вы тогда учили, если не uml и шаблоны проектирования?

Вообще много чего учили. Но конкретно этот курс предназначался для начального обучения и начинался с элементарного - циклов, if then else и т.п. Закончился сериализацией, контейнерами, потоками и немножко сетевым программированием.

invy ★★★★★
()
Ответ на: комментарий от anonymous

Знаешь ли ты, что лисп это не язык как таковой, а динамическая виртуальная машина? Собственно .NET от лиспа отличается разве что стековой направленностью и несколько урезанными execution model и системой типов.

прежде чем ты будешь писать «моар бред» рекомендую тебе сходить и подучить теорию, потому что пока у тебя в голове каша

shty ★★★★★
()

Думал было python, но тем не в нём производительность недостаточная

Я, вот, новичков на python стараюсь подсаживать. Оптимальный, ИМХО, выбор. Современная альтернатива когда-то идеальному для обучения Basic'у, да и, вообще, его внук.

А ресурсоёмкие задачи для новичков, да ещё такие, с которым Python не справится — это экзотика. Можно их тогда с numpy или boo познакомить :)

KRoN73 ★★★★★
()
Ответ на: комментарий от shty

Прежде чем нести свой обычный бред, основанный на неспособности контраргументировать, рекомендую идти и посмотреть что такое лисп вообще.

anonymous
()
Ответ на: комментарий от anonymous

я тебе схему дал, чтобы помочь ответить и не выглядеть таким чухонем как ты сейчас, но ты решил её проигнорировать и снова написать немного своего бреда, ну что... спасибо что немного

shty ★★★★★
()
Ответ на: комментарий от anonymous

рекомендую идти и посмотреть что такое лисп вообще.

Lisp - язык программирования

вот и википедия со мной согласна:

Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов.

ещё «умных вопросов»?

shty ★★★★★
()
Ответ на: комментарий от anonymous

Про убийцу Си - надо плясать от задачи. Частично я выше ответил.

Вот что «плясать надо от задачи», с этим я абсолютно согласен, хотя в недавнем треде про недостатки Питона мне высказали другую точку зрения:

OldFatMan

Верно. Я про то же говорил. Есть задача - проектируем модель и способ решения - выбираем ЯП.

schizoid

А я не про то же. Сейчас количество готового кода (библиотек/фреймворков) и фич типа C++0x на порядки больше, чем тогда, когда утверждение «выбирать язык под задачу» образовалось. Смысл выбирать язык под задачу исчез.

Вот такое вот «есть мнение».

Если говорить о поддержки легаси на Си, то конечно, альтернатив Си нет, ггг.

А что «ггг», я сейчас по большей части этим и занимаюсь. Мне это не в тягость.

OldFatMan
()
Ответ на: комментарий от shty

Я под твою дудку, троллие, подстраиваться не собираюсь.
Если ты не настолько тупой, насколько пытаешься казаться - иди и смотри лисп, а не пизди. Потом приходи - еще поговорим.

Ты уже обосрался, приняв утверждение о том, что лисп это VM за бред. Чтобы дальше не обсираться - подтяни теор. базу. Потом - приходи, да.

anonymous
()
Ответ на: комментарий от anonymous

Я под твою дудку, троллие, подстраиваться не собираюсь.

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

приняв утверждение о том, что лисп это VM за бред

лисп - это ЯП, почитай иди чем отличатся ВМ от ЯП... хотя что же это я - у тебя лямба-исчисление, замыкания, хвостовая рекурсия, и т.д. - всё сплошь крутые слова, куда уж тебе до простых и понятных каждому первокурснику понятий

shty ★★★★★
()
Ответ на: комментарий от shty

ЯП это формальный язык, заданный синтаксисом и семантикой, дебил.

У лиспа, особенно CL - нет синтаксиса и семантики, у него есть модель исполнения. Это машина, а не язык.

Собираешься оспорить - задавай мне синтаксис и семантику CL(операционную хотя бы, с денотационной хуй с ней). Обосрешься - так и запишем.

anonymous
()
Ответ на: комментарий от anonymous

У лиспа, особенно CL - нет синтаксиса и семантики

вот ты весь в этом, разглагольствуешь о высоких материях, но путаешься в элементарных понятиях

Собираешься оспорить - задавай мне синтаксис и семантику CL

напиши мне программу на lisp без скобочек :)

shty ★★★★★
()
Ответ на: комментарий от anonymous

ОС - если новую, то на нормальном языке, да на том же лиспе, да, на каком-нибудь развитии CL.

facepalm.lisp. Если говорить о системном программировании (об ОСе строении в том числе), когда счёт идёт на байты и инструкции, то Лисп (SBCL, например) тупо тормозит и тупо ест память. То же самое можно сказать и про Haskell, ML-и и любые другие языки с ФВП и GC.

Хотя это даже не главное, а главное, что в такого рода разработках многочисленные «фичи лиспа» не особо и нужны. В других нишах (прототипирование, быстрая разработка) - да, удобно.

Примеры, в современности, уже есть - Singularity.

Singularity это академический прототип. Просто идея разрабатывать ОС на managed языке с расчётом получить за счёт этого более гибкий процесс разработки/отладки, с тем же успехом можно было бы взять вариацию си расширенную ADT и более мощной системой типов - примеры тоже есть, Cyclone, например.

quasimoto ★★★★
()
Ответ на: комментарий от shty

Я задал конкретный вопрос - ты в состоянии описать синтаксис и семантику CL?

Нет? Обосрался?

Программа без скобочек это невалидное понятие. В лиспе нет программ, там есть функции. Функция это объект машины, представляющий блок исполняемого кода. У функций нет никаких «скобочек», блять(как нет никаких «звездочек» у машинных слов, обозначающих указатели на области памяти в современных процессорах), у них есть код, который они исполняют, и опционально - имя в виде либо символа либо cons-ячейки из символа с именем «SETF» из пакета с именем «CL» и другого символа.

anonymous
()
Ответ на: комментарий от anonymous

В сишечке хоть вычисляемое goto то есть? А уж какой-нибудь non-local-exit?

Это ты так setjmp/longjmp обозвал?

А в лиспах - есть.

Всё что есть в лиспах это либо «VM games», либо есть в си - лямбды, замыкания и ФВП ведь не святым духом работают.

quasimoto ★★★★
()
Ответ на: комментарий от shty

лисп - это ЯП, почитай иди чем отличатся ВМ от ЯП...

Он имеет ввиду, что лисп, CL например, это такой язык (в случае CL _такой_ означает наличия compile, eval, macros и т.п. в стандарте), что для его реализации зачастую нужна ВМ с особыми свойствами, допуская вольность, такую ВМ можно обозвать «лиспом».

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

то Лисп (SBCL, например) тупо тормозит и тупо ест память.

Охуенно аргументированное утверждение. До такого даже shty не опустился(shty - бери пример!).

В такого рода разработках мы получаем вменяемый рантайм лиспа на самом низком уровне, и не получаем оверхеда от его реализации на триста уровней выше(как это с SBCL, который полагается на рантайм Си(жирными буквами: сишный рантайм. Лиспу нужен лисповый, для нормальной работы), который полагается на сишный интерфейс ОС, который полагается еще на триста уровней внутри ядра ОС). И потом пишем нормальную ОС без нужного исключительно только для Си говна типа виртуальной памяти и разделения кернелспейса и остального.


с тем же успехом можно было бы взять вариацию си расширенную ADT и более мощной системой типов

Ну у тебя как всегда.

ОС, и язык, на котором она пишется - должны быть максимально динамичными. С сишкой это достигается войдпойнтерами направо и налево. С лиспом это бы достигалось в нормальном виде. С хаскелями и прочей статикой это не достигается никак.

anonymous
()
Ответ на: комментарий от quasimoto

Singularity это в первую очередь реализация вменяемой ОС без сишного говна описанного выше(виртуальная память etc).
Пока прототип, тем не менее, такие ОС это будущее.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.