Эволюция используемых языков программирования

13 января 2012

На написание этой статьи меня вдохновили заметки На чём пишете? Дениса Филонова и Эволюция используемых языков Даркуса. В них авторы вспоминают, как они начинали программировать, какие языки программирования в каком порядке учили и какое впечатление эти языки на них произвели. Вот и я решил написать такую заметку. Уже во время составления ее плана я сделал для себя много удивительных открытий.

Внимание! В отличие от типичных заметок, публикуемых в блогах, в этой статье очень много букв. Если вы перешли на эту страницу из Twitter или Google Reader в разгаре рабочего дня, советую добавить ее в закладки и прочитать позже. Например, дома, в тишине и покое, с чашечкой зеленого чая в руках.

Например, мне удалось вспомнить, что когда-то я программировал на таких языках, как Modula-2 и GPSS, а моим первым языком программирования был вовсе не Delphi, как мне казалось. А еще я почему-то думал, что начал программировать в 8-м классе. Однако сопоставив свои воспоминания с фактами, я выяснил, что ошибался. Свою первую программу я никак не мог написать ранее 2003-го года. Тогда мне было 14 лет и я учился в 9-м классе. Вот такая ненадежная штука эта человеческая память.

Как все начиналось (2002-ий год)

Итак, на дворе был 2002-ий год, я учился в 9-м классе. В 2002-ом мало кто мог похвастаться высокоскоростным доступом в интернет. В 9-м классе у меня не было даже Dialup. Ходить по выходным в гости для того, чтобы поиграть в Sega Mega Drive II или даже Dendy, было нормальным явлением. Компьютеры или PlayStation были у немногих, притом иметь PlayStation было так же круто, как иметь компьютер. У моих родителей был компьютер. Персональный ноутбук LG LM50-34GR появился у меня чуть позднее, так что приходилось делить компьютер с братом. Как и полагается уважающему себя школьнику, компьютер я использовал в основном для игр.

Какие это были игры! Counter-Strike, Unreal Tournament, Gorky 17, I.G.I, Wizardry 8, Neverwinter Nights, Imperor: Battle for Dune… В CS и UT мы обычно играли с ботами, ведь чтобы поиграть с друзьями, нужно было выпросить у родителей деньги, собраться всем вместе и пойти в компьютерный клуб. Вы не поверите, но рефераты мы тогда тоже обычно писали самостоятельно. Родители почему-то не склонны давать детям деньги для того, чтобы те сходили в интернет-кафе и скачали сочинение по литературе. Да и самих интернет-кафе, как и сайтов с сочинениями/рефератами, было немного.

Будучи отрезанным от всемирной паутины, да и мало представляя, что это такое, информацию о новых играх я черпал из журналов «Игромания» и «Game.exe». Причем в этих журналах меня интересовали не столько новости игровой индустрии, сколько прилагающиеся CD диски. Можете себе представить, что такое целых 650 Мб демо-версий, патчей, модов, читов и похождений игр для 14-и летнего подростка, не имеющего выхода в интернет? Я бережно хранил все диски в верхнем ящике стола и внимательно следил, чтобы каждый диск был упакован в защищающий от грязи и царапин полиэтиленовый пакетик.

Скрипты для Neverwinter Nights (2003-2004)

В 9-м классе я сильно «подсел» на игру Neverwinter Nights. Трехмерная графика, яркие спец-эффекты, захватывающий сюжет и от 60-и до 120-и часов расчетного времени игры, в зависимости от желания игрока отвлекаться на побочные квесты. По тем временам это был настоящий шедевр, да и сегодня игра смотрится в общем-то неплохо. Я играл до глубокой ночи, вырезал и собирал в специальную папочку статьи из журналов, имеющие отношение к Nwn, и даже видел сны с сюжетами из игры.

Однажды я открыл «Игроманию» и нашел в ней статью, посвященную редактору карт Neverwinter Nights. Я не поленился найти эту статью на сайте журнала. Она называется «Все о редакторе Neverwinter Nights. Ноктюрн влюбленного зомби. Часть первая». Статья была написана Александром Таракановым и опубликована в 62-м номере «Игромании» в ноябре 2002-го года. Мне стало интересно и я попробовал создать свою карту.

Это оказалось несложно. Сначала создается локация определенного типа и размера. Например, пещера размером 12x12 полей. Затем с помощью визуального редактора в этой пещере (точнее — скале) «прорываются» тоннели, которые заполняются монстрами и сундуками с сокровищами. Можно создавать несколько локаций и связывать их переходами в виде дверей, порталов и тп. Понятно, что программированием тут и не пахнет.

