Как стать автором
Обновить

Комментарии 256

Классная статья, хорошие аргументы, но кто сейчас сможет из готового или готовящегося преподовательского состава преподовать или даже просто сам по себе начать инетересоваться руби вместо того что им втыкали в голову в их вузах… Так что это конечно прекрасно все, но не реализуемо пока
Ну можно начать с молодых кадров, сидящих на Хабрахабре :)
На Хабре, благо, можно изучать новые языки каплями, ведрами и унциями. А вот в школы и вузы сложно сейчас внедрить что-то новое, хоть и хотелось бы…
Причём даже если государство сделает под это очередной «портал» на бейсике за немалые бюджетные денежки, это делу не поможет. Как толкали по инерции привычное, так и будут. Да и собственно чему удивляться? Сначала надо сделать профессию учителя привлекательной с финансовой точки зрения, иначе преподавать будут только те «специалисты», которым не хватает знаний чтобы работать программистами. Ну и те немногие, перед которыми я готов снять шляпу за их безвозмездный труд на благо детям.
Побольше бы преподавателей читали такие статьи.
При действительно начальном обучении программиста, мне всё-таки кажется, PASCAL до сих пор остается идеальным решением — человек только начинает знакомиться с программированием и многие вещи из Ruby для него будут казаться непонятными волшебными пузырьками.

Андрей, о каком ООП и функциональном программировании может идти речь, если человека впервые в жизни посадили писать программу =)

Это всё уже можно начать преподавать потом, ну пусть даже спустя семестр или два
ООП само собой преподавать уже потом. Но для преподавания не надо будет учить другой язык программирования.

Обычные алгоритмы на Ruby выглядят точно так же как на Pascal :).
видимо Pascal человек узнает, где-то раньше? И для него всегого рода декларации переменных не кажутся волшебными пузыриками?
Вообще все зависит от преподавателя, если он не будет говорит «def name do… end — так мы пишим потому что так НАДО», то и волшебства не будет.
Pascal, Basic…

Нас в вузе в первом же семестре окунули с головой в ассемблер :) Затем был чистый С, и это было классно!
ООП начали преподавать только со второго курса. В прочем, многие уже знали C++, хоть и не в совершенстве.
НЛО прилетело и опубликовало эту надпись здесь
Ну не любой язык, а только с такой же парадигмой, как и у Pascal ;). В любом случае изучение Ruby/Python даст столько же, сколько Pascal если не больше.
Кроме того, у Python/Ruby есть не только IDE, а и интерактивная консоль. Да и зачем иметь лишний язык программирования, который не нужен сразу после обучения?
НЛО прилетело и опубликовало эту надпись здесь
Она позволяет экспериментировать быстрее. Конечно преимущество не на 100 раз, но всё равно удобнее.
Ну а без интерактивности студент экспериментирует медленнее, зато больше думает.
Зная Паскаль, нетрудно обучиться программированию в среди Delphi.
А Дельфи — идеальная вещь для написания стандартных виндовых прикладных программ.
После Паскаля Ерланг за неделю вы не выучите.
Ерланг другой язык, а вот в C/C++ можно будет достаточно быстро разобраться.
Все таки нужно изучать языки программирования с низкого уровня на высокий. Чтобы человек потом не воспринимал код на Ruby, Python или Javascript как магию вуду, а понимал как это работает на низком уровне.

Я когда-то начинал с основ ассемблера, после него паскаль казался просто сказкой.
Именно об этом и говорят. Языки одной группы да, можно изучить за неделю, зная один из них. Но языки бывают разные.
По поводу того, что нужно понимать, как это всё работает на низком уровне, абсолютно согласен.
Проблема в том, что нет единого пути с низов на вверх. Общее только одно — asm, но его преподавать тяжело. А C++ — это не низ, это уже одна, далеко не идеальная ветвь.
Ну вот Форт — уровня ниже некуда, а после Паскаля все равно будет трудно.
ага начни c python/ruby или явы и все, ппц приехали…

нащот кроссплатворменности и актуальности (современности) -> откроте для себя: free pascal, zonnon, bkackbox (component pascal)
FreePascal — это просто свободная реализация TurboPascal. Как минимум тот же консольный интерфейс. Zonnon — это вообще новый язык, так какая разница переходить ли на Ruby или на Zonnon? Кроме того, как я понимаю free pascal, zonnon, bkackbox всё равно не используется в промышленности и вопрос только одной парадигмы не решён.
НЛО прилетело и опубликовало эту надпись здесь
Неплохо выглядит, но опять же вопрос — почему именно Pascal? Вот, например, такая же среда обучения для Ruby — Hackety Hack.
НЛО прилетело и опубликовало эту надпись здесь
Есть ещё Python, Groovy, Lua. За последние 10 лет было создано много новых лёгких языков. Python вообще создавался учителем в рамках проекта языка именно для обучения.
НЛО прилетело и опубликовало эту надпись здесь
Python с паскалем перепутали.
Не перепутал :)
Prooflink or didn't happen.
Википедия: «Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию
это психоделика сполшная.
знакомить детей с творениями whytheluckystuff — нельзя. это чревато неверным пониманием процесса.
творения замечательны, но для взрослого программиста. не для новичка.
обероноподоюбные езыки всетаки ближе по структуре к паскалю.
руби и питон покалечат мозг юного хацкера своей скриптовой сущностью.
Мозг юного хацкера калечится чем угодно. Хоть паскалем, хоть обероном, хоть схемой с питоном. Вопрос в том, как преподавать, и в каком комплексе. Одним языком все равно не отделаться.
Freepascal очень похож на Delphi, как минимум в нем есть нормальный ООП. Не для консольных приложений есть Lazarus
вообще начинать с python/ruby думаю лучше, чем начинать с Basic :)
а я открыл для себя Turbo Delphi :) Сижу и решаю консольные задачки, ну и книгу Вирта «Алгоритмы и структуры данных» изучаю… Мне пока хватает…
Что-то мне спомнились школьные годы…
Как я на Дельфях писал визуализатор алгоритма Беллмана-Форда.
Наверное, мне просто повезло со школой)))

А вообще было бы круто начинать изучать программирование с Си++. Не знаю, благоговею я перед ним…
в институте — да. хорошо.
в школе — согласитесь, не всегда стоит :-)
С C++ не стоит — лучше с C, а ООП модель C++ — это уже одна, не самая лучшая ветка.
блин, чем вам так не угодила ООП модель в с++? за этот тред уже наверно раз третий вижу ваш пост про это;)
Потому что он воспринимается как де-факто стандарт ООП — хотя первая модель была именно Smalltalk. В общем личные счёты :D
а более конкретно? просто когда вы говорите что ООП в с++ кака лишь из-за того что вам обидно за смаллталк это не серьезно…
Ну я говорил только то, что ООП модель C++ — только одна из возможных и неплохо было бы дать и модель Smalltalk.
а смаллталк еще жив? я думал он сейчас где-то рядом с паскалем по вотсребованности
Ruby, Objective-C (Mac OS X, iPhone) используют его модель. Если говорить формально, все языки с утиной типизацией — это больше подход Smalltalk.
обж-С это вообще жесть на мой взгляд… я его так и не понял и преподовать его в вузе точно не стоит (в виду сильной нишевости)…
а вот языки типа руби/питона легко изучаются с++-программистом (на своем опыте говорю)…
ООП модели Ruby и Obj-C одинаковые кстати. Вообще я не думаю, что Obj-C более нищевый, чем Delphi :).
ну я думаю что даже менее нишевый чем дельфи… но я вроде про дельфи ваще молчу
на самом деле ObjC довольно простой язык, просто иногда трудно понять концепцию посыла сообщения объекту, вместо вызова его функции. Некоторые считают что это одно и то же, хотя на самом деле идея намного лучшая.

А учить в университете ЯП нужно не исходя из того насколько они востребованы, а исходя из того, какие концепции в них заложены.
и поэтому надо преподавать на основе ЯП, который практически уникален по своей концепции? Я всегда считал что надо преподавать более общие языки, чтобы новые похожие можно было легко понять (что дает больше возможностей, чем на основе уникальных языков)
C++ вряд ли более общий :) Множественное наследование — это чисто его прерогатива. Pascal тоже довольно самобытен.
а так обязательно использовать множественное наследование?
Ну у нас на МатМехе в первом семестре чистый си. Для зачета заставили написать прогу для расчета алг. выражений. Во втором семестре будет хаскель и будем писать что-то вроде интерпретатора асемблера. Конечно, своей очень упрощенной виртуальной машины.
Повезло, но везет не всем. Матобез учит haskell всем потоком на 5ом курсе, а остальные как придется — в программе его нет, а язык на котором проходит практика выбирает преподаватель каждой группы самостаятельно, поэтому у нас в группе была Java, а у соседней группы haskell.
А вы где учитесь(учились)?)
Я про ИТ говорю
Примат, МатМех, СПбГУ.
Мне кажется, что надо начинать обучение с более строгих языков, чем Python/Ruby, потому-что на первых порах у многих работает принцип «если компилируется, значит работает». И в коде таких студентов может быть много скрытых ошибок, которые могут быть пойманы компилятором в языках типа C++/Java/C#.
Тоже вариант, но тогда надо начинать с C. C++/Java/C# — это уже обвесы и парадигмы.
Да, совершенно верно, начинать обучать нужно именно с компилируемых языков. Без базовых понятий системного программирования, совершенно неправильно начинать изучать интерпретируемые языки.
А какая принципиальная разница между компилируемыми и интерпретируемым. Python и JRuby тоже между прочим компилируются ;).
Ой, что-то я не в ту ветку попал :) Тогда перефразирую: «Нет, начинать обучать нужно именно с компилируемых языков… »

И повторю, сказанное markshevchenko, что интерпретируемые языки не дают понять, как выполняются некоторые операции на уровне системы.
Python и JRuby тоже компилируются ;) Вопрос, наверное, в ручном управлении памяти. Но на Pascal тоже нельзя увидеть всё на уровне системы. Я предлагаю Ruby/Python только как замена Pascal для обучения вкупе с asm/C.
Спорный вопрос. Смотря чему учить. Алгоритмику на algol/pascal довольно удобно преподавать. Системное программирование — на С. ООП — на Java. Веб — на Python/Ruby. Распределённые вычисления — на Эрланге. Каждому языку — своё место
Нельзя начинать обучение с компилируемых языков — я в этом уверен.

Представьте, что вы — ученик начальных классов школы. И что вас сначала месяцами учили бы собирать-разбирать арифмометры, тщательно втолковывая какая шестерня зачем нужна. И только потом стали учить преподавать основы арифметики — сложение, вычитание, таблицу умножения и т.п. Вы бы полюбили математику?

Основательное образование — это здорово, но не надо торопить события. Это как с детьми — от преждевременных родов пользы будет мало. Лично я вижу две стадии:

1. Сначала дайте человеку научиться алгоритмически мыслить. Пусть он заинтересуется, пусть поймёт, что компьютер может быть умным и хорошим помощником, и что он полностью в его власти. И на этой стадии категорически нельзя морочить голову вопросами «сколько байт надо зарезервировать под массив», или «какой размерности переменная нужна для этого цикла». Python или Ruby — идеальны для этой цели. В дебри, вроде DSL или метаклассов лезть совсем не нужно — это для профессионального использования языков в больших проектах. Зато очень удобно отлаживать, экспериментировать… словом, учиться!

2. Дальше уже зависит от людей. Как правило, заинтересованный человек начинает расти, задачи становятся всё сложее — вот тут самое время переходить к объяснению низкоуровневых понятий. И эти понятия лягут в благодатную почву — потому что костяк алгоритмического мышления уже сформирован, и человеку будет легче «увидеть лес» за кучей низкоуровневых деревьев-мелочей, а накопленный интерес даст сил справиться с любыми трудностями.

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

«Студент — это не гусь, которого надо нафаршировать, а факел — который нужно зажечь.» :-)
Я не имел в виду, что начинать надо именно с компилируемых языков, я написал, что надо с более строгих, чем Питон/Руби, а компилируемость — это как пример строгости.

