?

Log in

 

Эволюция используемых языков - Сундучок мыслей

About Эволюция используемых языков

Previous Entry Эволюция используемых языков 15 дек, 2011 @ 07:27 Next Entry
А что же, позвольте вслед за dvf (его рассказ можно найти здесь) рассказать вам, мои уважаемые читатели, про мою эволюцию в плане используемых языков программирования как в быту, так и на работе. Это, конечно, будет некоторый образчик самолюбования, но некоторым из вас это повествование может показаться забавным. Кому же не по нраву такие образчики эпистолярного жанра, те могут просто пролистать это сообщение. Я же пишу этот текст в продолжение недавно опубликованного.

1. До 1994 года. Впервые я познакомился с компьютером посредством книг, типа «Информатика для детей», и научно-популярных журналов. Тогда я сразу понял, что программирование — это моё будущее. Что называется «в железе» я встретился с компьютером БК 0010-01, который приобрёл мой родной дяденька ещё в каких-то лохматых 80-ых годах. Тогда он благосклонно выделял мне машинное время, и я вбивал в железную коробку программы на вильнюсской версии языка BASIC, которые сначала я написал и отладил на бумаге. Приходилось жёстко экономить память — 16 Кб оперативки, куда ещё загружен интерпретатор — это не хухры-мухры. Потом через пару лет этот компьютер появился и у меня лично, и я уже смотрел в слепой экран телевизора, определяя на глаз интенсивность светимости пикселей, и программировал на том же языке BASIC графический редактор с возможностью записи-сохранения изображения, использования джойстика, рисования многочисленных геометрических фигур. Ещё я писал игру по мотивам книги «Хоббит», которую сейчас читаю старшему отроку. Версию ассемблера для этого компьютера я так и не осилил. В школе я жёг в то же самое время на других диалектах того же стрёмного языка на уроках информатики на невозможных машинах немецкого производства, которые нашей школе подарила какая-то немецкая делегация после посещения выставки в Москве. Эти машины были выпущены мелкой партией именно для выставки, а потом их отдали нам. И это был ад. А на школьной производственной практике я также выбрал программирование и жёг на языке BASIC на каком-то клоне PDP-11, был на очень хорошем счету там у них.

2. 1994 — 1996. Первые курсы института (МИФИ). Факультет сначала теоретической физики (Т), а потом кибернетики (К). С техническим обеспечением в те годы было не очень, однако IBM-совместимые персональные компьютеры уже есть, на терминалах с мейнфреймами не работали (а, быть может, и зря, ибо в дальнейшем мне это бы пригодилось, когда работал позже над АСУ в ГВЦ МПС). Была скудная информатика, где нас учили негодному языку Pascal и его развитиям — Modula-2 и Oberon. Со вторыми двумя у меня так ничего и не вышло, да и не хотел я это дело совершенно. К языку Pascal в конечном итоге привык и даже написал на нём какую-то графическую библиотеку под MS-DOS. Дома уже был 386-ой компьютер с 40 МГц и 120 Мб на жёстком диске. Для личных целей достал дистрибутив Borland C++ Builder какой-то первой версии и попытался изучить новый язык. Не осилил и пошёл на курсы повышения квалификации при том же МИФИ. И вот через полгода я сдаю зачёт и получаю сертификат специалиста по объектно-ориентированному программированию и языку С++. Это был совершенно новый тренд в этих наших степях, и в институтской группе я становлюсь одним из ведущих специалистов по информатике.

3. 1996 — 2000. Далее пошли различные специализированные курсы на кафедре Кибернетики МИФИ, где нас учили всякому: ассемблер для какого-то самоспаянного на кафедре устройства, Simula, Smalltalk, GPSS, LISP, Prolog. С языком логического программирования я познакомился ещё в школе, когда ходил на подготовительные курсы при МИЭМ. А другие стали для меня в диковинку. Очень поразила система эмуляции процессов GPSS. До сих пор вспоминаю, как мы запускали «виртуальные шарики» в сложные лабиринты условных переходов и множественных выборов и исследовали временные характеристики получаемых результатов. Остальное я смотрел больше по верхам, рассматривал только парадигму. А вот в функциональное программирование влюбился сразу. И хотя язык LISP меня не впечатлил совсем, я делал на нём лабораторные работы для всей группы (ну кроме одного человека, который вкуривал всё это дело так же, как и я). А на кафедре в лаборатории «Системы Искусственного Интеллекта», где я подвизался на УИР, практику и диплом, я засел за Delphi. Оно меня не впечатлило, но делать было нечего — политика лаборатории.

