Подборка полезных публикаций для веб-мастеров и заказчиков

Карьера программиста. Глава 2. Школа или самообразование

На дворе стоял 2001 год. Год в который вышла крутейшая операционка — Windows XP. Когда появился rsdn.ru. Год рождения C# и .NET Framework. Первый год тысячелетия. И год экспоненциального роста мощностей нового железа: Pentium IV, 256 mb ram.

Закончив 9-ый класс и видя мой неиссякаемый энтузиазм в программировании, родители приняли решение перевести меня в колледж на специальность «Программирование». Они считали, что так будет лучше и там-то меня научат. Слово колледж к слову, мало подходило к этому заведению, на окраине промышленного городка. Это был обычный техникум, ничем не выделяющихся среди других техникумов, которые не повесили на свой фасад лейбу с модным словом «колледж».
Что ж. Родителям я не перечил и решение их не оспаривал. В любом случае я занимался самообразованием, и подумал что в этом новом месте мне дадут еще какие-то дополнительные знания.

Тем летом, перед поступлением в колледж, я основательно занялся изучением всех возможных технологий, которые публиковались в журнале «Хакер». Я зачитывал и перечитывал его до дыр. Особенно мне нравились интервью с реальными хакерами и их советы.

Большая часть крутых хакеров сидело на «Линухе». А «маздай» (Windows) — был для ламеров. Кто читал журнал, тот помнит стилистику постов в нем. Поэтому в моем неокрепшем уме боролись между собой две идеи — оставлять Windows или быть крутым и сидеть чисто на Линуксе.
Каждый новый выпуск журнала Хакер, кидал мне новый повод для форматирования диска и установки то Linux Red Hat 7, то Windows Me. Разумеется никакого вектора обучения у меня не было, и то что я вычитывал в журналах или на пиратских CD вроде «Секреты Хакеров», то и делал. Установка двух ОС параллельно тоже стиралась, после нового вброса в духе «Windows XP aka попугай — это для домохозяек. А если хочешь заниматься серьезными вещами, то должен работать из консоли Линуха с закрытыми глазами». Разумеется, я хотел заниматься хакингом систем, понимать как устроена сеть и быть всемогущим Анонимусом в то время.

Диск форматировался без доли сожаления, и на него ставился дистрибутив Unix-подобной системы. Да, да. Однажды я прочитал интервью реального хакера, который использует только FreeBSD 4.3 из консоли. При этом за ним числились взломы банков и государственных систем. Это был удар молнии в голову, и я раз 5 ставил BSD ОС, как основную систему. Проблема была в том, что после установки, кроме голой консоли там ничего не было. Даже звука. И чтобы поставить KDE2 и включить звук, нужно было немало потанцевать с бубном, и поправить несколько конфигов.


Дистрибутив FreeBSD 4.3 — самая хакерская ОС
 

О литературе


Как только у меня появился компьютер, я начал покупать книжки по программированию. Первой была руководство по «Turbo Pascal 7.0». Это и не мудрено, ведь Паскаль я уже немного знал из курсов программирования, и можно было продолжать обучение самостоятельно. Проблема была в том, что Хакеры не пишут на Паскале. Тогда в моде был язык Perl, либо, для более крутых ребят — это был С/С++. По крайней мере так писали в журнале. И первой прочитанной до конца книгой была «Язык программирования Си» — Кернигана и Ритчи. К слову, учился я в среде Linux
и использовал gcc и встроенный редактор KDE для написания кода.

Следом за этой книгой, была куплена «Энциклопедия UNIX». Весила она килограмма 3 и была напечатана на страницах формата А3.

На лицевой стороне книги во весь рост был изображен мультяшный дъявол с вилами, а стоила она тогда в Украине 125 гривен (это примерно 25$ в 2001-ом). Чтобы купить книгу, я попросил взаймы денег у школьного друга, остальное добавили родители. Затем, я с упоением стал изучать команды Unix, редактор vim и emacs, структуру файловой системы и внутренности конфиг файлов. Без малого 700 страниц энциклопедии были проглочены и я стал на шаг ближе к мечте — стать кул-Хацкером.


Энциклопедия UNIX — Одна из первых прочитанных книг

Все деньги, которые давали мне любящие дедушка с бабушкой и родители я тратил на книги. Следующей книгой была «С++ за 21 день». Название было очень притягательным, и поэтому я не смотрел на другие книги, более высокого качества. Несмотря на это, все исходники были переписаны из книги примерно за этот срок в 3 недели, и уже кое-что в С++ я понимал. Хотя скорее больше не понимал из того что написано в этих листингах. Но прогресс был.