Давайте рассмотрим пример.
Задача: Создать массив со значениями елементов 7.4, 8, 5, 4.3, 1.6, 7. Вывести через пробел числа этого массива, разделенные на 2.

Возможное решение ученика на Python:

a = [7.4, 8, 5, 4.3, 1.6, 7]

for x in a:
  print x/2,


* This source code was highlighted with Source Code Highlighter.

Возможное решение ученика на C++ (на Паскале будет похожее, только с немного другим синтаксисом):

#include <iostream>
using namespace std;

int main()
{
  float a[] = {7.4, 8, 5, 4.3, 1.6, 7};
  
  for(int i=0; i<6; i++)
    cout << a[i]/2 << ' ';
    
  return 0;
}


* This source code was highlighted with Source Code Highlighter.


Тепер вопросы:
1. Где тут 2+2, а где тут шестеренки арифмометра? (При этом учтите, что include, using namespace, main, return — это просто шаблон, который «просто надо»).
2. Почему ученик на С++ и Паскале удовлетворится результатами, и будет работать дальше, а ученик Питоне будет думать, где же тут ошибка? Если же начать обьяснять в чем ошибка — то мы опять-же возвращаемся к «шестеренкам арифмометра».

> «Студент — это не гусь, которого надо нафаршировать, а факел — который нужно зажечь.»
Спасибо, хорошая фраза :)
Вы хоть сами попробуйте теперь посмотреть на эти исходники отстранённо, взглядом новичка. В Python-варианте мне видна самая суть алгоритма, и я знаю, что этого минимума достаточно для работы!

А теперь вернёмся к C++-варианту. Попробуйте полностью объяснить ваш пример начинающему. Т.е. так, чтобы не осталось никаких «это вы потом поймёте», или магических «просто так надо» (если вы действительно хотите научить человека понимать, а не выполнять странные заученные операции). Вам понадобится (сверху-вниз) объяснить:

1. что такое директивы компилятора
2. как программы разбиваются на модули, и назначение директивы #include
3. что такое пространства имён (это когда ученик только-только переменные-то усвоил?!), и зачем именно понадобилась строка «using namespace std;»
4. зачем в конце каждой строки стоит ";", когда её надо использовать, а когда — нет. Интуитивно это не всегда понятно — почему, например, после «for» этого знака нет?!
5. типы данных, и зачем конкретно нужен float. Даже великий математик прошлого не понял бы типы данных сразу, потому что переменная — это всегда просто переменная, и люди решают математические задачи не задумываясь о каких-то там форматах представления данных.
6. Синтаксис оператора «for», что такое переменная цикла, как она инициализируется и меняется по шагам, что такое условие цикла, что такое инкрементация, и почему именно вы тогда написали «i++», а не "++i", «i = i + 1»?
7. что такое потоки ввода-вывода (и не забудьте увязать это с include).
8. что такое функция вообще, и зачем понадобилась функция main. Попробуйте разъяснить начинающему про «точку входа» в программу, про значение, возвращаемое операционной системе после завершения работы и зачем оно нужно. К счастью, в вашей программе функция main без аргументов, вроде «int argc, char...» — а ведь некоторые компиляторы на это ругались бы!

Вам не кажется, что это всё просто кошмарно сложно для примера «Вывести через пробел числа этого массива, разделенные на 2»?! И не надейтесь, что ученики так вот сразу всё это усвоят. Не усвоят, а испугаются. Так, вместо того, чтобы сформировать у них мнение
— Программирование — это довольно понятная штука, и я со временем всему научусь.
можно сформировать другое:
— Программирование — это какие-то страшные дебри непонятных условностей, через которые продираются только полоумные психи. Ни в жизнь я его не смогу освоить!

Согласитесь, очень похоже на то, как многие дети (и взрослые) относятся к математике, физике и прочим точным наукам.
п. 1-3. Ну совсем не вижу необходимости рассказывать это сразу. Во-первых, если для вас это критично — используйте Pascal, там ничего из этого не надо. Во-вторых — вспомните, что в Python тоже надо будеть пояснять, что такое import, для такой «простой» функции, как, скажем, синус.

п. 4. А на Питоне на той же программе учителю придеться бегать по класу и пробелы расставлять — чем лучше точки с запятой?

п. 5. Во-первых не надо сразу вываливать на ученика все типы данных. Почему просто не сказать, что float — действительное число? Неужели так сложно?
Во-вторых даже вы, судя по тому, что хотя я и спрашивал, но вы нигде так и не ответили, не заметили, что в примере с Python — ошибка! А каково будет ученику? Эта ваша «простота» Питона выливается в состояние ученика «Почему у меня такая простая программа и неправильно работает?». А это состояние куда хуже чем пару строчек, на которые учитель сказал пока-что не обращать внимания.

п. 6-8. Согласен, тут С++ слишком сложен, но я привел С++ просто в качестве языка, который строже чем Питон, и показал в чем преимущество его строгости. Для обучения нужен более строгий, чем Питон язык, с более простым синтаксисом, чем в С++. Тот же Паскаль, например.

Но попробуем вернуться к сути моего поста. Зря я написал пример на С++, надо было выбрать более простой язык со статической типизацией (сообственно С++ действительно сложный язык — и я тоже считаю, что начинать сразу с него не надо), поскольку вы так кинулись мне доказывать что С++ слишком сложен, что забыли ответить на вопрос, ради которого я вообще писал эти примеры — почему ученик на Питоне будет искать ошибку, а у ученика на С++ (подставте сюда любой другой статически типизирований язык) будет все работать?
п. 1-3. Ну совсем не вижу необходимости рассказывать это сразу.
И я о том же. Не нужно всё рассказывать сразу и забивать раньше времени мозг шелухой. Но, в то же время, я уверен в необходимости избегать «магических заклинаний». Ведь все эти «using namespace std;» для новичка ничем не отличаются от «чтобы заклятье заработало — брось три горсти песка через левое плечо, повернись на левом каблуке и подожги сушёную лапку летучей мыши»".
Во-первых, если для вас это критично — используйте Pascal, там ничего из этого не надо.
Вот я и использую питон :) Там это точно не надо :)
Во-вторых — вспомните, что в Python тоже надо будеть пояснять, что такое import, для такой «простой» функции, как, скажем, синус.
В принципе, можно неделями учить человека, и так и не столкнуться с import'ом — есть куча интересных задач, решаемых и без него. Особенно классических — на базовые алгоритмы. А придёт время — человек будет достаточно подготовлен, да и не такая это сложная штука — import.
п. 4. А на Питоне на той же программе учителю придеться бегать по класу и пробелы расставлять — чем лучше точки с запятой?
Просто выберите нормальный редактор. «Проблемы с табуляцией» — исключительно надуманны. Попробуйте сами — поймёте.
п. 5. Во-первых не надо сразу вываливать на ученика все типы данных. Почему просто не сказать, что float — действительное число? Неужели так сложно?

Потому что встаёт вопрос «а зачем понадобилось какое-то отдельное „действительное число“»? Если этот вопрос не поставили, значит, человек просто кивнул, соглашаясь с вашим авторитетом, и запишет float в свою «книгу заклинаний».
Во-вторых даже вы, судя по тому, что хотя я и спрашивал, но вы нигде так и не ответили, не заметили, что в примере с Python — ошибка! А каково будет ученику? Эта ваша «простота» Питона выливается в состояние ученика «Почему у меня такая простая программа и неправильно работает?». А это состояние куда хуже чем пару строчек, на которые учитель сказал пока-что не обращать внимания.
Читаю, и не могу понять, а при чём тут статическая типизация? При ней нельзя допустить ошибку? Компилятор всё всегда поправит и подскажет?
п. 6-8. Согласен, тут С++ слишком сложен, но я привел С++ просто в качестве языка, который строже чем Питон, и показал в чем преимущество его строгости. Для обучения нужен более строгий, чем Питон язык, с более простым синтаксисом, чем в С++. Тот же Паскаль, например.
Да, вы привели пример более строгого языка. Но я всё ещё не вижу преимущества в обучении, обусловленного этой строгостью. Пока только утверждения что «строго»=«хорошо». Ну да… а если пороть ремнём за двойки — тоже будут учиться гораздо лучше…
Но попробуем вернуться к сути моего поста. Зря я написал пример на С++, надо было выбрать более простой язык со статической типизацией (сообственно С++ действительно сложный язык — и я тоже считаю, что начинать сразу с него не надо), поскольку вы так кинулись мне доказывать что С++ слишком сложен, что забыли ответить на вопрос, ради которого я вообще писал эти примеры — почему ученик на Питоне будет искать ошибку, а у ученика на С++ (подставте сюда любой другой статически типизирований язык) будет все работать?
Я всё ещё в недоумении, и не могу понять вашей логики. Ученики, пишущие на языках со статической типизацией не допускают ошибок?! 8-) Или допускают их меньше? Если второе — тут можно развернуть очень большой спор. Ибо, насколько я знаю, очень большое число ошибок «растут» именно из статичности типизации — выход за границы зарезервированных массивов (вспомните переполнение буфера), некорректные выбранный тип (вспоминается неудачный запуск космического аппарата, который взорвался из-за того, что программа блока управления попыталась сложить два однобайтовых целых и результат поместить в такую же переменную).

Ни строгость, ни типизация не являются панацеями для «более качественного» обучения. Качества не будет, пока человек не начнёт любить программирование. Я не говорю, что нельзя привить любовь, обучая C++ или Pascal — всё можно. Просто динамические языки, более близкие к традиционному мышлению человека, позволяют сделать первые шаги более простыми и приятными — не отпугивая, а маня человека в этот увлекательный мир… :)
Не буду отвечать по пунктах, а то размеры постов разрастаются в арифметической прогрессии.

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

> Но я всё ещё не вижу преимущества в обучении, обусловленного этой строгостью.

Вы внимательно примеры прочли? Или отсутствие ошибки при внешне «кажущейся» одинаковости — это не является преимуществом? Я не говорю, что если мы используем строгий язык мы вообще избавимся от ошибок — но некоторые скрытые ошибки, от которых порой хочется ученику головой об стенку биться, могут ищезнуть. У меня лично были такие ошибки, когда я учил языки типа Python/PHP, что потом оставляло сильное впечетление «коварности» языка.
Как вы всё правильно пишете. И разбор примера из С++ ниже — великолепен. Вы — преподаватель? :)
Цитата классная.
Если бы… :) Нет, профессионально я преподаванием не занимаюсь. Но хотел бы, если честно, только материальное положение не позволяет. Опыт обучения азам программирования у меня был (в разное время). Пробовал начинать обучение и паскаля, C — оказалось, что всё это не то… так что я тоже переболел этим «начинать обучение с более строгих языков», «нужна дисциплина» и т.п.

Сам начинал шестиклассником, с бейсика, без компьютера — на бумажке, по старой советской книжке…

Я так понимаю, отвергают обучение программированию на Python/Ruby те люди, которые сами никогда на них не писали. Они думают, что хорошо представляют, что это такое. Они уверены, что это почти тот же бейсик…

С такой позиции вообще кажется диким, что на этих языках пишут что-то серьёзное, коммерческое… Как же так?!!! А как же строгая типизация?! Как же проверка кода на стадии компиляции?!!! Что значит «Этот метод был создан динамически уже после создания объекта, и не содержится в декларации класса» или «атрибут может быть, а может и нет» — это безобразие и раздолбайство! Это вообще «не полетит»!.. Я сам через это прошёл…
может быть в общем вы и правы насчет людей, но бывают и неподходящие случаи… например мне очень нравится Руби (Питон смотрел мельком, поэтому не могу ничего сказать) и я не спорю что на нем можно писать достаточно большие программы. Но я все равно считаю, что учить надо с менее засахаренных языков, чтобы не допустить вот этого самого разгильдяйства.
Беда в том, что вам только «нравится Руби». И не спорите вы с тем, «что на нем можно писать достаточно большие программы» только потому, что эти большие программы — у вас перед глазами. Они существую объективно, и с этим не поспоришь. А вы попробуйте серьёзно на Руби писать! Иначе разговор походить на беседу дальтоника с фотографом об оттенках заката.