4. 2000 — 2001. Выпуск из института, аспирантура и первая работа. Моя первая работа была связана со всяким дизайном и вёрсткой. Тогда я освоил Quark Xpress и работу с однокнопочной мышью. Программировать было не нужно, и я делал это для себя. На чём? И вот тут на сцене впервые появляется он. Функциональный язык программирования Haskell. Теперь я уж и не помню, кто первый подсказал мне, что это годный язык. Не вспомню. Но дело было устроено так, что на кафедре мне предложили читать потоковую лекцию по функциональному программированию взамен уходящего преподавателя, который меня этой премудрости и научил. Конечно, на экзамене по функциональному программированию я получил «хорошо», но совет кафедры отлично знал, кто в группе 222 моего года выпуска делал все лабы по ФП. Поэтому призвали меня. Я спросил заведующего кафедрой, могу ли я использовать другой язык, нежели LISP. Мне был дан карт-бланш, и вот я выпускаю методическое пособие по HUGS-98 и учу подрастающее поколение каррированию и частичному применению.

5. 2001 — 2002. Я работаю в американской компании-разработчике издательских систем. Пишу на языке Javascript всякую ерунду для системы класса CMS. Тогда, как наверное и каждый коллектив разработчиков в то время, мы изобрели свой AJAX, построили на языке Javascript многооконную среду в «программе для скачивания браузеров», спрятали в системе горячую комбинацию нетривиальных действий для вызова терминала, из которого можно было посмотреть и поменять значение любого внутреннего параметра системы. На кафедре Кибернетики продолжаю жечь сердца глаголом и несу в массы знание о языке Haskell и функциональном программировании. В 2002 году студенты избирают меня «преподавателем года» на неофициальном конкурсе.

6. 2002 — 2006. Я перешёл работать в компанию, связанную с тогда ещё МПС, а позже ОАО «РЖД». Первые два года работаю инженером-программистом и пишу на языке С++ с использованием библиотеки QT различные модули к системам реального времени для использования на железной дороге. Одна из моих гордостей — Автоматизированная система управления контейнерным пунктом, которую я начинал программистом и ботал жёсткий матан при обработке сигналов с GPS-приёмника в дифференциальном режиме для получения точности в 0.5 метров при мониторинге движения крана на контейнерной площадке, а закончил руководителем проекта, внедрив её на нескольких станциях МЖД. Дома установил за каким-то лядом Delphi и экспериментировал с обработкой естественного языка, построением универсального лингвистического процессора и прочими подобными вещами. И тут супруга принесла заказ на разработку информационной системы для работы с полисами ОСАГО. Эх, тогда бы мне теперешние знания маркетинга/менеджмента/теории управления и прочего такого. Мы на коленках написали первую систему по обработке ОСАГО и внедрили её в СК «Согласие». К нам приходили делегации из других страховых компаний с предложениями купить и внедрить у них. А система писана на Delphi с использованием самописного парсера XML. И она реально работала, пару лет СК «Согласие» вело все свои полисы ОСАГО в ней. И директор ДИТ реально подумывал запустить на этой базе своё дело. Но не срослось. А язык Haskell продолжал жечь. Правда, с кафедрой мне пришлось расстаться — новое руководство решило, что я, работая на 0.4 ставки ассистента, что-то ещё кафедре за такое благодеяние должен (а я рассматривал эту деятельность исключительно как хобби, поэтому иногда позволял себе пропускать лекции и ставить зачёты автоматом, а пропустивших экзамен студентов приглашать к себе на работу для пересдачи — вот кто-то из них и стуканул). Так что с кафедрой завязали. Но в язык к тому времени я окончательно и бесповоротно влюбился.

