Это вторая и заключительная часть. Рекомендую ознакомится с началом, чтобы не потерять нить повествования.
Первая часть эссе рассказывала о давних временах, о вещах, которых уже нет или таких, которые забыты. Многое из этого знакомо не только мне и многочисленные комментарии тому подтверждение. Однако, в заключительной части речь пойдет о другом, о вещах которые для многих программистов являются повседневными. Это часть эссе будет отличаться от начала и это отличие будет заключаться в том, что я расскажу свою историю того, как наше настоящее для меня произошло из будущего. В этой части эссе прошлое уступает место настоящему.
Дельфийская эпоха, com, dcom, com+ и СУБД
Тем временем Delphi росла в версиях: 4, 5, 5.5… Вообще, именно благодаря делфи я познакомился с работой с базами данных. Тогда вместе с делфи шла такая замечательная штука как Borland Database Engine (BDE), которая позволяла работать со многими базами данных. Первыми моими хранилищами данных, конечно были dbf-файлы и файлы access. На то время — это было более чем достаточно. Работа в основном представляла собой проект который не предполагал сетевого хранения базы данных и подключения множества клиентов. Но настоящим открытием стал Interbase, настоящая СУБД с сервером, с транзакциями, с такими замечательными вещами как триггеры. Мало того, interbase заставлял думать более распределенно, знакомство с ним как был говорило: «пара выходить в сеть, пора распределять ресурсы».
К тому времени в моду вошла трехуровневая парадигма программирования: сервер баз данных, сервер приложения и тонкий клиент. Постигать все это было очень интересно. Параллельно мое внимание привлекли технологии микрософта COM и DCOM. Делфи располагала к программированию com-серверов, делфи в то время вообще была очень дружелюбна, она как бы предугадывала ваше желание и подсовывала то мастер, то какой-то готовый шаблон. От этого сильно страдало понимание азов технологии, зато сильно экономило время. Признаюсь COM и DCOM остались для меня незаконченным для усвоения материалом, я так и не разобрался кардинально в этих техниках, хотя и писал для себя рабочие программы с их использованием. Вскоре микрософт выдала на гору новую технику COM+, которая еще больше запутала меня и, откровенно говоря, оттолкнула.
Вместе со всем прочим я, на некоторое, время «заболел» отладчиками и reverse engineering в виде копания в чужом коде с использованием дизассемблера IDA Pro и суперотладчика SoftIce. Эти инструменты были настолько мощными, что полностью возвращали власть над системой, которая несколько уменьшилась в windows. Softice, к примеру, загружался еще до windows и таким образом просто не давал себя обнаружить и перехватывал все что только можно. Не знаю как дела обстоят сейчас, но тогда это позволяло прервать работу windows в любой момент и начать отлаживать текущий процесс. Признаюсь, первыми жертвами экспериментов с этим дебагером стали игры с простейшей защитой, взлом которых заключался в простой замене условного перехода типа jnz на безусловный jmp. Очень жаль, что толковая документация от Криса Касперски появилась только после того, как я наигрался с этими инструментами. Возможно наша с reverse engineering любовь могла продлиться дольше.
Время шло и наш проект наконец-то был переведен на рельсы win32 платформы. К тому времени делфи достигла шестой версии. Это был 2001 или 2002 год. Borland выпустила так же Kylix для программирования под linux, не знаю жив ли он сейчас. Вообще, кажется именно шестая версия делфи стала для меня канонической, да и не только для меня, я знаю много людей, которые до сих пор пишут по мере надобности программы именно на шестой версии.
Вскоре после перевода проекта я сменил работу. Новое место работы было финансовым учреждением, сравнимым с банковским. И многие программисты, работавшие в банках, согласятся со мной в том, что о работе в таких учреждениях можно писать отдельные книги. Этот этап в жизни начисто отбил у меня охоту работать в респектабельных огромных конторах. Новая работа помогла мне закрепить знания SQL, именно тогда я понял ценность триггеров, именно тогда узнал про блокировки таблиц, про права и про откаты транзакций. Кстати, многие ли разработчики SQL знают почему его называют «сиквелом»? А между тем это интересно, потому что изначально SQL назывался SEQUEL (Structured English Query Language).
C interbase связано еще одно приятное воспоминание: IBExpert. IBExpert — это сторонняя разработка, которая похоже жива до сих пор, для полного администрирования СУБД Interbase и его братьев Firebird и Yaffil. Более продуманной, полной и навороченной тулзы для работы с СУБД я не видел ни до ни после этого. IBExpert содержал все что только можно придумать, но основным его достоинством для меня был дебаггер SQL-кода с возможностью пошаговой отладки, вещь которую я больше нигде не встречал.
Вход через XML или как я попал в паутину
Все хорошее когда-нибудь кончается и наше с финансовым учреждением сотрудничество закончилось. С этим закончилась и моя делфи-эпоха. Следующим местом работы стала крупная контора разработчиков, где порядка 50 программистов работали над одним проектом. Вся прелесть новой работы заключалась в том, что проект был intranet-ориентированный, клиентом являлся браузер и разрабатывать приходилось в основном html-страницы, которые генерировались средствами xml/xslt. Это, на минуточку, 2002 год. Сейчас это обычное дело, но тогда лично для меня явилось откровением. В очередной раз я с энтузиазмом начал вникать в новые для себя технологии, которые еще дальше, очень далеко, уводили меня от системы и компьютерных потрохов.
Между прочим, начало эпохи web я как-то пропустил. В то время вокруг меня была такая обстановка, что тратить время на изучение web было просто бессмысленным. «Ну, кому скажите, нужен этот web, если у людей не то что интернета, даже компьютеров нет» — думал тогда я. Нет, конечно, какие-то вещи я узнавал. Были приобретены книги по HTML и javascript, но всерьез я их не воспринимал — так, необычное развлечение.
И вот только моя новая работа показала мне что могут дать web-технологии в прикладном плане. Проект в котором я участвовал представлял собой глобальную государственную систему с множеством подсистем, несколькими уровнями и самое главное с одним на все клиентом в виде internet explorer. Вот тогда-то до меня и стали доходить перспективы как веба так и всех его технологий. Очередное озарение заставило плотно изучать html/xml/xslt/xpath. CSS и javascript в то время меня интересовали меньше, первый из-за того, что формы проекта в основном были простейшими в плане дизайна и не требовали особой разметки, да и основная нагрузка ложилась на activex элементы вроде специальных таблиц. Javascript хоть и использовался но его использование так же сводилось в основном к созданию элемента activeX, да вызове его методов.
Еще одним инструментом который стал для меня важным в жизни — MS SQL Server. В то время актуальной была 2000-версия. Мои sql познания пополнились знанием tsql, процедурами и функциями, написание скриптов, курсорами и представлениями. Кстати, с базами данных связана в ту пору интересная история. Наш мега-заказчик по инициативе одного человека, похожей на диверсию, потребовал перевода проекта с MS SQL на Informix. Вот скажите мне, кто в здравом уме будет такое делать на огромном всегосударственном проекте? Однако, работа есть работа и наши системщики модернизировав сервер приложений, через который шли запросы, выдали на гора некий усредненный вариант спецификации языка sql, котрого требовалось придерживаться. Различий с informix было очень много. Тут и требование писать inner join вместо join и требование писать AS, там где mssql разрешал его опускать и много еще по мелочи вещей, сейчас все и не упомнишь. Ситуация с переводом была идиотская, но зато запомнилась надолго.
Кстати, на прошедшей в этом году конференции TechNet, на которой были представлены продукты MS SQL Server 2008, VS.Net 2008 и Windows Server 2008 мне удалось поймать одного из команды разработчиков SQL Server и задать вопрос, который давно меня беспокоил: «посмотрите на три надписи о трех продуктах компании, что в них необычного по отношению к SQL Server?». Парень (а это был молодой парень) ни секунды не думая ответил: «логотип». И добавил: «наша команда решила, что нам не нужен логотип, наш сервер в этом не нуждается, его знают и без логотипа».
В этой конторе я проработал около года или чуть больше. И считаю что это место работы было лучшим в моей жизни. Специализация конторы на софт, основной состав программисты, небольшой размер, дружный коллектив, серьезный проект, достаточно на тот период продвинутые технологии, серьезный штат специалистов, в котором работало много очень грамотных людей. То была самая высокая концентрация программерской мысли на один квадратный метр. И это было здорово. Ни в финансовом учреждении, ни в технологических конторах, ни в госучреждениях, ни у частника — я больше нигде не чувствовал такой классной атмосферы как тогда. Ушел я оттуда только из-за того, что переехал в другой город.
Новый си или долгожданная точка
О выходе .NET я знал заранее, в том смысле, что после того, как узнал об этой новой инициативе Микрософт я пристально следил за его судьбой. К сожалению до меня не дошли бета версии продукта и свое знакомство с платформой я начал прямо с релиза Visual Studio.net. Ожиданий была масса: тут и решение проблемы "dll hell", и новый язык C# с автоматическим сбором мусора и новая архитектура сборок, которая предполагала кардинальное улучшение по сравнению с com-объектами и объединенная в один инструмент студия, и asp.net, и ado.net. В общем, нововведения ожидались революционные.
Студия не обманула ожиданий, все для меня казалось настолько крутым, что у меня в очередной раз произошел приступ энтузиазма и я начал поиск и изучение всех возможных мануалов, книг и другой документации. Главным из таких источников, конечно, являлась (и является до сих пор) документация MSDN. Так как в то время я был занят разработкой в web-среде, то первое, чем я занялся в новой студии был asp.net. По правде говоря, от того яркого впечатления от продукта сейчас осталось на две трети меньше, а то и больше. Сейчас я явно вижу все минусы этой платформы, порой жирные, и у меня к asp.net множество личных претензий.
Тем не менее, asp.net первой версии меня ошеломил своим дружелюбием. Все что раньше нужно было делать руками здесь делалось само собой. Раздельный код, по сравнению со скриптами asp казался просто манной небесной. Framework поражал своей обширностью. ViewState, который тогда я воспринял на ура, казался мне чудесным откровением. В общем, эйфория от новой платформы была полная, наверное, знакомое многим ощущение. Сказалась новизна, желание разобраться первым, быть на пике программерской мысли. Вообще, сейчас мне кажется, что если бы не тот выход .net я бы оказался в стане java-программистов, потому что давно поглядывал в сторону Java и даже ставил у себя какие-то средства разработки и ковырял исходники с примерами.
Но сложилось так как сложилось и меня переманил .net. Первым проектом, который я написал на .net был intranet-база фильмов которые лежали на расшаренных ресурсах в нашей компании. Отдельный софт обходил все шары, набивал xml-файл, который затем импортировался в бд моего проекта. Проект был совершенно простой, как и все первые проекты жутко неоптимизированный, зато полностью на .net. Этот проект дал мне многое: закрепил прочтенные из документации сведения по языку и платформе, дал навыки работы в среде разработки, проявил подводные камни при программировании на C# и собственно asp.net.
Время шло, .net менялся, взрослел, появился .net framework 2.0, а с ним и C# 2.0, значительно улучшенный, который принес обобщения, то чего так не хватало. Да, это были не шаблоны C++, но и у generics были свои плюсы. Еще добавились такие классические сейчас вещи как master pages, data controls, SqlDataSource. К сожалению, тогдашнее новое место работы не способствовало моему росту программиста и все что я делал в тот период было собственной инициативой. Но все же мне удалось написать два проекта для учреждения: официальный веб-сайт и специфический функциональный сайт. Создание первого познакомило меня с фреймворком DotNetNuke.
DotNetNuke — это такой свободно распространяемый фреймворк, создание которого, вроде бы, спонсировала Микрософт. DNN предназначен для быстрого создания сайтов, в основном среднего и энтерпрайз уровня. По моем меркам это очень навороченная система, с кучей возможностей, активно развивающаяся, и к тому же написанная на .net. Работа с DNN с одной стороны доставила удовольствие тем, что все нужные компоненты сайта были уже готовы и от создателя требовалось только расставить их в нужно порядке, сделать интерфейсу какой-никакой дизайн и подключив нужные плагины запустить проект в сеть. С другой же стороны, отсутствие какой-либо необходимости в программировании уменьшало ценность работы, накопленный опыт по сути был мизерным и практическую пользу от всех своих телодвижений я оценивал как очень низкую. В этом проекте основную пользу я вынес из противоречия: чем легче, тем менее полезно. В будущем, я старался остерегаться легких путей, пытаясь решать проблемы от корня до конца самостоятельно.
Хабрахабр наших дней или дороги хватит на всех
Остальная часть рассказа представляет собой настоящее или недалекое прошлое. События в жизни переплелись с жизненным процессом моей рабочей платформы .net и подавшись во фриланс я встретил очередную важную для меня версию .net 3.5 в работе над новым проектом. Контора на которую я фрилансил вскоре переманила меня на полную ставку и я, после длительного перерыва, занялся тем, что мне действительно нравилось.
Где-то в этот момент я в первый раз попал на Хабрахабр. Я уже довольно уверенно применял ajax.net, создавал web-сервисы, вовсю использовал LINQ. Но новый ресурс открыл для меня бездну нового. Во первых, надо сказать о моих текущих впечатлениях о Хабре. Изначально я считал и считаю до сих пор этот ресурс яркой лампой в ночи, концентрированной кислотой и бесконечной энциклопедией. Хабр для меня — это идеальное воплощение идеи web 2.0 о создании и самоорганизации сообщества единомышленников в наше время. Правда, как и любое сообщество, оно не лишено недостатков, но все разногласия только придает ресурсу живости и вызывают дополнительные импульсы для движения внутри.
Сначала я только изучал Хабр как анонимный читатель. Меня бесконечно радовали (и радуют до сих пор!) оригинальные, авторские статьи, которые обычно несут массу полезного. Знаете, за статьи гораздо ниже уровнем иные люди зарабатывают в печатных изданиях приличные деньги. А тут все даром и, главное, практически всегда от души. Достаточно сказать, что именно такие статьи именно на Хабре сильно подвинули мои знания в javascript и css. Такие статьи подвигли меня на изучение jQuery — инструмента, без которого я ныне просто не смыслю свою работу. Эти статьи познакомили меня с языком erlang и его философией, и это знакомство заставило по-другому взглянуть на программирование.
Но однажды мой нынешний френд fotokaif создал блог .NET, которого так не хватало и я решил — пора. Регистрация, первые посты — прошло всего то 5 месяцев, но за этот короткий период я постарался в меру своих сил поделится своими знаниями, интересными новостями. Мои посты на Хабре, как отражение моих предпочтений, в основном представлены в блоге .net. И не так давно я представил проект Хабраредактор, который представляет мое видение редактора для написания статей на Хабре.
Хабраредактор — это компиляция того, что я получил от Хабра за время моего знакомства с ним. Тут и unobtrusive Javascript и мои познания в css и jquery и блочная верстка, на которую лично я перешел только после знакомства с Хабром. Конечно, я уверен, что Хабраредактор — не совершенен, но для меня он, в первую очередь, то самое что я смог получить от Хабра.
Еще одно достоинство Хабрахабра — его многополярность. PHP соседствует с .NET и никто из них не мешает обсуждению Java-вопросов. Одновременно на ленте могут быть топики о js, css, вопросах блочной верстки или очередные холивары о скорости браузеров. По-существу, такое положение дел огромный плюс ресурса и я бы хотел обратится ко всем: «камрады, поймите, дороги хватит на всех». Как и множество людей существует и множество технологий, которые создает множество разработчиков. Все эти множества пересекаются так, что порой не бывает двух одинаковых программистов или дизайнеров, которые были бы одинаково увлечены одинаковыми инструментами. У нас общая дорога, но он широкая и ее хватит на всех.
Что осталось за бортом
За бортом эссе остались:
- защищенный режим DOS, который я не изучил в начале по причине малого количества документации, а когда появилась flat-модель по причине занятости другими вещами;
- Builder C++, который я ковырял и даже что-то писал на нем;
- разработка под Windows Mobile, все мои достижения которой заключены в написании англо-русского словаря для Windows Mobile smartphone edition 2003;
- Java, J2EE и все остальное, что касается java, по причине того, что меня вовремя переманила .net;
- cgi, php, python, ruby, perl, linux/apache/mysql, mac/mac os/safari и многое другое по причине того, что мне никогда не приходилось с ними сталкиваться.
No speed limit или вместо заключения
Таков в кратком изложении мой путь. И, я уверен, он далеко еще не закончен. Будет новое время, будут новые технологии, которые так же смогу взбудоражить воображение и заставить с интересом вникать в новые термины, техники, приемы. Желаю всем читателям, которые смогли дочитать до этой строки развития с беспредельной скоростью, поглощения нового, постоянного роста, постоянного интереса, постоянной жажды знаний.