Если бы у меня спросили, какая книга больше всего повлияла на твою карьеру, я бы не задумываясь ответил — «Искусство Программирования» — Д. Кнут. Это была перепрошивка мозга. Я не могу точно рассказать, как именно эта книга попала мне в руки, но она произвела самое сильное влияние на мою дальнейшую карьеру.


Искусство Программирования — must read

Книги я покупал в основном на радиорынке, который работал только по воскресеньям. Сэкономив на завтраках очередные несколько десятков гривен, я отправился за новой книгой по С++ или может Perl. Выбор был достаточно большой, но наставника у меня не было, поэтому изучалось все подряд. Я попросил продавца, порекомендовать мне что-нибудь по программированию. И насколько я помню, он достал с полки «Искусство Программирования. Первый Том». Книга явно была уже пользованная. Уголки обложки были согнуты, а с задней стороны виднелась большая царапина, как раз в том месте где оставил свой отзыв Билл Гейтс: «Если вы прочитаете эту книгу, вам непременно стоит прислать мне резюме» было подписано им. Про Гейтса я знал из журналов, и подумал, что было бы неплохо отправить ему резюме, хоть его и хаяли все Хакеры. Книга стоила 72 грн. (15$), и я стремительно рванул домой на трамвае изучать новый материал.

Насколько глубокие и базовые вещи я читал, разумеется я не мог понимать в 15 лет. Но старательно пытался выполнить каждое упражнение. Однажды у меня даже получилось правильно решить задачу с оценкой сложности 25 или 30. Это была глава про математическую индукцию. Хоть школьную математику я не любил и схватывал плохо, но над мат. анализом Кнута — я просиживал часами.

Далее, во второй главе шли структуры данных. Эти образы и картинки связных списков, бинарных деревьев, стеков и очередей до сих у меня перед глазами. За 12 лет карьеры в коммерческой разработке, я использовал большинство языков общего назначения.

Это C/C++, C#, Java, Python, JavaScript, Delphi. И как бы не назывался язык, в его стандартной библиотеке были структуры данных и алгоритмы описанные Дональдом Кнутом в своем трехтомнике. Поэтому изучить, что-то новое — не занимает много времени.

Первый том был проглочен достаточно быстро. Приведенные в книге Кнута алгоритмы, я переписывал на язык С. Не всегда получалось, но чем больше я практиковался, тем бóльшая ясность приходила. Усердия было не занимать. Закончив с первым томом, я не задумываясь побежал покупать второй и третий. Второй я пока отложил в сторону, а вот за третий (Сортировка и Поиск), взялся основательно.

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

Кнут читался везде. И даже отправившись на море, не имея рядом ПК, я все равно прописывал алгоритмы в тетрадке и прогонял последовательности чисел через них. До сих пор помню, скольких мучений мне стоило освоить пирамидальную сортировку, но оно того стоило.

Следующей книгой, которая оказался на меня сильное влияние была «Книга Дракона». Она же «Компиляторы: Принципы, технологии, инструменты» — А.Ахо, Р.Сети. Ей предшествовал Герберт Шилтд, с продвинутыми задачами на С++. Именно в этом месте точки сошли воедино.
Благодяря Шилдту, я научился писать парсеры и интерпретаторы языков. А следом, Книга Дракона, натолкнула меня на написание собственного компилятора С++.


Книга Дракона

К тому времени, мне провели модемный скрежещущий интернет, и я много времени проводил на самом популярном сайте для программистов — rsdn.ru. Там господствовал С++ и каждый профи, мог ответить на вопросы, которые я был не в силах осилить. Это меня задевало, и я понимал,
что мне далеко до этих бородатых дядек, поэтому нужно изучить внутренности плюсов «От и До». Такая мотивация, привела меня к первому серьезному проекту — собственному компилятору С++ стандарта 1998 года. Более подробную историю и исходники вы можете найти в этом посте.
 

Школа или самообразование


Но вернемся к реальности за пределами IDE. Хотя, к тому времени, я все больше отдалялся от реальной жизни и погружался в виртуальную, все таки возраст и общепринятые нормы вынуждали ходить меня в колледж. Это было настоящей пыткой. Я совершенно не понимал, что делаю в этом заведении и зачем слушаю эту информацию. В моей голове были совершенно другие приоритеты. Изучение Visual Studio 6.0, попытки с WinApi и Delphi 6.

Замечательный сайт firststeps.ru, который позволял радоваться каждому выполненному шажку, хотя общей картины я не понимал. Например в той же технологии MFC или ActiveX.