Поймите, нет никакого «разгильдяйства»! Осознание того, что «скрипач не нужен» (я про типизацию, строгость и прочие низкоуровневые детали) приходит далеко не сразу. Мне понадобилось около двух лет, т.к. ранее я занимался коммерческой разработкой на Delphi, С# и Java. Все эти два года меня буквально «плющило» от питона!

То, что вы называете «сахаром» — это лишь удачная попытка повернуть машину лицом к разработчику… а не двоичным кодом. Всё же человек построен не по Фон-Неймановской архитектуре — мыслить в точности, как машина, он не может. И хотя людей не переделать, машину-то переделать реально! Руби — это и есть такая переделка. Поэтому не говорите мне, что проще научиться программированию мысля не только в терминах алгоритмов (которые мы используем и в жизни), но и в терминах стеков, указателей, битовых операций внагрузку.

Потом, позже — сколько угодно. Пусть учится и типизации, и компьютерной архитектуре. Пусть получает удовольствие от роста производительности в 10-1000 раз. Но это — потом.

К сожалению, я повально сталкиваюсь с примерами, когда программисты пишут на каком-нибудь C# или Java, словно даже не понимая, что они делают. Пишут какими-то шаблонными, заученными кусками. Без интереса. Без любви к искусству. Мне кажется они и есть — те самые «нафаршированные гуси» нашего образования. Обучить их обучили, как обезьян можно научить управлять космическим кораблём, но развилось ли у них глубокое понимание и соответствующее алгоритмическое мышление — это большой вопрос.
В силу недавнего знакомства много использовать руби в деятельности банально не успел… ну написал нейросеть с ГУЕм… ну использую рельсы… но особо много не написал еще… я не спорю что это очень хороший язык, не спорю что на нем можно эффективно писать, НО на нем можно эффективно писать опять же только если понимаешь что находиться behind the scene, если понимаешь какая примерная сложность вот у такого алгоритма, а какая у такого. Иначе же программы будут писаться неэффективно, но не спорю быстро и возможно даже безглючно.
Я не говорю про разгильдяйство в языке, я говорю про разгильдяйство в мозгу… когда человек осознает что такое динамическая типизация, чем она хороша, чем она плоха то динамика полезна, но когда человек только начинает программировать он это банально не может осознать и начинает лепить такой ужас…

И да… я не говорю как ПРОЩЕ научиться… учеба она всегда сложна… я говорю как научиться КАЧЕСТВЕННЕЕ… в нашей стране образование и так слишком простое… а вот качество иногда страдает

По поводу шаблонных кусков. А вы не подумали что после обучения на том же руби с его большим объемом магии (я знаю что это не магия, а просто хорошо продуманная платформа, но постороннему человеку это все кажется именно магией) человек будет писать теми же самыми заученными кусками, только эти куски будут изобиловать кучей всяких мапов, инъекций и прочего, когда на самом деле это можно решить не таким красивым, но гораздо более эффективным вложенным циклом?
… НО на нем можно эффективно писать опять же только если понимаешь что находиться behind the scene, если понимаешь какая примерная сложность вот у такого алгоритма, а какая у такого. Иначе же программы будут писаться неэффективно, но не спорю быстро и возможно даже безглючно.
Вы абсолютно правы! Но мы говорим о руби в контексте начала обучения программированию вообще, а не профессиональной разработки.

И да… я не говорю как ПРОЩЕ научиться… учеба она всегда сложна… я говорю как научиться КАЧЕСТВЕННЕЕ… в нашей стране образование и так слишком простое… а вот качество иногда страдает
Не понимаю. Простота учёбы и качество не всегда связаны между собой. Почему вы считаете, что учёба обязана быть сложной?! Вот я, например, не считаю, что на школьных уроках математики дети должны решать задачи с использованием римских цифр — «для расширения кругозора». Или что надо отказываться от образовательных видеофильмов, чтобы у учеников «лучше развилось собственное воображение». Нет смысла отказываться от инструментов, способных увеличить эффективность обучения. Ruby/Python — это такой же инструмент. Удобный, простой, интуитивно понятный. Он не мешает вам обучать эффективному программированию. Зато может уменьшить «балласт», о котором я писал выше.

… человек будет писать теми же самыми заученными кусками, только эти куски будут изобиловать кучей всяких мапов, инъекций и прочего, когда на самом деле это можно решить не таким красивым, но гораздо более эффективным вложенным циклом?
Вам надо обучать алгоритмам и структуры данных — пожалуйста, изучайте! Руби вам не помеха, а только подспорье! Как вы научите — так и будут писать. На C++ я тоже могу использовать «всякие мапы» — это несложно, так что ругать Руби просто за их наличие не стоит. Более того, в подавляющем числе задач скорость выполнения не играет такой колоссальной роли, как простота, ясность и компактность кода! «Меньше кода — меньше багов».

Поймите же! Обучение должно быть интересным! Должно!!! Чему бы вы ни учили! Заинтересуйте человека — и ему всё станет по силам! Что, по вашему, интереснее для начинающего — Ruby или C?
Вы абсолютно правы! Но мы говорим о руби в контексте начала обучения программированию вообще, а не профессиональной разработки.

А что не надо учиться писать эффективно? Мне казалось что в этом и состоит основная задача программиста… или я заблуждаюсь и сейчас эффективность не в моде?

чорт нажал ctrl-enter

Вам надо обучать алгоритмам и структуры данных — пожалуйста, изучайте! Руби вам не помеха, а только подспорье! Как вы научите — так и будут писать. На C++ я тоже могу использовать «всякие мапы» — это несложно, так что ругать Руби просто за их наличие не стоит. Более того, в подавляющем числе задач скорость выполнения не играет такой колоссальной роли, как простота, ясность и компактность кода! «Меньше кода — меньше багов».

На плюсах не те мапы которые в руби как бы… я говорил про метод map у массива.
Чем меньше кода тем меньше багов, но и меньше понимания того что делает этот код у обучающегося.
Поймите же! Обучение должно быть интересным! Должно!!! Чему бы вы ни учили! Заинтересуйте человека — и ему всё станет по силам! Что, по вашему, интереснее для начинающего — Ruby или C?

Мне было вполне интересно изучать С. Если человеку неинтересно программирование, то ему будет неинтересно ни С, ни Руби, ни что угодно.
А если человеку нравится потому что это просто, то это нехорошо. Программирование это еще и достаточно тяжелый труд, и это надо понимать с самого начала.
Давайте закруглятся со спором :). Спор высоко-/низкоуровневые идёт ещё со времён asm vs. C (кстати к C предъявляли те же претензии, что сейчас к Ruby ;) )
Отвратительно писать можно на любом языке. А вы отклонились от темы, ударившись в «священные войны» о сравнительных качествах языков вообще.
начинающий всегда пишет отвратительно… и я не пытаюсь сказать что руби/питон/любой-другой-язык это плохо, я просто говорю что эти языки лучше оставить для тех кто уже понимает в чем суть…
как выше сказали давайте закругляться со спором, а то уже вроде на второй круг пошли
скажите, вам нравились уроки информатики в школе и пары программирования в институте? Вероятно да, если вы продолжаете этим заниматься. Мне тоже нравились. А 90% одноклассников их терпеть ненавидели (в инсте у меня специальность системное ПО, так что пошли туда только те кому интересно). Они и с паскалем/делфи с трудом справлялись в большинстве, несмотря на то что школа продвинутая (лицей), математический класс и отличный преподаватель. И мне кажется им было бы совершенно без разницы какой язык изучать, учитывая что из параллели (80 человек) по программистской стезе пошло человек 5
Если бы в школе преподавали на Лого с черепашкой, то нравилось бы большему кол-ву учеников :).
классе во втором-третьем было что-то из этой серии. Действительно, всем нравилось :)
А вот мне и всей группе не нравились :)
— вся группа плевалась (одни сознательно, другие за компанию :) ), когда первым языком (по сути для обучения собственно программированию и алгоритмизации) нам дали Fortran
— ассемблер дали поверхностно, кто его не знал до этого, толком ничего и не поняли, кто знал поверхностно (как я) знания не углубили
— TurboPascal + TurboVision и параллельно TurboC++ + TurboVision — первый, имхо, был излишен, он назывался что-то вроде «Алгоритмы и численные методы», второй «ООП». Стоит ли говорить, что половину курса алгоритмов мы изучали собственно TurboPascal и TurboVision, изучая параллельно практически тоже самое, но на С++ (возможно, конечно, что сыграло свою роль то, что читали курсы нам разные кафедры)
НЛО прилетело и опубликовало эту надпись здесь
Кстати, быть может для школы вам стоит приглядеться к Лого и KTurtle (или другой «черепашке»)? В программировании будут шарить больше.
Не будут.
бэйсик не использовал, но на паскале всетаки можно писать оконные приложения — для этого существует библиотека Turbo Vision :)

а вообще в целом я согласен с автором, что необходимо внедрять в программу универа знакомство с такими языками как ruby/python/bash/php/perl

но с другой стороны, если студент будет учитсья на более сложных языках (например С/С++, asm и т.д.), то в будущем ему будет очень легко изучить любой из более легких языков. тяжело в учебе — легко в бою как говорится :)
Это справедливо только для C и asm — потому что это фундамент. C++, Pascal, Java — это уже обвесы. Да и функциональные языки учить так же сложно, как и C++ ;)
С и асм — зыбкий фундамент. ИМХО, люди, которые считают, что начинать изучение С++ нужно с фундаментальных С — глубоко заблуждаются. Если кого заинтересовала эта мысль, комментируйте, дам расширенные примеры.
TurboVision есть и для C++, мне сишная реализация больше понравилась :)
НЛО прилетело и опубликовало эту надпись здесь
А почему бы ещё не присмотреться к функциональному программированию? Например, на Erlang? На С++ сложно писать многозадачные приложение, а на Erlang ты можешь писать хоть под 1024-ядерный процессор! :D
НЛО прилетело и опубликовало эту надпись здесь
Обучение подходам, абстракциям и пр. — возмонжно. Но C/Паскаль и ассемблер исключать из программы нельзя. Иначе получится как в фильмах про магию )
Поэтому в начале я написал, что надо преподавать и C. А зачем Pascal я не знаю — Ruby и C покрывают все его задачи.
Вот полезность в обучении программиста (не факультативный курс информатики, не обязательный курс программирование для строителей, например, а именно профессионального программиста) конкретно Паскаля лично для меня под большим сомнением. Овладение связкой asm/C/C++ и в консоли, и в современной IDE даст ему куда больше, по-моему, в профессиональном плане
Согласен, только мне кажется, что в связке asm/C/C++ С++ нужно заменить на язык другой парадигмы.
Заменить не стоит, дополнить :) На первых трех курсах мы изучали: ассемблер, паскаль, си, сипэпэ, фортран (это, видимо, вместо бейсика :D может не было его на СМ1420 (все таки не для начинающих «машинка»), может фортран обязательный язык в программе тогда был, может еще что ). Согласился бы заменить паскаль и фортран на руби :) Правда его еще тогда не было, да даже на smalltalk или lisp, согласился бы, самостоятельно я их не осилил. Но вот С++ это святое :)
Святое — это C :) C++ — это уже ООП настройка, а С++ модель ООП наверное лучше учить по языкам чистого ООП типа Java/C#.
Спорить о религиях — моветон: Р
Хренассе у вас чистое ООП.
> Хренассе у вас чистое ООП

Да там хоть у «вас», хоть «не у вас». Что такое «чистое ООП» и почему — никто толком не скажет (и вряд ли есть возможность отнести какую-то конкретную реализацию объектно-ориентированных систем под это словосочетание)
> чистого ООП