В декабре того же года была опубликована вторая часть статьи, а в январе 2003-го — последняя, третья часть, которую Александр писал совместно с Антоном Лысенко. Вот эта статья и стала для меня дверью в мир программирования. В ней речь шла о скриптовом языке редактора карт.

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

Писалось все это фактически методом проб и ошибок. Много сложностей вызывала необходимость искать названия функций и констант в англоязычной документации, которая шла в комплекте с редактором карт. Дело в том, что я учился в школе с углубленным изучением немецкого языка. Английский нам начали преподавать, кажется, только в 8-м классе. Да и вообще с иностранными языками у меня как-то не ладилось, поэтому документацию я переводил с помощью программы-переводчика. Уже не помню название этой программы, но помню, что качество перевода было скверным.

ActionScript (2003-2004)

ActionScript — это то, на чем программируют Flash-игры и Flash-сайты. С этим языком я познакомился благодаря серии статей «Беспредел простоты», опубликованным в рубрике «Самопал» все той же «Игромании». Серия состоит из трех частей, опубликованных в период с декабря 2002-го по май 2003-го (часть первая, часть вторая, часть третья). Из трех частей к программированию имеет отношение только последняя. Припоминаю, что я не сильно проникся ActionScript и писал на нем всего пару раз в своей жизни.

Delphi 7 (2003-2006)

Помимо третьей части «Беспредела простоты», рубрика «Самопал» журнала «Игромания» №5(68) 2003 содержала статью «Мастерская творца. Создание текстового редактора» за авторством Константина Артемьева. Вторая часть статьи была опубликована в июньском номере. Повествование шло о языке Delphi.

Оказалось, что программирование на Delphi сильно напоминает работу с редактором карт для Neverwinter Nights. Только вместо пещер и тоннелей мы имели форму и кнопочки на ней. Вместо рычага и события OnPull было поле ввода и событие OnEdit. К сожалению, радость открытия омрачала сложность языка. Я был плохо знаком с концепцией переменных, процедур, условных операторов и циклов, а про ООП вообще ничего не слышал. Несколько дней я упорно перебивал исходный код из журнала в свою программу и изучал сообщения компилятора об ошибках. И вот однажды программа заработала! Это было ни с чем не сравнимое чувство! Мне казалось, что я повелеваю вселенной. Я написал свой текстовый редактор.

После этого я основательно «подсел» на Delphi. Я купил книгу «Delphi 7. Учебный курс» Сергея Бобровского и благодаря ей разобрался с переменными, условными операторами и циклами. В скором времени у меня появился Dialup, а затем и высокоскоростной интернет от Akado. Благодаря интернету, мне стали доступны статьи и форумы, откуда я почерпнул много знаний о программировании. Со временем я открыл для себя WinAPI и KOL.

Я писал на Delphi примерно до конца первого курса, когда то ли из-за вируса то ли из-за сдохшего диска я потерял все свои исходники. Я грустил, будто у меня умер любимый питомец. И тогда я навсегда уяснил, что у любой более-менее ценной информации должна быть резервная копия. К тому времени я уже неплохо владел ассемблером и C/C++, а также начал интересоваться юниксами, под которые традиционно пишут на сях.

В итоге к Delphi я так и не вернулся. Но какой-то неприязни я к этому языку не испытываю. Это хороший, годный ООП язык, на котором можно писать как под Windows, так и под UNIX. Но я бы не советовал сейчас изучать его в качестве основного языка. Владея C++, больше шансов найти интересную работу, если только вы не фрилансер. Достаточно сравнить число вакансий на HeadHunter для программистов на Delphi и на C++.

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

Visual Basic for Applications (2003-2004)

Я был немало удивлен, вспомнив, что имею опыт программирования на Basic. VBA — это диалект Basic, используемый в Microsoft Office. Если память не изменяет, нас учили ему в 9-м классе на уроках информатики. Мы открывали Excel, вводили в ячейки входные данные (например, коэффициенты квадратного уравнения) и запускали макрос. Макрос производил вычисления и выводил результат (например, корни квадратного уравнения) в выделенные под это ячейки.

После 9-го класса я перевелся в физико-математический лицей, где, помнится, нам давали такие же задачки. После этого VBA мне ни разу не понадобился.

Logo или «Черепашка» (2003-2004)