А что в колледже? Это была пустая трата времени. Вообще, если затрагивать тему учебы — учился я плохо. До 6 класса был круглым отличником, а потом полетели тройки, и уже к 8-9 классу, я часто прогуливал уроки, за что получал не иллюзорных ремней от родителей.

Поэтому, придя в колледж, энтузиазма было тоже мало.

— Где же программирование? Задавал я сам себе вопрос. А его в первое полугодие — не было. Зато была информатика с MS-DOS и Офис, а также общеобразовательные предметы.

В добавок ко всему, у меня был замкнутый характер, и я был очень скромный. Этот новый разношерстный коллектив явно не вызывал доверия. И это было взаимно. Поэтому разного рода издевки не заставили себя долго ждать. Я долго терпел, до тех пор, пока не выдержал и не надавал по лицу одному из обидчиков прям на уроке. Да так что он улетел за парты. Спасибо отцу — драться он меня научил с детства, и при остром желании я мог применить физическую силу. Но происходило это очень редко, я чаще терпел издевки, дожидаясь максимальной точки кипения.
К слову, обидчик, сильно опешив от происходящего, но по прежнему чувствуя свое превосходство, вызвал меня на ответный бой. Уже на пустыре за учебным заведением.

Это были не детские махания кулачками, как было в школе. Тут был знатный махач, с разбитыми носами и кучей крови. Парень оказался тоже не из робкого десятка и умело отвешивал хуки и апперкоты. Все остались живы, и с тех пор ко мне больше никто не задирался в этом «колледже для программистов». У меня же желание туда ходить и вовсе пропало в скором времени. Поэтому я перестал ходить в него, и никакие угрозы родителей на меня не действовали. Каким-то чудом мне засчитали пребывание в колледже за 10-ый класс школы, и я имел право перейти в 11-ый.

Все бы хорошо, но 11-ый класс, оказался не многим лучшим колледжа. Я вернулся в родную школу, встретил знакомых ребят, с которыми учился с первого класса и надеялся, что все будет нормально в родном месте. Только был один нюанс: Ребята, больше напоминали бандитов из сериалов, чем тех мальчиков, с которыми я дружил в младших классах. Все повально пошли в качалку, нагонять мышечную массу. Я же напоминал бамбук. Долговязый и очень худой. Разумеется такой бугай-одноклассник мог скрутить меня одной левой.

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

Не растекаясь мыслью по древу, из школы я тоже ушел. Где я чувствовал себя комфортно — так это перед монитором компьютера, с закрытой дверью в мою комнату. Это имело смысл, и интуитивно я чувствовал, что делаю правильные вещи. А эта школа — бесполезное занятие, да еще и издевки эти терпеть, которые с каждым днем приобретали все более изощренный характер… Все, хватит с меня.

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

Где-то 3 месяца я сидел дома, тратя свободное время на изучение С++/WinAPI/MFC и rsdn.ru.
В конце-концов, не выдержала директор школы и позвонила домой.

— «Денис, ты думаешь учиться? Или будешь уходить? Решай. В подвешенном состоянии никто тебя не оставит.» — заявила директор
— «Буду уходить» — уверенно ответил я

И вновь, та же история. Оставалось доучиться пол года, до окончания школы. Не оставлять же меня без корочки. Родители махнули на меня рукой и наказали самому идти договариваться с директором. Я пришел к директору школы. Она крикнула, чтобы я снимал шапку, когда вхожу. Затем строго спросила — «Что с тобой делать?». Признаться я и сам не знал, что делать. Меня вполне устраивало нынешнее положение вещей. Наконец она взяла слово:

— «Значит поступим так. Я договорюсь с директором нашей вечерней школы и будешь ходить туда.»
— «Угу»

А вечерняя школа — это был настоящий рай, для таких фристайлеров как я. Хочешь ходи — хочешь не ходи. В классе числилось 45 человек, из них на занятиях появлялось от силы 6-7. Не уверен что все и списка были живы, а также были на воле. Потому что только при мне, одноклассники угоняли чужой мотоцикл. Но факт оставался фактом. Я мог безлимитно прокачивать скилы программирования, а в школу ходить, когда уж очень сильно надо. В итоге я ее закончил, сдав выпускные экзамены. Много на них не требовали, и у нас даже был выпускной. Выпускной, сам по себе — отдельная басня. Помню, что местные бандиты-одноклассники забрали у меня часы. А едва услышав свою фамилию, при вручении аттестатов — я рысью метнулся за документом и пулей вылетел из школы, чтобы не наткнуться еще на какие-нибудь неприятности.

Впереди было лето. С Дональдом Кнутом под мышкой на пляже, морем, солнцем и судьбоносным решением написать свой большой проект (компилятор).

сохранить ссылку