Весьма сомнительное словосочетание.
Сейчас Паскаль лучше хотябы тем, что под него тонны книг и другой литературы. По питону и руби литературы намного меньше.
Это уже вопрос курицы и яйца. Только по Pascal мало практической литературы ;).
Заглянул сегодня в ближайший книжный магазинчик. В отделе компьютерной литературы — один книгохлам. Удивительно, покупает ли это кто-нибудь и зачем занимать этим место. Жаль, на Белорусской магазин закрылся — там действительно был выбор актуальных книг. Не представляю, как выглядят аналогичные магазины в провинции — боюсь что там компьютерных книг две — «windows для чайников» и «паскаль для школьников»
Я только начал знакомиться с Ruby, но составил уже кое-какое мнение. Если начинать изучение программирования вообще на Руби (во всем его многообразии, а не «процедурно-ооп-сишном» стиле), то потом, на стадии изучения более простых языков, это может сыграть злую шутку — он начнет плеваться в сторону «обычных» языков :) где надо писать for(i=0; i<count; i++) {...} вместо count.times {|i| ...} — Не это ли является целью, пускай и подсознательной, вашей агитации обучения программированию на Руби? ;)
:D сейчас точно такая же ситуация — люди плюются на count.times {|i| ...} так как их учили for(i=0; i<count; i++) {...} (теоретически оптимизировать оба алгоритма можно одинаково).
Да, но переход от for к times куда проще, чем обратно, особенно если не знать как внутри, скажем при полноценной компиляции (ведь мы к ней придем на пределе оптимизации, если считать что над аппаратными средствами у нас власти нет? ;) ), реализуется этот цикл.

Я вот, в известных вам «каплях», так и не врубился во все эти блоки. То есть я просто принял, что each это просто другая запись оператора цикла, что, грубо говоря, где-то там внутри интерпретатора он преобразуется к тому же for. Мне не в первой привыкать к различным синтаксисам, так что даже не плевался (плевался и плююсь :) из-за @ перед членами класса, почему-то мне проще набирать даже $this-> :) )

Но только прочитав в книге про yadl понял что это не синтаксическая конструкция для замены for, а действительно обычный метод. Причем в рамках С++ я не могу пока представить как его реализовать. Что-то похожее, с передачей методу each указателя на функцию, в которой исполняется тело цикла… или шаблоны как-то прикрутить Но громоздко это будет и… не красиво

То есть если студент просто выучит методы times upto и т. п., то ему нужно будет просто привыкнуть к другому синтаксису, а вот если он поймет как это работает, и будет активно этим пользоваться, то скорее всего будет плеваться глядя на С++, а тем более С. Я бы не плевался, если бы начал изучение программирования с Ruby, но слава богу начинал с «ассемблера» «Электроники БЗ-34» :D
Ну кстати синтаксис for и у Pascal другой ;) Я кстати тоже сначала плевался, когда переходил на Java :)
Там синтаксис другой, но та же процедурная основа, я в школе чтобы от меня отвязались с информатикой написал «компилятор» Паскаля в Си, 99% его работы find & replace :D Что примечательно .com файлы получались меньше и работали быстрее, больше ко мне учитель информатики не подходил с задачами и прочим учебным процессом :D
НЛО прилетело и опубликовало эту надпись здесь
По идее, это стандартное задание в курсе системного программирования, который включает в себя основы синтаксического анализа и трансляции. Только, естественно, при выполнении ожидается не find & replace, а полноценный разбор. Сам писал на втором курсе с ANTLR :-)
Мне надо было, чтобы от меня отвязались учителя со своим Паскалем, я хотел Си :)
Мы такое писали на Прологе в рамках изучения логического программирования и конкретно — разбора текстов на естественном языке.
Это была все-таки школа, причем школа еще советская, а не российская :)
в рамках С++

std::for_each же! :)
НЛО прилетело и опубликовало эту надпись здесь
Преподавал группе студентов основы Си, затем Java, затем C++.
Пожалел о таком решении: многие с трудом понимают что такое стек (имеется ввиду тот что в x86) и где лежат локальные переменные, как на низком уровне работает вызов ф-ций -> отсюда трудное понимание механизмов работы C++ (таблица вирт функций и т.п.), отсюда проблемы с применением ООП.
Следующей группе устрою семестр ассемблера, чтобы затем знали хоть как оно всё работает…
Насчёт питона: после Cи предложил самим студентам выбрать из Python, Java, C#, C++, описав вкратце возможности языков, область применения и популярность. Выбрали Java…

После Питона научить чему-либо более низкоуровневому, мне кажется, сложно. А в условиях института (по крайней мере нашего) им значительно чаще потребуется Cи, чем Питон (на старших курсах у многих есть MPI, вычматы и прочие расчётные штуки на базах, хотя база ИСП РАН меня порадовала, там алгоритмы по крайней мере прототипируют на Питоне).
Ну статья была больше против Pascal :). Именно чтобы объяснять, что такое алгоритм, цикл и т. д.
Для выч. мата конечно лучше начать с asm и C. Но преподавая дальше Java вы делаете плохо показывая только одну ветвь языков. Как я понимаю многие расчёты и выч. мата можно распареллировать — тут гораздо лучше подойдут функциональные языки.
Приходится что-то отсекать: 3 семестров института (2 подряд идущие пары информатики в неделю) мало чтобы в охватить и императивные, и ОО, и функциональные языки до уровня, достаточного для применения. 4 семестр у нас занимают т.н. проекты: студенты разбиваются на группы по 2-3 человека и весь семестр делают что-то значительное. Поэтому за три предыдущих семестра надо кроме языков и алгоритмов рассказать ещё как реализовывать GUI, использовать cеть, потоки и синхронизацию, прочие средства ОС. Вот времени и получается очень мало…
При выборе курса я основывался на том, что ООП скилы на данный момент значительно более востребованы на рынке труда, чем знание функциональных языков. Ну и ещё одним фактором послужило то, что я сам не знаю ни одного чисто функционального языка :) Кроме того, у нас в институте есть дополнительные курсы по Питону и Руби, так что все желающие могут ознакомится с этими языками. Были начинания и с FP (на примере Scheme), но благополучно загнулись, т.к. на первое занятие пришло 2 человека…
Насчёт функциональных языков для параллельных вычислений: я только за, но у древних дядечек из ниститутов РАН, которые их приподают, глаза на лоб полезут от вида эрланга и прочих… Вся эта академическая среда довольно инертна, к сожалению.
В США я слышал успеваю прочитать и то и то :)
одно дело прочитать, а другое чтобы студенты въехали
Я согласен. Разве что надо додумать, как преподавать на Руби низкоуровневое программирование.

Изучая Си, хочешь-не хочешь, а поймёшь, что, например, конкатенация строк — ресурсоёмкая операция. В Руби этого не видно. Можно, наверное, совмещать разные языки?
Я поэтому в начале статьи и написал, что лучше преподавать 2 языка (разной парадигмы) — например Ruby и C
Согласен, Python или Ruby не помешало бы включить в программу изучения, хотя если знаком с базовыми понятиями, то переход не составит особого труда.

По себе заметил, что переход на Python вообще не вызвал никаких проблем, т.к. язык понятный и удобный, единственное, что мыслить начинаешь несколько по иному, когда есть возможность использовать генераторы списков и т.д.
за Shoes спасибо. показалось интересным, попробую на досуге поковыряться. на первый взгляд прозрачнее чем wxRuby
Язык = стиль мышления.
Когда говорят про Паскаль, забывают о корнях. Они в Алголе, который много лет был не только языком программирования но и языком описания алгоритмов.
Можно не любить Си-стиль (я его не люблю), но деваться все равно некуда. Время диктует новый стиль мышления и новые языки.
Я сейчас учусь в 11 физ-мат классе. Изучаем Pascal. До этого два года изучали QBasic. Параллельно для себя изучал Visual Basic и продолжаю изучать php (как, по моему мнению, основной язык web-программирования). И я полностью согласен с автором. Из 20 человек, учащихся в моём классе, лишь 5 хотят продолжить изучение программирования в ВУЗе. Остальная часть грезит об экономических и юридических специальностях. Так зачем этой части изучать синтаксис языков, алгоритмы? Нет, я согласен, что изучение алгоритмов, попытки придумать свои алгоритмы очень неплохо развивают умственные способности, но как это объяснить человеку, который при виде синего экрана Pascal'а начинает бить в конвульсиях? Те, кому программирование интересно, сами, по собственному желанию, изучают различные языки и, как правило, это языки, действительно востребованные. И Pascal в этот список точно не входит.
Так что же получается? В школе мы изучаем на данный момент Pascal. Люди, которым программирование интересно, прекрасно понимают, что этот язык им не нужен и что те же самые основы построения алгоритмов они могут выучить и на других языках, более востребованных. А те, кому программирование абсолютно неинтересно, просто напросто забудут этот Pascal через неделю после выпуска.

На счёт самого языка Pascal: теорию построения алгоритмов, основы, прекрасно понимаются при желании и на примере других языков. Мой первый язык так вообще был JavaScript. Я тогда (классе в 7ом) экспериментировал над созданием html-страничек и как раз узнал про JavaScript. Приобрёл книжонку и начал потихоньку учить. Со временем (учитывая мой тогдашний возраст) начало приходить понимание, как вообще устроены алгоритмы, что такое условие, цикл, функция и т.д. Появился интерес, а следовательно, и прогресс.
Это я всё к тому, что понять устройство алгоритмов можно на разных языках и, поняв, на другие языки переход не представляется сложной задачей.
Люди, которым программирование неинтересно, забудут через неделю любой язык ;)
не забывайте, что многое зависит еще и от учителя. и если вы поняли что такое цикл из книжки, а не со слов педагога — то можно только вам посочуствовать, что вам попался такой педагог.
А если просто не было педагога? Если в 85-м информатику в школах вообще не преподавали, афаик, и уж точно не в 4-м классе :( Да и книжек не было, были журналы ЮТ, ТМ, Радио :)
В 85-ом в учебнике алгебры за 9-й класс в приложении ещё был расписан алгол-60 :).
Книжки были даже в нашей глуши, но крайне мало, конечно :(
В 86-ом информатика в школах уже была, чему там учили я не в курсе, тк не ходил на эти уроки — я уже с пяток языков тогда знал. Помню, что школьных учителей учили фортрану-4 — они учились на «наших» компьютерах и чтобы быстрее нам места освобождали, методом тыка выучил этот фортран и помогал им писать зачётные программки :). А ещё был язык Е — специально разработаный для обучения язык, но он был какой-то безумный, хотя разрабатывался и под руководством академика Ершова — умного мужика. Ключевые слова там были русскими, если не ошибаюсь, но, по сравнению с другим тогдашним «русским» языком — рапирой, сливал по всем статьям.
В 85-м я в 4-й класс ходил, нам точно алгол не давали :) А какой-то «русский ЯП» для «Агата» я изучал по статьям в «Юном технике», оттуда и понял, что такое цикл, ветвление и т. п., ну и понеслась…
В 4-ом классе информатики по программе, вроде бы небыло. Алгол никому не давали, он просто был в учебнике. Я его из любопытства изучил :) после Б3-34. В более старых изданиях в этом приложении было описано как пользоваться логарифмической линейкой, потом линейку за неактуальностью выкинули, а на её место почему-то вставили алгол. Собственно, кроме себя, я не встречал до сих пор никого, кто бы обучился программированию на языке высокого уровня по школьному учебнику Алгебры :).
Русский ЯП для Агата — Рапира, отличительная особенность языка — «обратный» оператор присваивания:
a + b -> c
И ещё там были «кортежи» — то, что сейчас называют динамическими массивами.
А статьи эти были не в ЮТ, а в Кванте. В ЮТ по программированию на моей памяти ничего небыло. Были статьи про калькуляторы в ТМ (технике молодёжи), потом в Науке и Жизни, потом там бейсик. Ну, вот в Кванте ещё Рапира была описана… Ассемблер для 8080 в журнале Радио.
Не было, даже в 90-м она была только с 9-го (по старому с 8-го) класса, но и Алгола в учебника алгебры в 90-м точно не было, учились по учебнику пользоваться калькулятором (простым, не программируемым), видимо ввели адекватную замену логарифмической линейке :)

