Рискуя быть избитым сами знаете какими тряпками, расскажу вам, с чего я вообще стал программистом. Дело было давно, поэтому если где рассказал не точно, уж извините. Хотя вы всё равно ведь свечку не держали.
Началось всё с того, что бабушка очень любила готовить. Я сидел на кухне, меня это интересовало, и она разрешала тоже чего-нибудь помешать. Обнаружил, что смешивать соду с лимонной кислотой очень забавно. Потом мне ещё много чего рассказывали разные люди, я интересовался. Уж не помню как, но в моих руках оказалась книжка по химии, и уже в первом классе я умел химичить всякую забавную хрень вроде пороха. Ну короче где-то то же самое, что сейчас умеют абитуриенты, прослушав школьный курс химии фурсенковского образца.
Родители у меня математики, и из какого-то лютого троллинга отвели меня к школьному преподу химии. Он работал ещё и на местном оргсинтезе, подрабатывал тем, что готовил ребят к олимпиадам. Весёлый был мужик короче. И тоже тролль. Поскольку принялся меня учить. Довольно быстро я освоил неорганику и простенькую органику (не дальше понятия об изомерии и реакции Вюрца), чем мои потребности пироманьяка были весьма удовлетворены. Но одна вещь не давала мне спокойно спать: называть органические соединения по-номенклатурному было очень неудобно, и я подозревал, что есть соединения, которые банальными -ол, -ан, -ид'ами не назвать, но не мог таковые найти (правда, потом в энциклопедии Аванта+ Химия узнал про гетероциклические соединения и соединения с конденсированными циклами).
Помню этот момент как сейчас, восьмилетний пацанчик, еду с отцом в вонючем Икарусе (автобус такой, если у кого не ходили в постсоветские времена) домой, рассказываю ему об этом, а он и говорит, запрограммируй, мол, на каком-нибудь Basic'е. Рассказал потом преподу химии. Его сын как раз учился в институте Visual Basic'у. Жребий пал, короче.
Не знаю, стал бы я программистом, увидев консольку и богомерзкий Паскаль.
(Где-то здесь, или в середине следующего абзаца) я был в деревне. Долго был. Купался-загорал, но это было очень скучно. Поэтому я в деревенской библиотеке нарыл самую красивую книжку, бейсик в картинках. Когда потом уже у бати на работе тестировал на каком-то очень древнем консольном бейсике навроде gwbasic (где я его тогда отрыл?), жутко обижался на то, что меня в этой книжке наебали с командой, которая играет мелодии из строки символов, описывающих ноты. Потом, правда, сделал такую на VB6.
Но в магазине на $10, подаренных когда-то на день рождения крёстным, я купил книжку "Практика Visual Basic for Applications" какого-то невразумительного русского автора. Разницы между VBA и VB не понимал ведь. Да и Эксель везде есть. Юзерформочки творил, радовался жизни. Правда, очень долго тупил из-за того, что там использовались глобальные переменные в модулях, которые были волшебно доступны из других. Я просто не понимал этого. Это из-за книжки, пожалуй, там особо такие аспекты не разъяснялись. Были по большей части длиннющие бойлерплейты на 50 строк, где автор одно за одним копировал значения текстбоксов в глобальные переменные. Это меня, кстати, тоже бесило.
Потом нашёл в киоске с пиратскими дисками подборку всех VB, от 1 до 6го, и почти сразу очень хорошую книгу Гарнаева. VB6 после VBA был волшебен. Наигравшись вдоволь с окнами, графикой, базами данных, самостоятельно открыв кучу паттернов, я полез на книжную полку, писал всяких Крамеров, ЧМки. Решал задачки наподобие подсчёта количества счастливых билетов, которые вылезали у меня в голове. Самой крутой вещью, наверное, был GameCheater, который прописывал через SendKeys по одному нажатию клавиши в игру чит. Интерфейс был отрисован во Flash'е, в коде использовалось полсотни апишек для красивых WinXP-стайловых полос прокрутки, короче свистелки и перделки процветали. Ну это самое крутое из того периода, если не считать перевод на VB6 Jakarta Regexp. Кода было нафигачено несколько мегабайт, часть я потерял, и потому уже точно не сосчитать. Без всякого бойлерплейта! Массивы, функции и структуры (а больше в VB почти ничего нет) я использовал по максимуму.
Даже своих друзей-одноклассников заинтересовал. Один начитался потом журналов Хакер и сейчас учится на защите информации в Москве, подрабатывая на веб-дизайне. Второму же не так повезло, он делал всякие автораны для СDшек коллекции мультиков про масяню, и сейчас учится в местной шараге.
Всё это было бы невозможно без нынче почти умершего
митуя. Когда мне начало казаться, что 99% аудитории тупее меня (школоло, секретарши со своими сраными макросами и тролли же), включая топовых юзеров, и срачи были особенно ожесточёнными, я познакомился с ребе
sharpc. А он был и до сих пор остаётся знатным и тонким троллем. Именно он (когда я был классе в 10м), будучи студентом ВМК МГУ, заставлял меня учить С++. Это удавалось почти никак, поскольку фигурные скобочки, точки с запятой и невразумительные += и ++ сильно противоречили моим понятиям о красоте. Да что там, до сих пор противоречат. Но требования к использованию WinAPI всё возрастали, большая часть примеров была на С++, и мне жутко захотелось заиметь свой собственный язык, который был бы похож на Бейсик, транслировался бы в С++, и был полон всяких странных придуманных мной возможностей. Их я до сих пор нахожу в разных языках, от Перла до Хаскелла. Где-то лежат диздоки, но доставать их лень. Может, когда буду олдфагом, опубликую. С тех пор в развитии идеи своего компилятора я уходил всё глубже. Впервые похожие (да что там, почти идентичные) идеи я встретил у nponeccop.
Один чувак подсунул работку на PHP, на достаточном для написания говносайтов уровне я его заботал где-то дня за два-три. Задача первая была ещё гадкая, сайт-опердень для какого-то финансового говна. Даже заказчик нихера не понимал, что ему нужно. Она тогда и стала последней, я проект доделал до логического завершения, отдал чуваку на доработку, а сам свалил и денег не потребовал.
Заразился от друга настроем кулхацкерства. Но так как рушить я не люблю, начал строить всякую жесть, которая непрерывно краулит по вебу, собирает всякую инфу, всё такое. Долбался с cURLом, регекспами, XPath и пр. калом. С появлением соцсетей, пока там ещё прайваси была не приоритетным направлением и не было паранойи, я почувствовал себя ну просто мегакруто. Можно было найти что угодно, о ком угодно. Свои соцсети даже были в нашей локалке провайдера, где я смог силами веб-паука и какой-то либы распознавания лиц (даже не помню уже) найти акки нескольких знакомых. Умиротворение и уверенность в себе из меня просто сочились. И это уже был первый курс.
Где-то тогда же, мне по долгу сессии пришлось заботать С++. Код я отправлял на рецензирование sharpc, он немедля отправлялся в одну из категорий, "говно" или "блядь, мои глаза". Регулярно получал от него всякие пинки в сторону ЧСВ. Метапрограммирование на шаблонах из его уст казалось такими недостижимыми вершинами технологии, что я серьёзно начал сомневаться, что когда-либо смогу это вообще понять.
Потом я завёл себе ЖЖ, и скачал SICP. Френдлента сформировалась быстро, здесь программисты образуют плотную такую клику. Читая ЖЖ и SICP я понимал всё сильнее: я дебил.
Понимаете ли, отдельный пост или даже комментарий nivanych, deniok, ivan-ghandi, thedeemon, diam-2003, nponeccop, thesz и других способен уничтожить мозги напрочь. В ЖЖ много людей, которые образованнее меня в разы, особенно в своей области (теоркате, ФП, трансляторах). По отдельности они демотивируют, а образуя френдленту кажутся чуваками с совершенно недостижимым уровнем развития. Ведь не упомнишь, кто и что написал.
SICP я за два месяца прорешал до того места, где начались quote и set!. Таки я чуял, потому что это действительно говно. Как и сама Scheme. Как и языки с S-expressions вообще.
Сейчас, спустя два с половиной года ботвы ФП, я понимаю, что это вам не какие-нибудь шаблончики. Haskell сильно повлиял на мои представления о том, что такое формализовать задачу. Теперь я просто не могу думать о многих концепциях иначе, чем будто бы это были ADT. Так как в первую очередь меня всегда интересовало "почему есть такая возможность", а не "как ей пользоваться", сейчас мне удалось понять, на кой нужны классы типов вообще, MonadPlus всякие в частности, что приблизительно творится внутри GHC, но это даже не приблизило меня к умению писать идиоматический код на Haskell. Мне _нужны_ нормальные массивы с нормальным синтаксисом, которые будут сохранять асимптотику операций, и меня блевать тянет от того, как это выглядит сейчас. Аналогично с эффектами. Особенно гадко то, что выделение памяти не считается эффектом. Вообще как-то очень многое не продумано и абсурдно, и это подтвердилось в обсуждениях в ЖЖ. Может, на LtU зарегаться? Там-то мне мозги и вправят. Или теоркат таки выучить...
На данный момент state of the art компилятора для меня это адова смесь ATS, Agda и DDC, интерпретируемая, на которой отрабатывает код юзера, код либы Ynot, перенесённой с Coq, лютая жесть на decision procedures и генератор бинарников. Причём без адекватной IDE это всё было бы в любом случае говном. И без стандартных либ на все случаи жизни это было бы говном, что требует human-assisted трансляторов с языков вроде С, С++, Java и Fortran.
Короче, глубину своего незнания я понял, а выбираться ещё очень долго.
И да, хаскелл похож на бейсик и кодогенерирует си-- внутри.