По просьбе AWPRIS решил написать хронологию своего знакомства с языками программирования. Не могу при этом однозначно ответить на вопрос "Сколько времени понадобилось на изучение того или иного языка программирования", вот, например, Питон я изучаю до сих пор, то есть уже лет 9 - например, множеств в Питоне тогда вообще не было, а словарями я начал активно пользоваться только в последнее время.
Итак, хронология.
Классе в 6-7 купил книжку К.Боон "Паскаль для всех", начал читать, дошел до арифметики с плавающей точкой и на этом застрял. Компьютера у меня тогда не было. Первый опыт окончился ничем - только книжка сохранилась.
1991-1993 год (школа, 8-9 класс) - Бейсик, в 8-м классе на Корвете, в 9-м классе уже в другой школе на БК-0010.
1993 год - вернулся из летней школы, очень воодушевленный с тягой к знаниям. Достал книжку по Паскалю, прочитал за неделю лежа на диване, пришел в школу и стал писать на Паскале. Два года (10-11 класс) писал только на Паскале.
1994 год - узнал, что есть "крутой и настоящий" язык Си. Купил толстую книжку по Си, прочитал, в принципе, мог писать на Си, но язык мне не понравился, в результате на Си я почти не писал.
1995 год - в университете на Паскале писать было нельзя... Пришлось переходить на Си и С++. Мне Си/C++ не нравился, но в итоге, как я обычно говорю, меня "заставили полюбить C++". С тех пор С++ стал на многие годы моим любимым и основным языком, впрочем, эффективно использовать STL я так и не научился (возможно потому, что тогда STL был еще не столь крутым).
Где-то после 2000 года - понял, что для каких-то задач мне нужен Perl. Освоил Perl - на неглубоком уровне, но достаточном для нужных мне задач. Perl мне тоже нравится, ну скорее как развлечение вида "О, посмотрите, какое извращение можно написать на перле".
2002 год - пришел в школу и начал выбирать язык, чтобы учить школьников. Посмотрев на разные языки понял, что Питон - наиболее подходящий для обучения язык. Года 3 работал с Питоном, потом перестал - в числе одной из причин была невозможность использования его на олимпиадах. Вместо этого начал работать над тем, чтобы Питон стал доступен на олимпиадах - вполне успешно.
В итоге на сей момент я использую довольно регулярно три языка - Питон, С++ и Perl. Правда, я не занимаюсь программированием профессионально. Я так и не освоил Java, C#, функциональные языки (хотя чужой код на Java мне приходилось править), поскольку не было причин для изучения этих языков.
Также в этот список включены только те языки, которые в моей жизни сыграли достаточно серьезную роль, при этом писал я еще на много чем - и web-сайты делал на ASP и PHP, и курсовик писал на Maple, и перебор перестановок кодил на ассемблере, но все это в итоге оказалось несерьезным .
Собственно у меня практически подобная последовательность, с теми вставками, что после Паскаля (перед С) пришлось интенсивно изучить ассемблер (КР-580), что было вызвано необходимостью заставить те же "Корветы" показывать анимацию и издавать музыкальные и другие членораздельные звуки, а поскольку в 48К много не всунешь - пришлось на Паскале писать ассемблерные вставки под это дело.
А потом после знакомства с С пришлось возвращаться к Бейсику (VBA) из-за его поддержки и довольно классной в офисных продуктах Microsoft.
Но собственно пишу не по этой причине. Причина в том, что при всех преимуществах Питона его первым изучать скорее всего не стоит и лично я пока честно признаюсь боюсь его давать ученикам.
Сначала Паскаль или в крайнем случае С++, а потом уже по-любому С++ и язык на выбор ученика, правда есть один ньюанс - хотя бы HTML ученик должен также изучить.
Это я говорю чисто с практической точки зрения, ибо давно пришёл к выводу, что любой язык программирования, как и иностранный, после третьего уже изучается легко. Да и "школу" базовые алгоритмы нужно тоже обязательно давать, а потом уже имея за плечами школу учить пользоваться готовыми библиотеками, например в том же С++ или Делфи.
Я никому не навязываю своей точки зрения, просто личная многолетняя практика показывает, что определённые знания в определённый период бывают вредны (как в медицине вредными бывают таблетки от неправильного или чрезмерного употребления).
Ученик должен сам "созреть" к необходимости пользоваться всеми благами мощи библиотек и возможностей современных языков программирования и тогда они ему явно пойдут только на пользу.
Впрочем я не считаю что это от наплыва "неадекватных программистов" спасёт. Точно также научатся в нетбинс клепать ересь - как на Дельфи или VB... ;-)
М-да... Ну и надо добавить что мне самому этих школьников приходится учить писать на ассемблере (для AVR) - в расчёте на то что те из них кто знаком с Си впоследствии смогут легче освоить тот или иной сишный компилятор для контроллеров. Не могу сказать чтобы они это на ура воспринимали... Особенно те из них кто независимо от того, на чём они уже умеют писать, плохо понимают суть битовых и логических операций и даже систем счисления.
Ничего осуждающего не имею в виду - хотя меня самого забавляет "пробовать" различные, в т.ч. экзотические языки - но я не думаю что это ведёт к профессионализму. Важным подтверждением этого факта, наверное, являются языки типа FALSE или Brainfuck... ;-)
Впрочем важным наследием от "знакомства" с различными языками для меня стало то, что я в крупных задачах иногда успеваю заметить момент, когда писать их дальше на базовом языке (C или Java) становится неадекватно, а пора разработать какой-то мета-инструмент, и уже на нём эту задачу решать.
С точки зрения вообще языков для конечных автоматов - я помню ещё в школе написал интерпретатор который правда не по ленте а по двухмерной поверхности передвигался... И составил программу которая односвязный лабиринт обходит... Но кажется на этом мой интерес исчерпался...
А вообще не императивные (или как это правильно сказать) языки мы рассматриваем? М-м-м... Имея в виду HTML, SQL, регэкспы (хотя самым декларативным наверное Prolog будет - но вряд ли имеет смысл ему кого-то учить) и т.п.? Нужны они школьникам/студентам или как?
В фидошной переписке мне когда-то кто-то доказывал с пеной у рта что будущее за Scheme, кто-то так же воевал за квантовые компьютеры. Один демонстрировал потрясающе красивую (и не вполне корректную, и потому неэффективную) реализацию быстрой сортировки на Хаскеле... ;-)
У Пролога на мой взгляд две беды:
- мало задач для которых он актуален;
- в остальных задачах программисты обычно сводят Пролог с помощью усечения логических ветвей к обычному императивному образу...
Я на нём примеры для детей писал, мигающие светодиодами в LPT-порту, чтоб не сдирали решение... ;-)
А было бы классно, чтобы ещё LPT-порт реагировал на поворот головы в сторону списывания и усиливал мигание, а встроенная пищалка при этом начинала угрожающее рычать...
:)
б) сам я со списыванием "борюсь" таким образом - примерно 50% времени сначала запрещаю списывать вообще (сижу на задней парте и читаю книжку) - а потом говорю так, у нас есть лидеры, а есть аутсайдеры - и назначаю тех кто успел решить какую-то задачу чтобы объяснили её тем, кто не успел или не смог. Идея такая чтобы задачу мне потом сдавал только аутсайдер - а оценка ставится обоим одинаковая...
Хотя технические способы, начиная от датчиков, заканчивая отдельными комнатами для каждого сдающего, конечно можно внедрять, но мне кажется что мне самому пока не это надо ;-)