А по-моему все же в ЮТ за 85 год были статьи именно по Рапире (или еще чему-то для «Агата»), Квант я тогда не читал. А так да, БЗ-34 (у меня МК-61 был) в ТМ (в НиЖ тоже кое-что встречалось, пока они на БК-0010 не «съехали» почти целиком). В Радио ассемблер и немного бейсик-микрон, помню экстаз, когда наконец совпала crc после ручной набивки 8кб hex-дампа :) ) А литература в нашей областной библиотеке большей частью была немного экзотическая, например по Forth было много книг :)
Погуглил, в ЮТ за 85 номер 4 была большая статья про Агат. Но никакой ЯП там не описывался. Кроме этого в 85 в ЮТ были две статьи «ЭВМ в твоих руках» про калькуляторы и 2 статьи «Клуб Алгоритм» — вот там описывался некий «русский ЯП» без названия (я бы сказал, что какой-то аналог Лого, правда как раз Лого я не знаю) для совершенно абстрактной «ЭВМ Поиск» (это не тот Поиск, который вышел годы спустя на 8088 процессоре, а совершенно умозрительная ЭВМ).
Но это не язык для Агата. В 85-ом я ездил на хм… Всесоюзную Летнюю Школу Юных Программистов (10-я! была по счёту, то есть проводили их аж с 75-го года!) под Новосибирск, программировал там на Агате и там же были практически все участники софтового агатовского проекта (система Школьница) — пообщался и, поэтому, кое что знаю по теме. На Агате можно было запустить Рапиру и, с помощью такой-то матери, иногда удавалось запустить бейсик от Эппла (Агат — кривой клон эппла второго, кажется).
Сорри, за введение в заблуждение, видимо спутались за 20+ лет (а может я их тогда так воспринял) статьи про Агат и «русский ЯП без названия на Поиск», с них и началось мое увлечение программированием. А Агат я никогда в глаза не видел, мой первый «настоящий ПК» был клон Радио-86РК от совпрома «Микроша» :)
Был бы безмерно рад если бы меня учили программированию на haskell, а кодированию на C.
1. Смогут ли ваши студенты устроится на работу со знанием Ruby?
2. Достаточно ли современной информации на русском языке по Ruby&Rails&Rspec?
3. Большое ли рускоговорящее сообщество?
4. Каковы перспективы языка(сервер начинает уступать Web клиенту: JavaScript, Flex)?
5. Насколько стабилен язык(к примеру с сайта Python мне предлагают скачать 3.0 под которую сейчас практически нет софта)?
А смогут ли студенты куда-нить устроится со знанием Pascal или Basic? ;)
Ну скажем уже во многих вузах с них перешли на C++/C#/Java.
Так я и предлагаю учить программирование на C и Ruby/Python. Всё равно наше образование не имеет никакое отношение с практикой. Обучение только одной парадигме неправильно. Кстати, вакансий по Ruby/Python тоже много и они в основном сдерживаются отсутствием кадров.
На специальностях для программистов учат разным парадигмам — посмотрите гост для 230105 к примеру.

Наше образование учит думать — процент закончивших ВУЗ по специальности и умеющих посчитать сложность алгоритма O(n) куда больше, чем у Ruby/Python программистов — встречались и такие, которые даже не знают, какой тип сортировки использует стандартная библиотека.

Или вы предлагаете учить Ruby/Python вместо C++/C#/Java?
Почитайте ещё раз — я предлагаю учить Ruby/Python вместе Pascal. И отдельно C — чтобы понять основы, так как C++, C# и Java — это уже надстройки.
Ок, скажите, чем отличается принципиально С от Pascal?
C чаще применяется по жизни и считается более низкоуровневым.
«применяется», «считается» — это всё субъективные и временные факторы, не находите?

Если не вдаваться в подробности Pascal = C. И редко дают оба этих языка на одном курсе, а если и дают, то изучение одного после другого занимает пару дней. Так что бессмысленно говорить о замене Pascal чем-то другим кроме С.

Что касается Python/Ruby, то их разве что можно добавить в список к Java/C++/C#, так же как и JavaScript/PHP/Haskell/LISP.
тем что с помощью С я могу написать нормальное многопоточное приложение, работающее предположим на СПАРКе, а на паскале даже работающее на x86 не могу
Школьники и первокуры вряд ли будут писать многопоточные приложения на SPARC. Как я уже выше написал, я тоже согласен, что Pascal(как и Basic) надо заменять, но на С, а не на Python/Ruby.
Но изучив мультипарадигмовый Ruby первокурснику будет проще перейти на Erlang, чем с C.
блин, вот мультипарадигмы, мультипарадигмы…
во-первых в курсе обучения в России программисту даются азы функциональной и логической парадигм (у нас это были пролог и хаскель)
во-вторых неимперативные парадигмы — крайне нишевой продукт и следовательно разработчики на этих парадигмах нужны не так сильно
так нафига делать основной язык обучения мультипарадигменным? чтобы запутать студента?
Ну крайне нищевые они в том числе из-за недостатка кадров. Кроме того, например, ООП модель Smalltalk используется на Mac OS X и iPhone (очень не нищевой продукт). Прототипный подход JavaScript тоже теперь очень не нищевой.
в России очень нишевой продукт, так как маков у нас крайне мало
в остальном мире примерно пополам маки/кросс с маком
mac, iphone, rails — все они имеют малую долю рынка(ниШу). сходите и посмотрите на количество вакансий по cocoa даже в US. a по erlang вы вообще не найдёте.
ну у рельсов побольше чем у мака… сейчас рельсы пробиваются вперед потихоньку
>> Подумайте, если ли причины использовать BASIC и Pascal кроме исторических?

Есть программа Мин. образования для школ, университетов и институтов.
Мы вот презентацию свободного программного обеспечения в универе готовим и то нам сказали по программе все делать. Если в программе есть модлирование ис, то и такой софт представить тоже нужно.
Кстати, интересно, а в программе говорится именно о Pascal или же просто о «языке для изучения алгоритмов»?
Где-то с пол года назад общался на подобную тему со своей школьной учительницей информатики, на счет того почему бы не преподавать в старших классах вместо Turbo Pascal например Python. Дак вот основным аргументом было, что проблема совсем не в том, чтобы ей самой изучить новый язык и начать его преподавать, а в том, что должны быть учебники одобренные министерством, должна быть программа, но это еще не вся беда, программирование можно рассказывать факультативом в школе и тогда все это более менее решается, но вот когда потом школьники решают сдавать экзамены, сейчас это ЕГЭ, то в тестах вы все равно будете видеть эти Basic'и и Pascal'и… Вот такая вот печаль…
В ВУЗе тоже сталкивался с этим, и это достаточно проблемно, там такой бюрократический аппарат по внесению каких либо изменений в учебную программу.
НЛО прилетело и опубликовало эту надпись здесь
Автор, прочитайте, пожалуйста статью Джоэла Спольски (надеюсь известная вам личность) под названием «Назад к основам», если не читали.
russian.joelonsoftware.com/Articles/BacktoBasics.html

> Например циклы. В Pascal и Basic вам надо думать как реализовать нужный цикл, в Ruby вы указываете что вам нужно сделать

Это ключевая фраза в вашей статье. В школе и универе стоит задача не научить программировать, а научить думать. Зная Pascal/Basic/C вы всегда сможете выучить остальные языки. Сможете ли вы освоить Pascal, владея только Ruby?

Вообще, идея не нова и обсуждалась мной с преподавателями школы и университета. Долгие дискусии привели к тому, где мы сейчас и находимся :) Например, в ЮУрГУ (Челябинск) на кафедре ЭВМ чуть ли не сразу преподают Delphi, C# и PHP. Это надо видеть поделки студентов, которые в принципе не понимают, что такое программирование, не говоря уже о языках «выше высокого уровня».
Спольского читал конечно же. Цикла for тоже нет в asm :). Цель первого языка — научить алгоритмам. А потом (как я писал вначале ;) ) можно уже преподавать и C/asm.
Мне кажется уровни абстракции нужно проходить в порядке увеличения степени абстракции. В моей университетской группе у многих были проблемы на 4-м курсе с ассемблером, с такими простыми понятиями как бит и байт. Хотя до этого было 2 года (4 сессии с экзаменами, курсовыми и лабораторными) преподавания С.
Начали бы с Ruby — были бы проблемы с С. У меня не было проблем освоить Python/Perl/Powershell, зная только С. А вот на brainfuck я немало часов потратил, чтобы мало-мальски сложную программу написать.
Д. Кнут вообще для того, чтобы преподавать программирование свой язык и машину изобрел :) Вот это я понимаю подход. А вы говорите Ruby, Python… Главное — хвост мозг!
Смотря о каких людях вы говорите. Если человек гуманитар, то он и изучая Pascal/Basic ничего не поймёт. Если человек интерисующийся, то изучение нового синтаксиса (замечу, не принципа) ему будет только в радость.
А не принципа потому, что фактически все языки программирования имеют один и тот же принцип. Различия лишь методах реализации того или иного алгоритма.
Я не знаю, что вы имеете ввиду под «принципом программирования», но так или иначе нужно понимать всё насквозь. Вплоть до триггеров, конечных автоматов и пр…
Гуманитариям не нужны языки программирования — вот моё мнение. Худшего программиста, чем выпускника экономической специальности, верящего в то, что в университете его научили C#, я не видел.
Ну, например, чтобы дать школьнику основы понимая алгоритмов C плохо подходит. Лучше сначала заинтересовать — показать, что компьютер действительно в его власти, а потом уже готовить профессионала.
Зато pascal подходит замечательно. Нам в школе на факультативных занятиях показывали, что компьютер в нашей власти. Кому надо — моделирование и CAD-системы, кому надо — Sound Forge, кому надо — технологии Интернета (типа как почту завести или в Яндексе искать) и всё в таком духе.

Чтобы развить мозг — достаточно и Pascal/Basic. Ruby — специфический язык для узкого круга разработчиков, поэтому я не вижу смысла преподавать его массам. Чем питон или руби лучше perl или powershell? Bash-scripting на худой конец полезней, мне кажется. Но это тема для троллинга или холивара,
Расскажите о своем опыте общения с Pascal, если не трудно.

>Устаревшие IDE.… В них нет просто кнопок Сохранить и Выполнить.

Смешно. Чтобы долго не искали — в Delphi на них повешены хоткеи Ctrl+S и F9, соответственно.

>Непрактичность. Формально, 90 % профессиональных программистов так и не используют эти языки на практике.

Конечно, 47.3% процента все статистики придумается на ходу, но в целом спорить не буду. Большинство пишет на С. И здесь проблеммы не только и, возможно, не столько языка, сколько маркетинга.
А давайте так. Вот у меня в системе на Delphi написаны TotalCommander, TheBat!, QIP, FeedDemon, DownloadMaster,Skype ну и по мелочи еще штук 5 малоизвестных. Все остальное на каких-либо сях. На Питоне ничего и на руби ничего. Вот такая непрактичность получается.

>Сложность. Когда-то они действительно были очень простыми языками программирования. Но прогресс не стоит на месте.

Очень интересно. Это что же за прогресс такой, который первоначально простую вещь делает сложной?
Здесь вообще что имелось в виду? Что языки трансформировались и стали сложнее? Или что?

>Устаревшее API. В TurboPascal и QBasic нельзя создать оконные приложения или сделать простой веб-сайт. Конечно, для обучения алгоритмам это не нужно — но ведь имея набор современных и «крутых» средств можно увлечь ученика гораздо больше.

Вы, во-первых, не смешивайте язык и библиотеки. А, во-вторых, на TurboPascal можно написать как оконное приложение с помощью WinAPI, так и web-сайт с помощью CGI. Вопрос лишь в удобстве.

>Одна парадигма.