В 10-м классе с помощью Logo нас учили структурному программированию. Представьте, что перед вами квадратная песочница, в которой ползает черепашка. Передвигаясь, черепашка оставляет за собой след. Logo — это язык, программы на котором рисуют картинки, управляя такой виртуальной «черепашкой». Если метафора с черепашкой вам непонятна, представьте, что вы водите кисточкой с краской по квадратному холсту, четко выполняя инструкции на языке Logo. Например, если в программе написано «вперед 30; направо 90; вперед 10», то на холсте (или в песочнице) будет нарисована буква Г.

Несмотря на кажущуюся легкость, задачки на Logo могут быть довольно нетривиальными. Например, задача может ставиться в стиле «нарисовать n-угольник для произвольного заданного n > 2». Высшем пилотажем считалось нарисовать дерево, потому что тут требовалось применение рекурсии, которая выносила всем мозг.

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

Pascal (2003-2006)

В старших классах и на первом курсе у нас был Pascal. В отличие от Logo тут были массивы, структуры данных, файлы и, кажется, даже какая-то графика. Программы мы писали в Turbo Pascal на стареньких компьютерах, работающих под чистым MS-DOS (Logo запускался в таких же условиях).

Обычно я делал лабораторные быстрее многих одноклассников и в образовавшееся время упражнялся в написании bat-скриптов (если что, это как sh-скрипты в Unix). Во всяком случае, я не припомню, чтобы это было у нас по программе. Зато помню, как написал «bat-вирус», рекурсивно обходящий каталоги и кладущий в каждый каталог свою копию.

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

Ассемблер x86 (2004-2007)

В старших классах я увлекся криптографией. Я купил себе красный томик «Прикладной криптографии» Брюса Шнайера и внимательно изучал его после школы. Самым сложным для меня было понять, как строка или какой-нибудь «file of double» могут быть зашифрованы (или хэшированы) с помощью алгоритма, работающего с несколькими целыми числами. К сожалению, исходники в конце «Прикладной криптографии» были на языке Си, который я не знал.

Зато у меня уже был выход в интернет, где я мог найти исходники криптографических алгоритмов на Delphi. Увы, в большинстве исходников использовались ассемблерные вставки, которые я не понимал. Тогда я уже был полон решимости стать «настоящим программистом». А какой же я «настоящий программист», если не знаю ассемблер? Так у меня появилась книжка «Ассемблер для Windows, 2-е издание» Владислава Пирогова. Эта книжка до сих пор стоит у меня на полке:

Ассемблер для Windows, 2-е издание

Позже выходили третье и четвертое издание книги, но в них было много лишних страниц, где рассказывалось больше о WinAPI, чем об ассемблере. Видимо, имела место погоня за объемом. Это один из немногих известных мне случаев, когда раннее издание книги лучше последующих изданий.

Много полезных материалов, связанных с ассемблером, я нашел на сайте wasm.ru. Там же я узнал разные интересные вещи про Windows API, отладку с помощью OllyDbg и SoftIce, реверсинг с помощью (тогда еще бесплатного) hiew и IDA Pro, полиморфизм и антиотладочные приемы. Особенно мне нравились статьи от Ms-Rem, видимо, потому что помимо ассемблера он использовал Delphi.

В итоге я ломал программы (но никогда не выкладывал кряки!), создавал полиморфные движки (но никогда не делал трояны и вирусы!), писал простенькие драйверы под Windows и игрался с упаковщиками/крипторами исполняемых файлов примерно до середины 3-го курса. К тому моменту я стал сильно интересоваться юниксами и языком программирования Perl. Стало понятно, что ассемблер не очень хорош в плане переносимости и что некоторые типы программ намного удобнее писать на Perl.

По этим причинам сейчас я не пишу на ассемблере. Тем не менее, его знание сильно помогло мне в понимании того, как «на низком уровне» работает C++, особенно это касается виртуальных методов. Это в свою очередь помогло мне избежать множества ошибок. Кроме того, знание ассемблера несколько раз помогало мне при отладке программ (тесты, к сожалению, не всегда спасают). Если вы пишите на Си, C++ или Delphi, обязательно потратьте время на изучение ассемблера — не пожалеете!

Стоит отметить, что современные компиляторы ассемблера поддерживают объявление процедур, локальных переменных и макросы, в том числе макросы для операторов if и циклов while. Таким образом, программирование на ассемблере в наше время сильно напоминает программирование на Си или Pascal. Только в отличие от Си и Pascal, в ассемблере нет типизации, что в некоторых задачах (например, шифрование или сжатие данных) даже удобно. Ну и, как я уже отметил, программы на ассемблере трудно переносить с одной архитектуры процессора на другую.

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