7. 2006 — 2009. Уже давно не работаю инженером, в качестве рабочего инструмента использую пакет MS Office (Word, Excel, Visio, PowerPoint, Project). Задач по программированию нет и не предвидится. Я даже уже практически не знаю, какими языками программирования пользуются разработчики на моих проектах. Иногда приходится что-то делать под MS Access на VBA. Категорически не по нраву. Для себя решаю всякие задачки при помощи годного языка Haskell, пишу книгу за книгой, статьи в журналы («Потенциал» и «Практика функционального программирования», к созданию которого приложил самое живейшее участие).

8. 2010 — по н/в. Продолжаю использовать язык Haskell. В 2010 году сделал попытку изучить язык J, но запал уже не тот. Мотивации особо изучать узкие инженерные дисциплины нет вообще, взор направлен в совершенно иные вещи. Также была попытка изучить OCaml для выполнения тестовой задачи при устройстве на работу в какую-то эстонскую организацию (особо не рвался, но всякое может быть). Однако сам уже вышел на новый уровень — по моим книгам уже выучились поколения студентов, некоторые пишут письма благодарности. Устраиваю конкурсы, пытаюсь продвигать парадигму. Так и живу...
Оставить комментарий
[User Picture Icon]
From:afiskon
Date:Декабрь, 15, 2011 05:32 (UTC)
(Link)
Я тут вспомнил, что Haskell в МИФИ у нас вел Дмитрий Демидов. Не знаете случайно такого?
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 05:39 (UTC)
(Link)
Так Вы из МИФИ? Ясненько...

Дмитрия Демидова знаю, конечно. Я же ему дела передавал. Ну и УИР вёл в своё время.
[User Picture Icon]
From:afiskon
Date:Декабрь, 15, 2011 06:16 (UTC)
(Link)
Мир тесен :) Дмитрий случайно в ЖЖ не зареган?

Заметка кстати интересная. Меня, правда, в свое время куда больше впечатлило программирование в байткодах для "коробочек", чем GPSS. То, что вы называете ассемблером для этих "коробочек" - это скорее чистый байткод, чем язык программирования (как ассемблер для для x86/x64 например). Помню как то ли определитель матрицы на этих хреновинах считал, то ли умножал матрицу на вектор. И все это с "человеческим" вводом-выводом через терминал. Эх...
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 06:19 (UTC)
(Link)
Русаков, небось, вёл этот адский предмет?
[User Picture Icon]
From:afiskon
Date:Декабрь, 15, 2011 06:50 (UTC)
(Link)
Кажется, да.
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 07:04 (UTC)
(Link)
Ничего не меняется в этом мире...
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 06:19 (UTC)
(Link)
Про ЖЖ Демидова не ведаю, честно говоря.
(Удалённый комментарий)
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 07:05 (UTC)
(Link)
Вот уж я не знаю. Я давно как-то выпал из этой темы.
[User Picture Icon]
From:anonym_mouse
Date:Декабрь, 15, 2011 07:15 (UTC)
(Link)
Хмм.. интересно.

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

Однако вкратце по теме высказаться хотелось бы - тема интересная.

Я (тоже имея высшее, в области какой-то там физики) помню какое удручающее впечатление на меня произвели первые ПиСи с майкрософт-ОС и какими-то там Борландами в качестве development tools. Вдруг выяснилось, что компьютер - вроде автомобиля с заваренным капотом. Тебе даны кнопки на которые позволена нажимать или не нажимать в окнах, которые можно увлеченно открывать и закрывать.

Поэтому (уже в США в начале 90х) я - первое компьютерное переживание на всю жизнь - был поражен существованием открытых юниксов и целого движения за открытие программ, ГНУ.
Оказывается то, чему когда-то там учили на курсах инженерно-научного программирования в ВУЗе совсем умирать не собиралось, оно живет в 'большом' мире, а кнопочные ПиСи оказывается всего лишь выражение мира коммерческого. Оказывается есть открытые свободные юниксы, которые можно ставить на те же ПиСи, и на них можно учить что хочешь, не завися от _доступа_, который традиционно появлялся с местом в какой-нибудь компании или через (в Штатах) университет.
Оказывается кроме мира вечной жадности есть _открытые_ программы, серьезные программы - потому что в головах нескольких лидеров сформулировалась мысль, которую они передавали всем - что написание программ с открытыми исходниками важно не из-за 'халявы', а потому что в человеческой культуре новое появляется как комбинация старого плюс надстройка на нем. Следовательно если мы коммерчески закрываем программные идеи, то каждый следующий будет обречен переизобретать велосипед. А изобретение - трудно, и переделывать его практически с нуля - поразительная растрата человекечских мозгов.
ГНУ - это не (как чаще всего некомпьютерные дикари понимают это в России, да и не в России тоже) возможность 'не платить программистам', а модель кооперации в противовес модели паразитизма.
Ну и в последних, в мире юникса оказалось выученное однажды не придется забывать через год-два потому что коммерческий паразит желает переделать всё (форматы, API, пользовательские интерфейсы) чтобы в очередной раз получить очередную порцию денег и незаконное преимущество перед third-party developers.

Так я перешел на Линукс, практически полностью с 1994 года, и стал профессионально работать с кучей других юниксов. На Windows я перегружаюсь очень редко, практически никогда.

Следовательно вся программистская идеология и набор инструментов у меня - производные от среды юникса.
Скриптовые языки, долго основным был Пёрл, много разных по мелочи. Встроенные языки каких-нибудь IDL'ов или Матлабов, нужные по работе. По необходимости каждый, живущий в среде юникса знает цепь компиляции на Ц и не может хотя бы минимально не редактировать, менять ГНУ-программы на нём.

[User Picture Icon]
From:anonym_mouse
Date:Декабрь, 15, 2011 07:15 (UTC)
(Link)
Но работа на юниксе также сама собой тянет в мир как здесь говорят 'высоконагруженных серверов' (связанных или не связанных с Интернетом) - ведь на юниксе построена вся информационная инфраструктура подавляющего большинства компаний, кроме самых мелких.
Т.е. всегда сосуществуют 3 мира: мир mainframes и high-end computing, разработки которого просачиваются с необходимостью в мир "среднего масштаба" (юникс-сервера, от больших ферм до мелких), а из этого мира капает в мир мелкого, коммерциализированного уже полностью, уродливого и искаженного воплощения компьютерных идей, в мир Microsoft'а и Apple'а. (Понятно, что границы размыты и ряд инструментов сосуществует на разных платформах).
Так, из мира 'больших' за последнее десятилетие пришла в юникс виртуализация ОС и что-то массивно-параллельное, что сегодня стало практично делать из кластеров дешевых машин на покупных массовых компонентах.

Это давление в сторону 'high-performance computing' и не угасшее с годами любопытство заставило меня в последние годы посмотреть немного на функциональные языки, а точнее оценить идею, что 'правильный' язык обязан быть 'мультипарадигменным'. Отчасти это реакция на тоталитарность секты Объектно-Ориентированного Программирования и мое отвращение к 'корпоративному программированию', символом которого является Java. Понятное в силу изложенного выше.

И тут должен признать самое сильное впечатление на меня - уже в недавние годы - произвел язык Эрланг.

Не потому что он 'функциональный' (я перебирал кучу языков, известных и нет, чтобы двигаться вперед, например, версии пролога, или листал примеры лиспа/схем - и нашел превосходный скриптовый newlisp в той традиции, сильно не взлюбив Common Lisp, ибо нельзя делать языки комитетами).
Эрланг - это прямой пролог скрещенный с message passing. Но поразили меня не pattern matching, удобно накладывающиеся на variables/atoms immutability и messaging.
Меня поразил подход к безотказному массивно распределенному программированию, заключенный в концепции языка и в его OTP-библиотеках.

Подобное сейчас можно делать во многих языках, хотя делает мало кто - в том числе и в любимом вами Хаскеле - благодаря библиотеке 0MQ (или zeromq), она элементарно подвязывается к куче языков.

Логика устранения конфликтов за счет message passing paradigm + immutability, идея о том, что можно запускать кучу процессов, идея о процессах - "надсмотрщиках" (подобных известному каждому юниксоиду inetd по сути), и наконец идея ОТП о том, что можно запрограммировать "просто сервер", который делает ничего пока в него не подгружаешь "смысловую" часть - а смысловая часть пишется как бы "линейно", из процесса-родителя, потому что этот generic server придет к родителю через callback и прочитает что ему делать -- то есть сведение сложного кодирования во многих местах к заполнению template линейно в одном месте -- потрясающи в своей сумме.
Не говоря о том, что система Ерланга позволяет еще и менять код на новые или тестовые версии 'на лету' и возвращаться назад, то, что кажется громоздким и трудным для других языков.

Потому меня сегодня захватывает идея применения message-passing paradigm в разных задачах, как сделанных на Эрланге, так и эквиваленты другими (совсем традиционными но примененными нетрадиционно, например) способами.

Одна из интересных игрушек - библиотека zеromq, которая может помочь сделать как бы 'эрланг' из кучи других языков, сделать возможным тот тоже поразительный по сути своей подход к программированию систем.
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 07:20 (UTC)
(Link)
Вы меня так заинтриговали, что я пошёл учить Эрлангъ.
[User Picture Icon]
From:anonym_mouse
Date:Декабрь, 15, 2011 07:30 (UTC)

Joe Armstrong

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

Joe Armstrong 'Programming Erlang Software for a Concurrent World'
В ней глава 16 'OTP introduction' объясняет идеологию написания 'линейного' кода в родителе так, чтобы запущенный generic сервер пришел и взял смысловую часть своей работы через callback.
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 07:52 (UTC)
(Link)
Да, хорошо. Разберусь.
[User Picture Icon]
From:alexott
Date:Декабрь, 15, 2011 08:06 (UTC)

Re: Joe Armstrong

(Link)
Армстронговская не особо хорошая по сравнению с орейлевской Erlang programming & Erlang and OTP in Action от Manning. Орейлевская будет в русском переводе в следующем году
[User Picture Icon]
From:anonym_mouse
Date:Декабрь, 15, 2011 17:16 (UTC)

Re: Joe Armstrong

(Link)
Зависит от вашей цели.

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

Однако Армстронг лучше в смысле представления _идей_. Он короче, он не представит вам такие-то операторы, но он (как и его лекции) объясняет заложенные идеи.

Третья книга (с "ОТП" в заглавии) написана много хуже, она очень подробна, но рыхла, и в ней главную идею легче потерять не увидев леса за деревьями.
[User Picture Icon]
From:_darkus_
Date:Декабрь, 15, 2011 07:17 (UTC)
(Link)
Ясно. Тоже интересно.
[User Picture Icon]
From:gelvaos
Date:Декабрь, 15, 2011 21:47 (UTC)
(Link)
Роман, доброго времени суток!
Вопрос конечно полный offtopic, но хотелось бы узнать, существует ли Ваша книга по Haskell "Функциональное программирование на языке Haskell" в электронном виде? В бумажном виде я ее уже давно приобрел и хотел выразить свой большое respect и огромное спасибо. Но бумажный вариант не всегда удобен, особенно в пути и хотелось бы Вашу книгу читать на iPad.
[User Picture Icon]
From:_darkus_
Date:Декабрь, 16, 2011 10:48 (UTC)
(Link)
Так добрые люди уже отсканировали и в сеть выложили. Например, на Инфанате есть, на http://www.twirpx.com/ все мои книги, по-моему, выложены. Так что зря Вы сомневаетесь...
[User Picture Icon]
From:gelvaos
Date:Декабрь, 16, 2011 15:23 (UTC)
(Link)
Большое спасибо за ссылку. Не хотелось просто пользоваться услугами пиратов, но если есть официальное разрешение автора, то тогда гууд :)
[User Picture Icon]
From:_darkus_
Date:Декабрь, 16, 2011 16:20 (UTC)
(Link)
Ну у меня-то, как у автора, интерес один — чтобы мои книги шире распространялись. А поскольку тираж давно распродан полностью, то коммерческие интересы издательства также исполнены.
[User Picture Icon]
From:gelvaos
Date:Декабрь, 16, 2011 16:25 (UTC)
(Link)
Ну будем считать, что хоть и очень маленький, но свой вклад в Ваши комерческие интересы я внес, купив бумажную версию. :)
(Оставить комментарий)
Top of Page Разработано LiveJournal.com