Собственно, это единственная здравая мысль в перечислении. Только не заменить паскаль питоном, а изучить оба. Да еще какой-нибудь Haskell впридачу, чтобы совсем башню снесло =)
1. Всё равно монстр Delphi не сравнится с текстовым редактором, а тем более интерактивной консолью.
2. Популярность Delphi всё равно идёт вниз.
3. Что языки трансформировались плюс мультипарадигмость делает многие вещи более простыми. См. пример про циклы.
4. Сравните WinAPI и Shoes ;)
5. Если учить несколько, то лучше Ruby/Python и C
1. Конечно. Первый для работы, а редактор с консолью — поиграть. И потом, если хотите, могу написать helloworld на паскале в блокноте и скомпилить потом из командной строки. Что же до консоли — после SinclairBasic ни разу не почувствовал в ней необходимости
2. Да я согласен. Только проблемы большей частью не в языке.
3. Ок. Только трансформации как раз упростили многие вещи, да добавили современности. Например, в паскале не было динамических массивов — в Delphi есть. В классы добавили свойства, строки расширили. Жить стало проще. Но все старые приемы работают.
Теперь парадигмость и циклы. Вот для меня «count.times do» и «for i:=1 to count do» — абсолютно равноценные вещи, просто в одном языке цикл записан так, в другом так. Но вот когда я вижу как алгоритм быстрой сортировки записан на C\Pascal, я понимаю как он работает, а когда на Хаскеле — не понимаю. Хотя некоторые утверждают, что там наоборот все как на ладони. Поэтому преподавать это надо, а вот что хорошо, а что плохо — вопрос личного выбора.
4. Во-первых, разговор шел об утверждении, что на паскале чего-то там нельзя написать. Во-вторых, зачем мне сранивать Shoes и то, что оно частично использует? Для Ruby есть библиотека, реализующая GUI. Прекрасно. И как это принижает паскаль?
5. Учить лучше как можно больше пока время есть на учебу. А что использовать — дело каждого. Я вот учил и Паскаль и Си. И Перл с Питоном. Перл мне офигенно понравился в свое время, а питон ничем не впер — язык как язык. Дома пишу на Delphi, на работе — на C#.

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

Что же до Васика… Его надо выучить в школе. После 15 лет люди на бэйсике пишут только от безысходности.
Skype на Delphi?! — не верю! Ссылку в студию!
Я скорее поверю, что на ассемблере :)
Skype как я слышал на Qt, так что вряд ли. Но QIP действительно на Delphi.
линуксовый skype на qt, а виндовый на delphi.
google it…
ссылку на что? Откройте Skype.exe блокнотом и убедитесь. В начале идут стандартные Delphi типы Boolean, Char, Smallint
Нужны типы. «Нужны» — в том смысле, что без понимания типов трудно писать программы, а объяснять, что они существуют, в языках с динамической типизацией гораздо труднее.

Вообще, конечно, должен быть пяток модельных языков (с разными концепциями/парадигмами) и потом — один язык общего назначения. У модельных языков должна быть простая семантика и несложный синтаксис, а еще — наглядный вывод. IDE им требоваться не должны.

Какой конкретно язык общего назначения — не очень важно, но лучше, конечно, посовременнее.
Типы прекрасно можно объяснить когда читать С. Для вводного языке на котором объясняются основы алгоритмов вообще можно обойтись и без типов.
Да не, не получается. Без разницы «float» и «double» обойтись можно, а вот понимать разницу между символом и строкой надо. Да и между целым числом и действительным.

У С в этой области тоже свои закидоны.
Лучше с Python-а начинать, хоть не будут в одну строчку писать…
Logo в школе? Поржал. Ну разве что в начальных классах. Basic, конечно, в топку. Уже давно пора.

А вот Pascal… Уважаемый, Вы серьезно думаете, что умнее старины Вирта?

Руби… Питон… Давайте еще Хаскель подключим, а заодно и Брэйнфак. И тогда обучением программированию можно будет вообще не уделять внимания — весь семестр будет посвящен осваиванию очередного кракозяберного языка с синтаксисом, модифицированным в соответствии со вкусовщиной его создателей.

Про «примеры» того, что нельзя сделать на TurboPascal… Можно и оконное приложение, можно и веб-приложение. Можно даже к 64 гигам памяти обращаться. Вот только не нужно. Он не для этого. Для этого есть Delphi / FreePascal / Chrome.

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

Между прочим, старина Вирт после Паскаля ещё Модулу и Оберон успел сотворить. А Турбо Паскаль и Дельфи от его оригинальных идей ушли достаточно далеко. Некоторые апологеты Паскаля, как языка первоначального обучения, при попытке обрезать борландовское наследие немедленно возопят о мёртвой академичности. Но при этом любят прикрываться Виртом.
>Между прочим, старина Вирт после Паскаля ещё Модулу и Оберон успел сотворить.
Угу. Причём сейчас он именно Оберон рассматривает как язык для обучения, а вовсе не паскаль. Приезжал как-то, я на его выступление ходил, своими ушами слышал.
Паскалю действительно место в музее и чтоб тряпочкой пыль стирали раз в пятилетку.
базару нет, python очень хороший и удобный язык, сам использую понемногу
но проблема, имхо, в том, что python — язык очень высокого уровня.
кто писал на С или ассемблере, и на python поймут, о чем речь )
так вот, после python-а очень трудно заставить мозг думать на С, например.
итого, на мое имхо лучше языка для начинающего, чем паскаль еще не придумали.
в любом случае, фокус, конечно, больше в подходе, нежели в языке.
базару нет, python очень хороший и удобный язык, сам использую понемногу
но проблема, имхо, в том, что python — язык очень высокого уровня.
кто писал на С или ассемблере, и на python поймут, о чем речь )
так вот, после python-а очень трудно заставить мозг думать на С, например.
итого, на мое имхо лучше языка для начинающего, чем паскаль еще не придумали.
в любом случае, фокус, конечно, больше в подходе, нежели в языке.
«Ну и конечно Ruby и Python интерпретируемые языки программирования — так что для работы с ними подойдёт любой текстовый редактор.»

Детский сад какой-то, как-будто на Паскале (Си и прочем) программы набирают сразу в машинных кодах. Чтобы что-то ругать нужно это сначала понять. Если вы успели в какой-то степени освоить Ruby и Python — просто поделитесь, что в них вам понравилось, зачем сразу кидаться сравнивать с тем, что слабо себе представляете?!
Как раз с месяц назад разговаривал с лектором, который читает «программирование» первому курсу ОмГУшного матфака на эту тему — основной вопрос как раз был про то, почему pascal а не, к примеру, python.

Оказалось, всё достаточно просто: факультет и кафедра вольны выбирать тот язык и среду для обучения, который предпочитают, но это всё должно удовлетворять некоторому минимальному набору требований, которые приходят из минобразования. Одним из таких требований и является как раз работа с динамической памятью и указателями — поэтому из «мэйнстримовых» языков остаются по сути паскаль, Цэ, и приплюснутое Цэ.

Стоит сказать, что цэ преподаётся в первом полугодии на втором курсе вместе с ассемблером x86 (архитектура ЭВМ), Це++ — на третьем, видимо, поэтому решили на первом курсе учить паскалю — чтоб студенты могли хотя бы сравнивать несколько разных языков одного «семейства» (императивных).
Интересная ситуация, потому что в цикле Pascal’я у нас (в школе) не было указателей. Их начали преподавать уже с C.
Повторюсь, я вёл вышеупомянутый разговор со своим университетским преподавателем.
Если встречу своего школьного учителя по информатике — тоже постараюсь задать этот вопрос. У нас, кстати, паскаля не было — был бэйсик, «школьный алгоритмический» с черепашкой и Це.
Меня 5 лет учили программированию и профессиональному обучению оного в университете. Нам давали психологию, педагогику (чтоб она сдохла, эта педагогика!), философию и другие гуманитарные ценности только для того, чтобы прочитав Вашу статью, я предложил бы Вам начать обучать детей мыслить как программист на языке R. Выше я не знаю. Можно смеяться.

Пока — круче старого доброго пасквиля для обучения основ программирования ничего вообще нету. Программа на нём ЧИТАЕТСЯ человеком, которому несколько лет преподавали английский (80% школьников). Никогда еще в школе не было цели вывести школьника на уровень готового специалиста в тех. сфере. Чтобы устроиться на серьезную должность программистом сейчас, для справки, нужно как минимум иметь высшее технологическое и пару лет опыта работы минимум. Вы можете знать один Руби досконально, без базы вы не сможете решить на нём простейшую математическую задачку. Это, конечно, согласно гуманистическому подходу в образовании. Есть еще метод «проблемного» обучения, очень эффективных для одаренных личностей и ломающий других.

Еще порядка 15 лет назад моя мама преподавала программирование в школе, где не было ни единой ЭВМ. Фортран-4. Ребята учились простому синтаксису языка, но главное, чему они учились тогда — составлять блок-схемы, алгоритмы, они получали необходимый базиз.

Может быть, таблица умножения уже не современная? Так давайте пятиксласникам матрицы, ряды… И калькулятор в руки. Они будут отличными спецами! (буэээ)
Код на Ruby более читаем за счёт DSL. См. примеры циклов :) Кроме того, Ruby за счёт мультипарадигмости лучше расширит кругозор.
Странный аргумент какой-то. LISP — практически идеальный ЯП для разработки DSLов любой сложности. Но при этом как код LISP не крути, его все равно читать будет сложнее, чем Pascal.
Вы не поверите, как сложно обьяснить и научиться делать самые базовые вещи. Понять, что такое ПЕРЕМЕННАЯ для человека, с программированием не знакомого, невероятно тяжело. Необычайно сложно задачей является даже обучение рисованию квадратика, треугольника и — о ужас — окружности.

О какой парадигме Вы говорите, если школьник не сразу пишет программу поиска корней квадратного уровнения? :) Для обучения очень важна мотивация, круче стимула, чем «Я это написал — и это работает!» для школьника нет, для этого достаточно простого и ПОНЯТНОГО

Begin
WriteLn('Hello, World!');
End.

Циклы в паскале очень наглядны:
If (...) Then
begin

end
Else
begin

end;

Я очень люблю руби, почти как чистый Си, но не взялся бы учить этим языкам человека, который еще не имеет хорошего опыта хотя бы в простейшем структурном программировании на другом языке. Опыта мало, таланта нет, чего поделать? =)
Не пользовался предпросмотром, не знал, что пробелы в начале строки хабр удаляет. Эх.
[irony]Настолько наглядны, что вы написали код условного оператора[/irony]
Парам-пам-пам! =))) Хехехе))) Очепяточка вышла… *shy*
>Циклы в паскале очень наглядны:
>If (...) Then
>begin
>…
>end
>Else
>begin
>…
>end;

Еще никогда в Паскале такова цикла не видел… :) Насколько я знаю, єто условный оператор!
ой сори, за повторение, не заметил…
Заинтересовало. Обычно на парах программирования я спал, т.к. ничего в этом не смыслил и не особо старался, а тут с удовольствием прочитал статью, даж чего-то понял. Вообще лично мне гораздо проще обучаться чему-либо в интернете.
если научить человека девелопить на руби — он ваще не сможет писать на си. Если научить писать на си — он сможет девелопить вообще на всём после этого. Или не будет программистом вообще =).

Без понимания ЧТО творит интерпретатор языка внутри девелопер рано или поздно будет применять корявые и неэффективные алгоритмы (которые, впрочем, выглядеть могут вполне «красиво»). Да и вообще глубокое понимание инструментов, их сути и мельчайших подробностей — только это может сделать настоящего профи для игры на этом инструменте. Будь то язык прграммирования, или автомобиль, или виолончель, или ещё что.

Pascal и Basic действительно в мусорку. Толку — ноль, только запутать может. Но и смысла учить питон/руби как первый язык — дурдом.
Но сейчас в школах именно Pascal и используют. Я предлагаю заменить на Ruby/Python именно те курсы, которые сейчас ведутся на Pascal. Всё таки серьёзная работа с C сложнее. Человек не знает, что такое алгоритм, а он вынужден сразу учится линковать .o файлы :D Понятие цикл, переменные, I/O можно дать и на Ruby, а потом перейти на C.
пожалуй, расшифрую совсем до конца мою позицию: учить надо тому, что слишком тяжело поддаётся самостоятельному обучению. Так, учить с нуля Си — зачастую совсем нетривиальная задачка даже для уже бывалых разработчиков на высокоуровневых интерпретируемых языках. А вот наоборот, сесть и написать hello and die на питоне/руби сможет чуть ли не любой, кто этого захотел и открыл хелп. Никаких там линковок/компиляций — ничегошеньки не надо.