C/C++ (2004-2012)

В старших классах я частенько почитывал журнал «Хакер», где было много исходников на C/C++. Также исходники на Си были в «Прикладной криптографии» и на wasm’е. Я не понимал, что происходит в этих исходниках, но очень хотел разобраться. Так я начал учить C/C++. Кстати, я в курсе, что Си и C++ — два совершенно разных языка. Но поскольку эти два языка я изучал параллельно, использование термина C/C++ кажется уместным.

Помню, как я обошел все ларьки с дисками в ближайших подземных переходах, пока не нашел в одном из них диск с Borland C++ Builder X. Не помню, то ли тогда я все еще сидел на Dialup, то ли еще не подозревал, что можно скачивать из сети ISO образы размером 650 Мб. Установив дома программу, я не нашел в ней формочек и кнопочек, как было в Delphi. Как я был разочарован! Я вернулся к продавцу и поинтересовался, нет ли у него других компиляторов C++.

Не помню, поменял ли продавец диск или я дождался подключения высокоскоростного интернета, но вскоре у меня был установлен Microsoft Visual C++ 6.0. То ли я не нашел в нем редактор ресурсов, то ли нашел, но он мне не понравился, то ли память снова меня подводит и в Visual C++ 6.0 никакого RAD отродясь не было, но все программы в нем, включая GUI, я писал на чистом WinAPI.

Первое время я изучал C/C++, глядя на примеры кода и пытаясь без ошибок перепечатать их. Затем от примеров я перешел к методу проб и ошибок. Вскоре я стал неплохо писать на «Си с небольшими улучшениями от C++». Году в 2008-ом (на 3-м курсе) я приобрел книжки «Полный справочник по Си» и «Полный справочник по C++» Герберта Шилдта:

Полный справочник по C++

Так началось мое знакомство с настоящим C++. Первое время было очень сложно понять объекты, шаблоны и исключения. Понимание пришло как-то само (вероятно, во время поездок в метро), когда я прикинул, в какой ассемблерный код могли бы преобразовываться объявления классов и шаблонов.

Языки Си и C++ сильно пригодились мне в институте. Смею заверить, что знать программу наперед — очень удобно. Также знание Си и вещей в стиле «что выведет код int *ptr = (int*)1024; printf("%d\n", ++ptr);» помогло мне устроиться на мою текущую работу, которая мне очень нравится.

Тем не менее, на сях я пишу довольно редко и преимущественно для себя. Не могу сказать, что сильно этим расстроен. Ведь на работе и безо всяких утечек памяти и ошибок переполнения буфера забот хватает. Но и полностью забывать C/C++ в мои планы не входит, поскольку эти языки незаменимы в ряде задач. Кроме того, на сях можно писать модули для Perl и Haskell.

PHP (2004-2007, 2010)

Не помню точно, откуда у меня возник интерес к веб-программированию, но помню, что PHP я начал учить в старших классах. На этот раз я учился не методом проб и ошибок, а по книжке «Самоучитель PHP 5» Дениса Колисниченко. К тому времени я уже немного знал Си, благодаря чему в PHP мне удалось разобраться буквально за два вечера. Так мне казалось, но на самом деле я все еще понятия не имел об ООП и тем более различных фреймворках (кажется, в мире PHP их тогда и не было).

Тогда ко мне пришло понимание, что большинство языков программирования мало чем друг от друга отличаются. Возьмем Си, Pascal и PHP. Идея везде одна и та же — переменные, условные операторы, циклы, функции. Все различия заключаются в мелких деталях. Например, в PHP имя каждой переменной почему-то должно начинаться со знака доллара. Наверное, это сделано для того, чтобы имена переменных гарантированно не пересекались с ключевыми словами.

Язык PHP немного пригодился мне на моей предыдущей работе, где я реализовал на нем небольшой проектик. Также знание PHP существенно упростило мне изучение Perl (если вы не знали, PHP испытал сильное влияние со стороны Perl). Последней относительно «серьезным» моим приложением на PHP был плагин Two Columns Archive для WordPress, написанный в 2010-м году. В настоящее время я почти не пишу на PHP, если не считать мелких правок шаблонов к WordPress и тп.

Несмотря на существенные недостатки, присущие этому языку, я не могу сказать, что недолюбливаю его. По-моему, это хороший, годный язык для веб-программирования. Наверное, хорошо работать PHP-программистом. Хреначишь себе сайтики в Zend Framework — ни тебе проблем с многопоточностью, ни утечек памяти с переполнениями буфера. Стоит также помнить о том, что благодаря PHP были созданы такие популярные движки, как WordPress, PhpBB, MediaWiki и другие.

SQL (2004-2012)

Во время изучения PHP я довольно быстро и безо всяких учебников освоил SQL. Прочитал пару статеек, полистал документацию и разобрался. Только через несколько лет, в институте, я узнал про нормализацию, реляционную алгебру, транзакции, ссылочную целостность и тп. Не представляю, как до этого я мог работать с базами данных. Стоит ли говорить, что мне приходится довольно часто иметь дело с SQL?

JavaScript (2004-2007, 2010-2011)

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

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

Bash, Csh (2007-2008)

На 3-м курсе нас учили писать скрипты на Bash и Csh (произносится «си шелл»). В то же время я устроился на свою первую работу системным администратором. Там я написал несколько несложных bash-скриптов, выполняющих за меня различные рутинные действия. Вскоре я стал использовать для таких задач Perl, вследствие чего Bash стал мне не нужен. Тем не менее, мне было очень интересно поработать со скриптовыми языками, используемыми до появления Perl.

Кстати, я вовсе не считаю Bash и Csh устаревшими средствами или вроде того. Программистам, конечно, удобнее писать на Perl или Python. Но совсем не факт, что администраторам или продвинутым юниксоидам хочется тратить время на изучение этих языков, когда есть простой, как пять копеек, Bash. Да и программистам не помешает ознакомиться с Bash хотя бы для того, чтобы уметь читать код на нем.

GPSS (2007-2008)

На третьем или четвертом курсе нас знакомили с языком программирования GPSS. Это такой забавный язык для моделирования работы различных систем. Описав систему в терминах языка GPSS, можно быстро получить разную интересную информацию об этой системе. Например, можно узнать среднюю длину определенной очереди. По правде говоря, я не сильно проникся GPSS и частенько пробивал лекции по этому языку. Хотя идея, бесспорно, интересная и ценная. За пределами института GPSS мне не пригодился.

Modula-2 (2007-2008)

Одновременно с GPSS нас учили языку Modula-2. Это язык модульного программирования, разработанный Виртом. Помню, меня в этом языке бесила необходимость писать все ключевые слова в верхнем регистре, а также сильная типизация. После Си с его неявным преобразованием типов сильная типизация казалось очень неудобной. Понятно, что на Modula-2 я писал только в течение того одного семестра.

Тем не менее, мне понравились идеи, заложенные в Modula-2. Я даже серьезно подумываю как-нибудь попробовать его наследника, язык Modula-3. В отличие от Modula-2 в нем появились ООП, обработка исключений, сборка мусора и другие полезные средства. Вообще, Modula-3 по нынешним меркам выглядит очень солидно.

Байткод для Intel 8080 (2008-2009)

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

Байткоды

Дополнение: Мне подсказали, что данный набор инструкций соответствует микропроцессору Intel 8080. Также удалось найти изображение «коробочки». В 2023-м году я выяснил, что «коробочка» называется Электроника МС 2702, а также обзавелся похожим устройством, УМК-80.

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

Perl (2007-2012)

Уже не помню точно, что подтолкнуло меня к изучению Perl. Наверное, тот факт, что «Perl — это как PHP, но не только для сайтов». Perl я изучал преимущественно по примерам кода. Я купил книгу «Программирование на Perl» (camel book), но оказалось, что это скорее справочник для опытных Perl-программистов, чем учебник. Для изучения Perl есть пара книжек получше:

Книги "Изучаем Perl" и "Perl - изучаем глубже"

К сожалению, «книга с ламой» и «книга с альпакой» появились у меня, когда я уже неплохо писал на Perl. Так что с помощью этих книг я лишь заполнил пробелы в знаниях.

Язык Perl «зацепил» меня, когда выяснилось, что писать на нем намного быстрее и проще, чем на Си. Программы получались раза в два короче, а значит ошибиться при их написании было сложнее. Кроме того, Perl-скрипты были намного переносимее между различными ОС, а также их не нужно было компилировать, что оказалось очень удобно и экономило время. Позже мне также открылась мощь регулярных выражений, фреймворка Mojolicious и бесчисленного количества модулей на CPAN, а также техническая грамотность и дружелюбие сообщества Perl-программистов.

Я много пишу на Perl. Я использую его на работе, в своих проектиках, да и просто в повседневной жизни. Программа, созданная мной в рамках дипломного проекта, также была написана на Perl. Конечно, у этого языка есть и слабые стороны, но к ним относятся вовсе не «устарелость» или «плохой синтаксис» языка, как утверждают некоторые «специалисты». Это замечательный современный (и развивающийся!) язык. Рекомендую.

Haskell (2008, 2011-2012)

В институте у нас было два предмета на выбор — логическое программирование (на Prolog) и функциональное (на Haskell). Логическое программирование, очевидно, имело отношение к искусственному интеллекту, лекции по которому я мягко говоря недолюбливал, а функциональное вызывало ассоциации с хорошо знакомыми сишными функциями. Угадайте, какой из предметов выбрал ваш покорный слуга. Я не поленился покопаться в архиве своей электронной почты для того, чтобы точно определить, когда состоялось мое первое знакомство с Haskell. Это было на 4-м курсе (2008-ой год), а предмет вел Дмитрий Демидов.

Честно говоря, в институте я не сильно проникся функциональным программированием. Было совершенно непонятно, кому и зачем оно нужно. Зато спустя пару лет на меня снизошло озарение, после которого я проникся языком Haskell по полной программе. Разумеется, язык я совершенно не помнил, так что пришлось учить его заново. В этом мне сильно помог сайт learnyouahaskell.com, а также книги Романа Душкина:

Книги Романа Душкина, посвященные Haskell

На момент написания этих строк я все еще нахожусь в процессе изучения Haskell. Мне следует получше разобраться в библиотеках и инструментах для этого языка, да и вообще «набить руку». Кроме того, я не уверен, что правильно понимаю концепцию монад. Использовать Haskell на работе мне пока что не приходилось.

Python и Java (~2010-2011)

Следуя веяниям моды, я ознакомился с Python и Java. На мой взгляд, из литературы тут можно посоветовать «Python — подробный справочник» Дэвида Бизли и «Философию Java» Брюса Эккеля. Правда, в русском переводе «Философия Java» урезана в два раза по сравнению с оригиналом. Тем не менее, книга достойная.

Книги "Философия Java" и "Python - подробный справочник"

С языком Java я познакомился довольно поверхностно. По всей видимости, язык годный. Во всяком случае, мне понятно, почему он был создан и каковы его преимущества перед C++. Однако есть и недостатки. В двух словах, C++ — более сложный язык, но он и более универсальный.

К Python я присмотрелся чуть более внимательно… и был сильно разочарован. Мало того, что этот язык далеко не так «элегантен и прост в изучении», как заявляют те же «специалисты», так у него имеется и множество существенных проблем, которых нет в Perl. Взять хотя бы производительность и «особенности» сборщика мусора, две совершенно несовместимые версии языка, бедность PyPI по сравнению с CPAN, а также проблему с многопоточностью и GIL.

Уверен, как Python, так и Java хорошо справляются с большими классами задач. И поверьте, у меня нет никакого желания обидеть программистов, использующих эти языки. Но для решения тех же задач я могу успешно применить Perl и C++ (с точностью до того, что на C++ не пишут апплеты, а на Perl — плагины для Django). Особой же выгоды от перехода с C++ на Java или дополнительного знания Python помимо Perl я что-то не вижу.

Итак. Я вроде умею читать код на Python и Java, а при сильном желании, возможно, даже писать. Быть может, когда-нибудь один из этих языков пригодится мне по работе (хм… ревью кода?). А пока я никак не использую Java и, кажется, завязал экспериментировать с Python.

Диаграмма используемых мною языков

Представленная ниже диаграмма изображает, в какие годы и на каких языках программирования я писал:

Диаграмма используемых языков программирования

Следует отметить, что это очень примерная диаграмма. Например, я вовсе на писал на Java в течение двух лет. Но где-то в период с 2010-го по 2011-ый год я интересовался этим языком и писал на нем какие-то хэллоуворлды.

Что дальше?

Я почти уверен, что не стану учить Ruby или C#. Подозреваю, что в скором времени я попробую разобраться в Lisp (или, возможно, Clojure) и Prolog. Очень интересно выглядит Perl 6 (можно сказать, что это Perl 5, в котором были исправлены многие недостатки). Возможно, хотя и маловероятно, что я попробую Scala. Кажутся интересными языки Fortran, OCaml, Modula-3 и Erlang, но не настолько интересными, чтобы тратить на них время.

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

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.