Представленный под катом текст — это попытка в художественной форме рассказать этапы своей программистской жизни. Местами разбавленное случаями из жизни, размышлениями вслух, настальгированием по прежним временам, это эссе в тоже время имеет своей целью поднять диалог с хабраюзерами, которые не прочь рассказать о своем пути разработчика и поделится своими мыслями по поводу истории развития средств и языков разработки.
Basic start или когда компьютеры были большими
Когда в пятом классе я попадал в кабинет информатики, это походило на посещение сокровенного места. Светлое помещение с дюжиной агатов, каждый из которых в комплекте с монитором весил больше чем я, пятиклассник, которые, будучи включенными все вместе, вызывали в моем детском сознании какие-то фантастические ассоциации. Комната напоминала то ли фантастическую лабораторию, то ли пункт управления космическими полетами. Клавиши, блоки, светящиеся мониторы — это было здорово.
И, конечно, первым языком, которому меня учили, был Basic. Признаться, знаний и воспоминаний от этого обучения осталось столько, что хватает только вспомнить какие-то обязательные нумерации строк и тот факт, что Basic был зашит в систему, и его приглашение в виде «?», собственно, являлось первым, что видел пользователь. Еще из той поры вспоминается повешенный позднее рекламный плакат советского компьютера «Микроша», который гораздо позднее в одном из российских журналов назовут рахитичным.
Славное это было время, когда учитель пытался всунуть в нас какие-то программы, рисующие графики, а мы рвались к играм, которых больше нигде не могли пощупать, потому что тогда из электронных игр был только советский аналог Game & Watch и даже про «денди» тогда еще не знали. А самым большим шиком считалось владение спектрумом (он же синклер), который под шум магнитофона грузил цветные игры. На те игры сейчас ни один здоровый человек не стал бы смотреть, но тогда это было здорово, даже очень.
EC-1841 или о вреде мониторов
Позднее в моей жизни появился Pascal — язык, который, притягивал своей простотой и дружелюбием. Как и когда состоялся первый контакт, я уже не помню. Вполне возможно, что это было у друга, который разжился супер-компьютером 486DX с 4 мегабайтами памяти, но, скорее всего, контакт произошел на уроках УПК, на которых мы, используя советские компьютеры EC-1841, постигали азы паскаля. EC-1841 обладал аж двумя системными блоками! Но зато у него была мышь размером с кирипич, подключенная к блоку толстенным армированным кабелем, драйвер которой звался «колобок», на нем запускался Star Control и Death Track, а еще мегаигра «Коммерсант», первая российская игра, в которую я играл. Это чудо советского компьютеростроения содержало в себе аналог процессора i8086 с 4.77Mhz и поставлялось с монохромным дисплеем.
Я вообще с улыбкой отношусь к порой истеричным спорам и крикам о вреде мониторов. Неведомо сколько просидел я за советскими мониторами, проглядел в эти чернобелые экраны с CGA-графикой. Да и позже мониторы были нисколько не лучше, те же 60 герц, только палитра менялась от CGA до SVGA. И вот прошло больше десятка лет, я давно уже провожу перед монитором по 8 часов в день, и до сих пор мое зрение ничуть не ослабло, все такое же 100%, как и было в далеком детстве.
Итак, после невнятного бейсика, который не оставил в моей душе ничего кроме понятий о циклах, условиях и переменных, в моей жизни появился паскаль. Надо сказать, подсел я тогда на него крепко, процедуры функции, циклы с пред- и постусловиями — все это вдохновляло, заставляло эксперементировать. Многие сейчас этого не поймут, но тогда источником информации были только пара книг, да учитель. Не было ни интернета, ни тем более wiki, не было форумов и торрентов, с которых можно стянуть любую книгу. В те непростые времена, когда страна разваливалась, поход в книжный магазин походил на охоту, были известны основные книжные точки, был намечен оптимальный маршрут, каждая точка тщательно обыскивалась на предмет новой литературы. Это сейчас в книжных полки завалены пособиями разной степени толщины. А в то время книжные магазины были наполовину комиссионными. Иной раз в руки попадались толковые книги, одной из них стала Borland Pascal 7.0, автора которой я сейчас не вспомню. Эта книга открыла для меня ООП и надолго стала главной.
Никлаус Вирт — бог
Что и говорить, паскаль в России для многих стал отправной точкой. Да и сейчас, наверное, учат если не на нем, то но его наследнике Delphi. Язык, прямо скажем, хороший. Да, он не такой строгий, как C, и, наверное, не такой эффективный. Когда я постигал паскаль, я, конечно, уже знал о существовании языка С, и мне досмерти хотелось научится писать на нем. Но, как я уже сказал, с литературой было плохо, желание не сразу нашло воплощение.
В это время я заимел компьютер, который купил у друга, все тот же 486DX-33 c HDD на 340 мегабайт. Вскоре в моей жизни появились BBS, эдакие архаичные узлы, которые связывали людей не хуже того, как связывает людей сейчас ICQ. В то время уже достаточно широко распространились модемы, каждый мог найти и выкупить с рук какой-никакой, но модем. Мой первый, например, был безымянный модем на 2400 бод. Вот скажите мне, кто-нибудь сейчас будет работать на скорости 2400 бод? А тогда такой модем был окном в сеть. У друга был аппарат получше, на 14400 бод, и все поголовно мечтали о внешнем U.S.Robotics Courier на 28800, который стоил тогда каких-то совершено бешенных денег.
BBS познакомили меня со многими людьми, я узнал про FidoNet, у меня появилась наконец электронная документация, в общем, средств для развития стало не в пример больше. Я открыл для себя железную начинку компьютера, буфер видеопамяти, и долгое время паскаль стал для меня средством экспериментов по работе с железом. Параллельно, постигая премудрости Object Pascal, я узнавал принципы ООП. Трудно поверить, но чтобы понять смысл виртуальных функций, я потратил несоклько дней, мне одному с большим трудом, один на один с книгой, удалось понять принцип полиморфизма. И это открытие перевернуло сознание. Целыми днями я что-то крутил-вертел в паскале, писал простейшие вещи, создавал какие-то библиотеки. То было интересное время, время, когда с каждым успехом меня переполняла гордость — «я понял это сам!». Напомню, что в то время только-только появился Windows 3.1, и программирование велось только под DOS.
Что касается языка С и его противопоставления паскалю, то занять позицию с положительной оценкой последнего мне на всю жизнь помогла статья создателя языка — Никлауса Вирта, в которой он высказывал тезисы в защиту своего языка и дальнейшего его развития в виде языка Modula-2. Та статья, как сейчас помню, открыла для меня целый пласт людей — мега-разработчиков, которые витают где-то там и делают поразительные вещи вроде новых языков. Во многом из-за этих воспоминаний даже сейчас, когда я уже давно не пишу ни на паскале, ни в Delphi, я все равно с симпатией отношусь к этому языку.
Ассемблер, си, си с классами, си-- или лучшие времена
С появлением модема и сети в форме Fido мои устремления в программировании получили дополнительный импульс. Узнавалось многое, новые знания появлялись очень часто и помногу. Связано это, наверное еще и с бурным ростом как прикладного программного обеспечения, так и системного. Вышел Windows 95, вирусы, которые ранее были просто головной болью теперь таили реальную угрозу (CIH), а все мое внимание завоевала система и соответственно системное программирование. Возможности паскаля были исчерпаны, хотелось залезть в систему еще глубже, чем просто порты и память.
Примерно в это же время мной была приобретена книга за авторством Березин Б. И., Березин С. Б «С и С++», в интернете даже сейчас полно ссылок на этих авторов, должно быть выпускают книги до сих пор. Книга эта кстати, до сих пор стоит у меня дома на полке и когда я ее замечаю сразу же наполняюсь разными воспоминаниями.
Сначала, я, конечно, начал изучать С. Имея какой-никакой, а опыт я жадно впивался в язык. Компания Borland и тут помогла выпустив прекрасный продукт Borland C++ 3.1, который выглядел так же как и Borland Pascal, но содержал в себе более мощный язык. Эмоций и впечатлений было много, информационный поток был достаточно сильным, недостатка в документации я не испытывал и то были самые лучшие времена. В моем компьютере завелись Керниган с Ричи и Страуструп, которые встали в моем личном пантеоне богов в один ряд с Виртом.
Вообще языки си и си++ (который, не многие знают, называется еще «си с классами»), конечно, покорили меня своей строгостью, тем что они не прощали то, что сейчас зовут быдло-кодингом. Забыл вызвать деструктор? Жди беды. Накосячил с указателями — жди беды. Подсказок ни от компилятора ни от линковщика почти не было, то были спартанские условия, наверное самые лучшие для закалки характера.
В то время, программируя на си, невозможно было не знать об ассемблере. tasm/tlink, masm, nasm — таинственные программы, которые стали привлекать мое внимание тогда, когда я скачал первый мануал по процессору i8086. Ассемблер вообще казался и кажется мне до сих пор лучшим языком программирования. И дело тут не в том, что это по сути нативный язык процессора, следовательно компьютера. Нет, язык ассемблера еще суровее чем си и си++. Привычки, которые прививал во мне ассемблер остались до сих пор. Все эти экономии пары тактов или десятка байт, оптимизации циклов, заучивание списка комманд, насколько я помню, одних операторов перехода в ассемблере больше десятка. Ассемблер — как головоломка для ума, это инструмент настоящих поэтов от программирования. Увиденные в то время первый примеры демо-сцены поражали воображение. В 4 килобайта, а порой и в 256 байт мастера-программисты ассемблера вмещали целые визуальные динамические сцены, порой с музыкальным оформлением. Я вообще думаю, что те кто пишет на асме кроссворды не разгадывают. Божественная сила ассемблера в то время под сомнение мной не ставилась. Знакомые старше меня работающие программистами на ассемблере вызывали восхищение.
Первыми ласточками моего пера на ассемблере стали резидентные программы под DOS. То были всякие мелочи и приколы, которые призваны были в основном продемонстрировать друзьям свои познания и возможности в программировании. Создание резидентных программ требовало тогда немалого умения и обширных знаний. Нюансов было много, следовало знать не только как работает система, но и как устроено железо, что такое таблица прерываний, какие могут быть подводные камни. Сейчас многозадачность воспринимается как нечто нормальное, а в то время, большинство компьютеров еще не работали под windows95 и практически везде стоял DOS 6.22.
То время запомнилось мне как самое полезное, как самое продуктивное. Я гонялся по городу за каким-то особыми компиляторами, даже сейчас я помню с каким энтузиазмом бежал с винтом к людям у которых обнаружился Watcom C++. Еще одним интересным продуктом который мне запомнился о том времени был C--. Этот авторский продукт являл собой облегченный С-подобный язык, который больше походил на ассемблер. Этакий гибрид C и асма. Проект до наших времен не дожил, но в тот момент интерес к нему у меня был сильным.
Первая работа или как Delphi заборол C++
На первую работу я устроился в 17 лет. Тогда я поступил в институт и параллельно стал работать в конторе, которую держали сотрудники вуза. Сейчас смешно, но тогда от первой работы я даже денег не ждал. А платили, надо сказать, очень мало, в стране стоял полный бардак и развал. Первая работа пришлась мне по-вкусу: тут и работа с телеметрией, опрос портов компьютера, знакомый с++. Об одном только не хватало знаний, о Turbo Vision, мега-библиотеки от Borland на которой делалось очень много программ. Эта библиотека предназначалась для формирования пользовательского интерфейса под DOS, она была полностью объектно-ориентированной и заставляла писать просто неимоверно много кода для формирования привычного сейчас всем интерфейса с кнопочками, чекбоксами и прочим.
Всем программистам знакомы ощущения копания в чужом коде. Тут море эмоций: где замечаешь ошибки, там ты материшься на создателя кода, где видишь новые для себя решения, начинаешь его уважать. Часто все это бывает в одном флаконе. Как водится на работе никакой документации мне никто не оставил, да ее и не было. Все пришлось разбирать самому, благо дебаггер я в то время освоил основательно.
Время шло, технологии развивались бешенными темпами, все больше софта писалось под Windows. А программирование под windows было совершенно новым делом. Тут и другая философия и архитектура, старое мышление приходилось вырывать просто под корень. Из-за работы и учебы я не сильно развивал навыки программирования под windows, меня отпугивали сообщения, потоки, WinAPI, который следовало знать. Десятки констант и макросов Visual C++ от микрософта надолго отпугнули меня от программирования под windows. Да, не легко было бросить такой родной дос, в котором все так ясно и понятно.
Но время шло, windows окружал со всех сторон, памяти под досом уже не хватало, становилось ясно что пора развиваться. В это время очень вовремя появилась, как я считаю инновационая, Delphi. Delphi 3 обладала многими достоинствами: на ней можно было писать программы под windows, она использовала хорошо известный язык object pascal, она была RAD-средой и полностью оправдывала этот термин. Программы на делфи писались за минуты, не было проблем с winapi, который делфи полностью оборачивал в свою библиотеку VCL. Не было проблем с GUI, казалось делфи — лучшее что может быть, особенно после Visual C++, в котором от слова «visual» ничего не было.
С приходом windows однозначно стало ясно, что между мной и компьютером появился еще один слой, дотянуться до системы теперь стало сложнее, да и не так это было необходимо. Копание в системе сменилось копанием с формами, кнопочками, менюшками. И перевод рабочей системы с Borland C++ на Borland Delphi казался очевидным. Но работа так просто не сдавалась, постоянно приходилось накручивать на старый проект новые фичи и времени на разработку новой версии не было. Тем временем Delphi росла в версиях: 4, 5, 5.5…
конец первой части, завершение истории о com-объектах, базах данных, интернете и с# будет во второй части