Соответственно, чтобы стать сварщиком надо, думаю, знать (причем почти точно) состав газа и разных его комбинаций который в этой самой сварке используется. Если просто купить клевый гиперавтоматический сварочный аппарат — будешь лишь любителем =).
Возникает вопрос: тогда почему не сразу asm? Как определяется граница допустимых упрощений?
потому что асм совсем не кроссовый… и писать даже алгоритмы сортировки на асме под линух и винду надо совершенно по разному… а на си можно писать одинаково и все будет хорошо
Ну кроссплатформенность не настолько важна для школы — всё таки курс читают на одних и тех же компьютерах.
глупость сморозили. ASM — одинаковоплатформен, но разноархитектурен.
под платформой мы понимаем в данном случае ось?
ну в таком случае под винду мы пишем на обычном (привычном для большинства еще с доса) асме (честно не помню названия), под линух мы пишем на AT&T асме (так-то одно и тоже, но разный синтаксис)
компиляторов Си тоже несколько ;).
тем не менее синтаксис у Си предопределен одним стандартом, а синтаксис асма несколькими
вообщем по сути спор ни о чем, так как все равно не серьезно давать в универе асм для изучения алгоритмов… так как время реализации уж слишком большое, в отличие от сей, где оно приемлимое
тем не менее у меня, в Бонч-Бруевича, асм был :-P. Правда, я его и до этого знал, но вот глядя на сокурсников не сказал бы что это было зря.
«знал» = «был вполне знаком с». Чур меня… )
асм знать необходимо, но необязательно его знать на уровне «напишу чо хошь на асме»… его вполне достаточно знать на уровне «я знаю чо делает вот этот кусок кода, но также написать может быть и не смогу»… имхо этого вполне достаточно чтобы понимать как устроен компьютер и осознавать сложность тех или иных алгоритмов
А почему же asm нужно знать на таком уровне, а учить программировать именно на C? ;)
потому что на С можно написать учебную задачу за приемлемое время, но в тоже время написав учебную задачу на С студент поймет что и как делается в том или ином алгоритме… если же студент будет писать на руби, то он вряд ли будет хорошо понимать что творится во всей этой магии
магияяяя… если в нулевом экспириенсе заполучить мегамечь — игра станет скучной сразу)))))
Ну если она напишет на asm, то поймёт гораздо больше. Всё так разрыв между asm и C соизмерим с разрывом между C и Ruby.

Проблема в том, что все эти слова про низкоуровневые vs. высокоуровневые говорят постоянно. Во время книги «Мифический человеко-месяц» автор защищал C от таких же нападок как и на Ruby. Совсем не давно многие считали Java высокоуровневым, а теперь иногда ввозят её в университет вместо С++.
некоторые штуки на асме можно написать лишь теоретически. Практически — это займёт не одну сотню лет. На си — можно написать всё.
Тоже самое могу сказать про некоторый динамичный код для C vs. Ruby :). Чего стоят хотя бы делегаты — под C они превращаются в ужас. А лямбда-замыкание упрощает некоторые алгоритмы.
мы вроде говорили про обучение? дак вот ЛЮБУЮ академическую задачу можно написать на си за приемлемое время (а если разрешить использовать с++/STL то и за гораздо меньше чем приемлемое).
вот для того и нужно учить си в универе — чтобы такие вещи не превращались в ужас.

Как правило, ужасным код делает не язык и вовсе не алгоритм, а сами знаете кто =).
ну это ещё позволяет быстро в уме прикинуть почему же 4 ядра с общим кешем L2 будут шустрее в таких то участках кода на Си чем 4 ядра в схеме 2+2 с двумя независимыми кешами L2 ;)). Что, в свою очередь, может помочь сделать программку для тех или иных окружений более заточенную. Что, в свою очередь, сделает продукт более конкурентноспособным (боже упаси, давайте не будем спорить об этом — я прекрасно знаю что это _ДАЛЕКО_ не единственное =))
так, на секундночку: C — язык программирования, asm хоть и называют языком программирования на языке асемблера, я все-таки бы воздержался, ибо он по сути ведь просто более удобный вариант машинных комманд, в которых можно использовать символьные обозначения комманд. В остальном он 1-в-1 повторяет сырой машинный код для процессора.

Собственно, не у «упрощении» и не в «усложнении» дело. Дело в абстракции. Лично я с твёрдостью могу заявить — питон ничуть не проще Си, и наоборот. Да, время написания одного и того же разное, но при этом хорошему девелоперу на Си будет все точно так же просто, что и хорошему девелоперу на питоне. Чуть дольше — да, но это из-за элементарного требования внимания к некоторым вещам отсутсвующим в питоне. Ну и каламбур… будет круто если моя мысль все таки окажется понятной +)
истину глаголите товарищ;) только мало согласных с вами народу… я в паре тредов такое же говорил меня заплевали;)
а плюётся кто? Те кто сидит, выучив питон и сетуют что лучше бы учили его на первом курсе универа? Никогда не возьму таких на работу =).
За нами будущее :)
Да, отчасти согласен с вами.
Я действительно ничего не понимал пока не выучил классе в девятом-десятом 16-битный ассемблер x86. После этого процессы, происходящие в ЭВМ стали го-о-орадзо прозрачнее.
именно. Мой жизненный опыт подсказывает что это применимо вообще ко всему созданному человеком =).
Категорически не согласен. Ни в коем разе!
Приверженец консервативного подхода. Сам прошел цепочку Pascal (школа) — asm, C, Java (институт) — Python, javascript, Haskell, Prolog,… (сам, хобби) и ничуть не жалею.
И кстати таки Pascal считаю вполне удачным первым языком (а не си) -> он больше строг и академичен.
Для обучения алгоритмам (типы данных, процедуры, сортировка, связанные списки, стек, ...) никакое ООП и функции высших порядков не нужны и даже вредны. Абстракции ценны только лишь тогда, когда есть понимание того, что под ними лежит и как оно работает. Тогда видишь и понимаешь красоту этих абстракций, можешь оценивать эффективность их применения, но в любом случае это должно быть логическим продолжением, а не началом. Кстати, хорошая статья www.polit.ru/science/2008/08/20/programmist.html
Вы имеете опыт преподавания в школе и тем более в Вузе? Если бы «да» — то вы никогда бы не написали, что «лучше давать не программирование, а основы использования компьютера. Максимум — Logo в среде типа KTurtle.». Учителя информатики уже несколько лет решают вопрос «Что преподавать в школе на информатике», причем не голословно, а постоянно экспериментируя, апробируя различные вариативные курсы. А по вашему постулату — надо в школе делать юзеров. А потом вы же, как админ, или разработчик софта будете материть их, потому что они не понимают что надо нажать в проге. Заявление ваше притянуто за уши. Иначе, студенты-первокурсники (второкурсники) вузов СНГ не занимали бы призовые места на мировых контестах по программированию, в качестве базовой среды которой используется Си и FreePascal(!!!!). Считаете, что умнее всего педагогического сообщества Рунета? Зря. Не стоит быть таким категоричным в заявлениях не имея на то оснований. Если же вы педагог, работающий в школе — … то наверное этого блога бы не было. Вы критикуете обучающие среды с позиций человека программирующего, но не обучающего. Школьникам и новичкам в программировании по большому счету плевать на IDE и прочее. Им главное — научиться и понять, как же пишутся программы, как использовать операторы языка для решения тех или иных задач, что такое алгоритм и почему в одном случае надо использовать цикл с параметром, а в другом — цикл с постусловием, а в третьем — цикл с предусловием. И вот эти моменты никак не зависят от среды преподавания. И вы учились скорее всего на Бейсике или Паскале, даже если вам меньше 25, а если больше — то и подавно вы начинали с этих языков. Откуда такая категоричность, я не понимаю.

З.Ы. Logo — вчерашний день. Сегодня актуален Scretch.

З.З.Ы. У меня нет кармы, но вам за этот блог «минус».
За Scretch — спасибо.
да не за что.
Так чем Pascal и Basic лучше? Очень спорный аргумент — «им все пользуются, вы что умнее всех». Больше конкретики, пожалуйста.
Перечитайте мой комментарий еще раз. Конкретика в 4 предложении с конца. В вашем блоге я не увидел преимуществ Питона и Руби для изучения алгоритмики и умения программировать. Лишь сравнение сред и синтаксиса. С тем же успехом вы можете доказывать всем, что праворульная машина лучше приспособлена для обучения ПДД, чем леворульная.
И всё-таки паскаль в школах должен умереть. Хотя бы потому, что это позавчерашний день (даже не вчерашний). За преподавание же бейсика вообще следует расстреливать на месте (обоснование прочитайте у Дейкстры/Дийкстры). Или вы считаете «педагогическое сообщество рунета» умнее дейкстры? :)
Педагогическое сообщество крайне костно и зависит от минобра, а в минобре, как известно, сидят наиболее костные из педагогического сообщества.
Аргумент же «вы учились на бейсике или паскале» вообще смешон. Давайте тогда вспомним культовую вещь — «почему настоящие программисты не пишут на паскале» и вернёмся к фортрану :). Обоснование такого подхода то же, что и у вас, подкреплённое примером про космический корабль из статьи. :) Можно ещё добавить весьма познавательную книжку Чарльза Уэзерела, там совсем разумное обоснование написания программ сначала на бумаге, причём на специальном бланке (ах, фортран, перфокарты и девочки, набивающие перфокарты на машинках, шумящих чуть тише отбойного молотка!) и ручкой (чтобы не делать исправлений и сразу писать чисто и без ошибок). Это всё правильно, но действительность требует сейчас другого.
Хотя, с тем, чтобы учить школьников динамическим языкам я тоже не согласен :) несмотря на всю свою текушую любовь и восторг к Руби.
Из текущих языков, по-моему, лучший выбор — либо ява, либо си. Но уж ни как не паскаль и уж тем более не бейсик.
Спасибо за статью!
Я учусь в техническом ВУЗе на инженера. Информатику нам читали на низчайшем уровне (pascal без перехода к delphi). Никому из моей группы (5 курс) за всё время обучения не пригодились навыки программирования. Хотя, в инжиниринге существует множество задач, которые легко решаются и автоматизируются с помощью «программирования».
Поголовное большинство инженеров используют mathcad, чем и ограничиваются.
Я сделал курсовой проект на python + django с веб мордой, на что преподаватель мне заявил, что боится пользоваться интернетом (не смотря на то, что мой и его компьютеры находились в одной сети университета). Собственно, тушите свет.
Я понимаю, что обучение программистов и обучение инженеров различаются в корне.
Но проблема ещё и в том, что преподавательский состав не хочет принимать новое.
А вообще, я с вами согласен. python в сто раз красивее и понятнее pascal'а. Я показал свой несложный код другу (не it-шник) и он всё сразу понял.
Даёшь изменения в программах обучения не только по IT специальностям, но и по всем
остальным!
Вообще, ИХМО, учить програмировать на одном языке — все равно что учить повара готовить только из картошки (или муки). 3 месяца — базовый курс. И тут Паскаль не плох. Затем Надо давать общие правила алгоритмической работы, знакомить с парадигмами, методами отладки и ускорения кода. На разных языках.
Ваш Ruby/Python имеет шанс занять место в общем супе.
А еще по моему он идеален для кружковой (не олимпиадной) работы со школьниками. Но надо посмотреть. Пощупать. Я паскалист и новое мне дается с трудом. То что для вас естествено, для меня безобразно.
Так что, раз вы начали тему с Вас ссылки на нормальное пособие.
>Я паскалист и новое мне дается с трудом.
От оно! Йес! Вы крайне удачно сформулировали то, над чем я думал, но не мог понять долгие годы! Я тоже замечал, что как правило, именно паскалистам новое даётся с трудом. В самые крайние годы это правило можно ещё распространить на пхп-шников (ещё с бОльшей степенью достоверности). Сишники же с лёгкостью скриптуют на перле, переходят на яву, мимоходом проглатывают пхп, чтобы было на чём делать мелкие шабашки, и живо интересуются питонами, рубями и грувями :).
Не распространяю сие суждение на всех ни в коем разе, но я в отрасле кручусь уже довольно давно и многого насмотрелся. Да хоть по резюме полазить — если человек старый паскалист, то кроме паскаля у него в резюме разве ещё дельфи будет _и всё_! То же и у пхп-шника. За 10(!) лет работы.
Я считаю, что программист (или тот, кто хочет им стать) должен развиваться в трех плоскостях:
1. Алгоритмизация. Без алгоритмов никуда! У нас в университете студенты на третьем курсе распараллеливают процессы, пишут GUI и т.д. с использованием Win API, .NET Framework etc. по «шаблонам» из методичек и лекций, хотя 80% из них не сумеет написать даже рекурсивную функцию подсчета факториала.
Человек, не разбирающийся в алгоритмизации, не сможет решить принципиально новую задачу. Он не сможет создать «реактивный рюкзак», потому как привык ездить на «велосипеде», который придумали до него.
В Google берут не за знание Python, а за нестандартное мышление ;)
2. Языки программирования (синтаксис) и различные парадигмы. Для начала хватит и основ — главное, чтобы была возможность реализовать любой алгоритм. Затем можно углубляться.
3. Стандартные библиотеки/фреймвёрки/дополнения. Эта «плоскость» уже чисто практической направленности.

Начинать нужно именно с пункта 1 и частично с пункта 2. Когда будет достигнут достаточно высокий уровень по этим пунктам, можно подключать пункт 3 и развиваться в трех плоскостях одновременно.
Если п.1 не пройден, рождается кодер, готовый к выполнению «обезьяньей работы». Если нет п.3, рождается программист(!), неготовый к работе, но имеющий большой потенциал.

Очень огорчает эта фраза:
«В TurboPascal и QBasic нельзя создать оконные приложения или сделать простой веб-сайт. Конечно, для обучения алгоритмам это не нужно — но ведь имея набор современных и «крутых» средств можно увлечь ученика гораздо больше».
Я в 14 лет создавал на QBasic анимацию под консоль в графическом режиме, писал музыку с использованием спикера и т.д., чему был несказанно рад. Чтобы заинтересоваться, этого было более чем достаточно. Программы были неоптимальными, в них было много потенциальных багов, но пришел Pascal со своей строгой типизацией и строгим синтаксисом (ох, как я не любил по началу объявлять переменные в разделе var… уж слишком непривычно после BASIC'а), и со временем все стало на свои места.
А Вы предлагаете нечто из серии «зачем учить нотную грамоту, если можно наклепать из сэмплов классный микс, от которого будут „тащиться” все девчонки на дискотеке?»… или «можно совершенствовать знание русского языка, чтобы писать стихотворения на века в духе Лермонтова и Маяковского, но ведь будет интереснее зарифмовать „омлет” на „минет” и создать очередной „шедевр” отечественной эстрады, срубив при этом немало денег».

Возможно, BASIC действительно можно убрать из программы изучения, но Pascal — лучшее, что может подойти для этих целей. Он имеет одновременно строгий синтаксис, но в то же время понятный, по сравнению с тем же С (за счет применения ключевых слов, взятых из английского, а не специальных символов. Например, «begin…end» вместо {…}).

Кстати, Вы всё восхваляете интерактивную консоль. Но скажите, чем она лучше IDE того же QuickBASIC? Кстати, в QuickBASIC есть окно «Immediate», которое интерпретирует любую введенную в него строку непосредственно после нажатия Enter (откуда и название).
Если BASIC так плох, то зачем Microsoft выпустила недавно Small Basic?

Также Вы постоянно твердите о мультипарадигменности. Но о каких парадигмах может идти речь на этапе изучения?! Многие с трудом переходят от процедурного типа мышления к объектно-ориентированному, а Вы предлагаете окунуть человека сразу во все. Он не будет разбираться ни в одной.

Я мог бы отписать свои мысли и по другим «аргументам», но все равно Ваши комментарии сводятся к:
1. «В Python/Ruby мультипарадигменность, а в Pascal — нет»
2. Интерактивный режим консоли — это круто, а IDE TurboPascal — слишком сложно.
3. ООП все знают на примере С++. Почему именно С++?! Я ведь не люблю этот язык!

P.S. Готов поспорить, на BrainFuck Вы ничего не пробовали писать.

P.P.S. Прошу прощения за некоторую общую несогласованность или, даже лучше сказать, смысловую раздробленность комментария.
Аргументов у меня было гораздо больше:
4. Современные простые IDE, а не терминальный текстовой клиент.
5. Pascal всё реже и реже применяется на практике.
6. DSL и более простые реализация циклов, что удобно для изучения алгоритмизации.
7. Современные API для создания оконных, а не псевдотекстовых интерфейсов.
4. Microsoft Small Basic — современная простая IDE :) А вообще, зачем? Нужно привыкать вбивать всё ручками, а не полагаться на IntelliSence к примеру.
5. Тем лучше. Не будет соблазна идти на работу с мыслями «я уже крутой программист». Сейчас студенты уже с 1-го курса работать начинают… Не вижу в этом ничего хорошего.
6. Более простые реализации циклов уводят от основ алгоритмизации. Нужно не только знать, что алгоритм реализуется к примеру перебором, но и уметь написать это. После циклов Ruby попробуйте перейти на С/С++
7. Зачем это на этапе обучения? Может еще на MASM окна сразу писать? Чем больше человек проникается идеей «я могу создать окно в пару кликов мышью», тем меньше он захочет разбираться, как именно это работает. А значит и не сможет создать нечто лучшее. Знаете как говорят: кто не знает прошлого, тот вынужден повторять его ошибки…

Путь развития, который Вы предлагаете, готовит кодеров, а не программистов.
Так чем же Ruby/Python отличается от BASIC/Pascal? Чем они хуже?
Тем, что BASIC/Pascal не засоряют нестабильный разум детей, изучающих программирование, ненужным мусором (практическое применение, фреймворки для быстрой разработки веб-/окнонных приложений, парадигмы, bla-bla-bla etc.), а позволяют сосредоточиться на алгоритмах: «как заставить машину делать то, что я хочу?».
При использовании Pascal Вам не придется в ответ на вопрос детей о том, откуда у массивов есть свойство length или count, или еще какое-то, отвечать, что «так надо» (либо же объяснять, что такое объекты). В Pascal вы будете хранить длину массива отдельно. И циклы будете писать с полным пониманием того, что происходит. Поэтому и при последующем переходе на C++ никакие std::out_of_range Вас уже не побеспокоят. А вот попробуйте перейти на С++ с Python ;)
А с битовым представлением числа Вам приходилось работать при написании веб-сайтов на Ruby? Вы знаете, что представляет собой число с плавающей точкой «внутри» компьютера и почему формат представления отличается от целых чисел?
Кроме того, Pascal приучает к строгости: все переменные должны быть объявлены, причем в одном месте, строгая типизация (integer — это integer, а real — это real) и т.д. Синтаксис как BASIC, так и Pascal содержит не очень много ключевых слов и крайне понятен (почти самодокументируемый :))
В Python слишком высокий уровень абстракции — уж слишком он расслабляет… Эйнштейн говорил: «Make things as simple as possible, but not simpler». Так вот Python для начинающего программиста — это проще, чем нужно.
Я скажу больше: я обожаю C++ и, как ни странно, ненавижу Delphi и Visual Basic. А антипатия такая сложилась потому, что в свое время ввиду популярности оных многие бросились их изучать и, создав пару окон и возомнив себя программистами, начали выпускать такие кривые и жрущие непомерно ресурсы компьютера программы, что «краска на стенках сворачивалась». Именно отсюда пошел миф о том, что на C/C++ получаются гораздо более быстрые и маленькие программы. На самом же деле в руках настоящего мастера Delphi превращается в очень мощный инструмент. Вот и с Ruby/Python сейчас такая же история начинается.
А может детишек лучше сразу обучать на Эрланг, под парллеризм? ;)
Да ну вас. Мы вон Fortran MPI изучали :)) А потом Lisp. А Ruby это сказки на ночь :)) Я хочу сказать, что начать с Pascal для знакомства с алгоритмикой — лучшее, что только может быть для становления программиста. Ruby/Python — это горы синтаксического сахара и мешанина парадигм. Они только запутают и отпугнут. Тех, кто вообще не знаком с программированием. Кто сознательно шел, и уже знает, допустим С++ и прочел трехтомник Кнута, конечно будет страдать, набивая очередную сортировку пузырьком в незабвенном Трубо Паскакале ;)
Занимательно. Как раз учу Python (в большей степени Django). Не могли бы посоветовать какой-то литературы для изучения понятия ООП?
Вспоминается пример Саши Фенстера, который младшие курсы мехмата и ФИТ НГУ учит программированию именно на Си, вдобавок к тому без излишних красивостей, а в линуксовой консоли. bash+vim+make. Сам у него учился, но уже позднее и Лиспу с Хаскеллом. Так вот, мозги это вполне ставит на место.

Если интересно — вот интервью с ним, www.inp.nsk.su/~baldin/interview/AlexandrFenster/LXF107.iview_fenster.pdf
Не-не-не! Пусть все остается как есть паскаль и си! А то html входят в курсы типа «основы компьютерной грамотности» и в результате каждая секретарша мнит себя гуру в веб-дизайне, после прохождения такового. Как следствие куча школьников портяших «имидж профессии» и куча заказциков считающих «заплатить как уборщице, ведь сделать может даже ребенок, просто большинство ленятся этим заниматься». А вот хорошего верстальщика «днем с огнем», как и раньше. Не хватало чтобы подобное было еще и в области программирования. Нет уж! С небольшой долей желания и интереса к тематике — научатся и при текущем подходе обучения (причем специалист будет качественный, а не поверхностный), а без онных — не научатся, но хотябы будут испытывать трепет и уважение к представителям данной отрасли, как, скажем к математикам или физикам. =)

ЗЫ я вообще арт-директор, специализируюсь на визуальных коммуникациях и поверьте более чем успешно, а не на программировании. Однако это мне не помешало не только узучить при необходимости, но и использовать те же С, С++ и Pascal в школе и вузе, PHP, Python и JS когда специализировалсе на веб-дизайне (для большего понимания возможностей и более простого взаимодействия с програмистами в команде, поверхностно конечно, но написать гостевушку или установить ЦМС и подправить ее под нужды я в состоянии более чем), без Ruby вообще последнее время чуствую себя не уютно (и картинки пакетно обработать, и статистический анализ по исследованиям расчитать, и скриптик для веба простенький когда припрет, да и просто в качестве калькулятора =) Это я не к тому что я супер-пупер весь такой из себя, а наоборот, обычный и рядовой, но это не помешало мне изучить вышеперечисленное при наличии зачастую даже не интереса к теме, а необходимости в использовании.
А я бы все-таки агитировал за изучение C и Lisp в университетах. Это самое главное. Предметы, посвященные изучению модной в настоящее время вещи или программному продукту абсолютно бесполезны, на мой взгляд.

Разумеется, еще до этого нужно давать вещи вроде машины Тьюринга.
если смотреть на ваши аргументы, то groovy даже лучше подходит, особенно в плане перспективности…
Статья супер. На днях взял книгу ruby on rails — вроде идет. Даже нравится. Но некоторые моменты вызывают ступор — понял что в самом руби много не понимаю. Теперь решил взять еще и руби за основу. Спасибо за статью.
Если для школы, то не согласен.

1) Устаревшие IDE
Новичкам наоборот не нужно привыкать к фишкам IDE, им нужно учить алгоритмику и язык.
Да и при домашних занятиях будут проблемы, что нет именно той IDE, которая в школе, а другие я не понимаю. (аля OOo и MS office дико разные продукты. НЕ ХОЛИВАР!!!)

2) Непрактичность.
Практичность при изучении подходов и алгоритмов не нужна

3)Сложность.
Спорно. begin-end проще отступов и {} в понимании, как и then вместо ":" дольше писать, но проще понимать

4) Устаревшее API. В TurboPascal и QBasic нельзя создать оконные приложения
И не нужно. Сторонние модули и библиотеки не есть язык или его развитие.

5) Одна парадигма.
ООП не просто понять и многим айтишникам, а когда ты на Вы с компьютером.

В дополнение:
— типы на том же питоне не поймешь — там все ссылки (указатели) да объекты.
— массивы понимать куда проще чем кортежи+списки+словари+… (опять же на начальном уровне)
— питон, руби итд не покажут, как оно работает «изнутри» (ну тут уже против C и C++)

итд

PS самому нравится питон, но не считаю, что правильно учиться на нем
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории