обложка

А программист ли я?

Посвящается тем, кто иногда разочаровывается в программировании. Найдено на просторах сети.

Программист ли я?

Именно таким вопросом я задался сегодня утром, придя на работу. Вроде бы все признаки программиста есть: код пишу уже не первый год, за плечами не один проект (как провальные, так и успешные), разбираюсь в структурах данных, алгоритмах и их оценке, знаю, как работают сети и сам компьютер вплоть до железного уровня, знаю и использовал скрам, канбан и иже с ними. Честно ходил на конференции послушать, а также честно выступить. С огоньком в глазах читал лекции студентам и рассказывал, каково это – быть программистом. Многие из них пошли на работу программистами, самых толковых я забирал себе в команду. Читал тренинги по паттернам, JavaScript и .NET, проводил хакатон, участвовал в хакатоне, и радовался как ребенок от этих самых хакатонов.

rybub

Мой первый язык, вы будете смеяться, был JavaScript – на дворе 2002 год, IE 6 процветает, и тут мне в руки попадает, совершенно случайно, книга по HTML. В ней есть некоторые упоминания про JavaScript, которые привлекают мое внимание, что заставляет меня съездить на книжную выставку и приобрести большущую книгу по JS. Я помню свою первую «полезную» программу – на страничке с черным фоном, было изображение выключателя света с надписью «off» и надпись: «Включите свет». При нажатии на выключатель его состояние менялось на «on». Фон странички становился желтым, надпись исчезала. С этой программы я еще «угорал» несколько дней. Ну и потом понеслось все поинтереснее и посложнее. Тогда я еще ничего не знал ни об оптимизациях, ни о том, что в программировании должна быть хоть какая-то логика, когда ты пишешь цикл или сортировку. Все делалось «на абы», и порой работало достаточно медленно, но меня это совсем не останавливало. Вслед за выключателем понеслись выпадающие менюшки, корявые анимации и так далее.

А потом я узнал про С – за ним я мог сидеть ночами и программировать бесполезные программы – от них не было, по-первости, никакого толка, но осознание, что ты можешь что-то создать, меня очень подкупало. Работа с файлами, работа с сокетами (без вообще какого-либо понимая принципов их работы). А дальше я вычитал, как на экран можно вывести линию или другие фигуры. Первое, что я сделал – это решил создать свой 3D куб, который будет вращаться с ускорением. На тот момент моя голова уже имела представление о синусах и косинусах. Так что придумать, как крутить точку по кругу, особых проблем не вызвало.

А затем, на первом курсе университета, мне показали такую вещь как C++ Builder. На тот момент он еще не был забыт, и когда я увидел это великолепие готовых компонентов, кнопочек-менюшек-таблиц (гридов), я думал, мой мозг сойдет с ума от счастья, великолепия и безумного количества вариантов, что можно с этими кнопочками сделать. И я делал – помню свои «виджеты» для Windows XP, маленькие программки, которые полупрозрачные всегда висели на рабочем столе и отображали текущую загруженность дисков, какие-то заметки, погоду, а также напоминалки в виде календаря. На тот момент я это писал для себя – только чтобы написать. Это сейчас у нас есть все это вместе с системой и общей синхронизацией. А раньше этого софта не было, и не столько приходилось, сколько хотелось его написать.

клава

И вот тут настал своеобразный переломный момент – программировать красивые анимации, используя готовые компоненты, стало надоедать. Мне не хватало понимания того, что происходит под капотом у этих самых компонентов, как они созданы и на основе чего отрисовываются. А также начали возникать вопросы производительности – порой программы работали медленно, и я не всегда понимал почему.

По совету очень хорошего человека мне в руки попала книга Рихтера «Windows для профессионалов. Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows.» Честно – до этого я поглядывал на Windows с подозрением и считал, что это «ламерская» система. Помню, еще когда мне было шестнадцать, человек, который собирал мне мой второй компьютер задал вопрос: «Ты вообще Windows умеешь пользоваться»? На что я засмеялся и ответил: «Конечно». Зря смеялся – на самом деле это вовсе не Windows был виноват, что он падал от вирусов или память заканчивалась от антивирусов. Просто руки у меня были кривые, не знал я, как все устроено в системе, не знал, как сделать так, чтобы система, установленная однажды, никогда не переставлялась до выхода новой Windows.

После прочтения книги многое стало на свои места – теперь я с огнем в глазах бросился разбираться в WinAPI, а вслед за ним (уже не помню, как) я узнал про драйвера и начал пытаться с остервенением их писать: виртуальная машина, на нее Windows XP и установка драйверов. Через раз, правда, система слетала с BSOD’ом, но это не было проблемой. Как же я тащился от написания драйверов. Тащился, пока мне это не наскучило – в какой-то момент времени просто стало скучно – баловаться с низким уровнем доступа в системе.

Следующее, что я узнал (это произошло одновременно) – было шифрование и сети. За несколько дней я вычитал от корки до корки книгу Олифера «Компьютерные сети». Это было безумно интересно – разобраться вплоть до физического уровня, как это работает, понять принцип функционирования моделей массового обслуживания, разобрать по косточкам протоколы, а вслед за ними запрограммировать свой какой-никакой http-сервер, а за ним ftp. Разобраться с основными протоколами почты и «потыкать» в gmail-командами прямо из кода.

ожидание реальность

Вслед за этим последовали структуры данных, оценка сложности алгоритмов и непосредственно сами алгоритмы. Помню, как я ржал, словно дурак с фразы: «В этой главе мы будем разбираться, как хранить данные в дереве». А спустя несколько лет, во время похода, на фразу: «Смотри, какое дерево» я секунд 15 тупил, пытаясь понять, где друг увидел бинарное дерево в этом лесу.

Вообще обучение программированию шло какими-то урывками и совсем не так, как должно было бы идти, что бы все давалось постепенно, правильно и просто. До многого приходилось доходить самому, потому что не хватало «базы»: порой математической, порой алгоритмической. Но затем все стало на свои места, и я окунулся в мир .NET.

Потом я пошел на работу, это было на втором курсе. Как сейчас помню свой первый проект: 223 мегабайта кода, без картинок и прочей шелухи. В первые дни я был уверен, что сойду с ума, пытаясь это понять, а потом ничего, втянулся – все стало просто и понятно.

празднует

Мне было интересно разобрать по косточкам, как работает CLR, как функционирует сборщик мусора и как выполняется хранение объектов в памяти, как работают индексы синхронизации, какие проблемы могут быть при многопоточном программировании. Я сидел и читал исходники open-source проектов, просто так, от скуки. А потом все это рассказывал студентам – тем это нравилось, да и мне было приятно делиться знаниями. За .NET последовал мир фронтенд разработки, я с упоением слушал лекции Крокфорда, читал стандарт JavaScript’a разбирался с паттернами, читал книги по CSS и изучал нюансы работы браузеров и читал исходники jQuery.

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

много рук

В общем, я делал все, чем должен, как мне кажется, заниматься болеющий за свое дело программист.

И как-то в один момент мне все это надоело – стало нестерпимо скучно. У меня было шесть проектов, и каждый был интересен чем-то своим: новые технологии, новые знания, новые процессы. А теперь этого не стало. Фразы вроде: «У нас очень секъюрная система» больше не вызывают трепета.

Скука.

Высоконагруженный финансовый проект? Что-что? Не слышу. А, вы говорите, что у вас много лоад балансеров, свой бинарный протокол общения между фермами, миллионы пользователей и святой скрам?

Скука.

Высоконагруженный проект с геолокацией, поиском, использования дерева квадрантов. Node.js + HTML5 + CSS3 + новейшие библиотеки JS?

Скука.

И так далее.

Просто надоело все это – с первой моей строчки кода в 2002 году, до сегодняшнего момента я не сделал ничего полезного этому миру. Ничего не изменил и не исправил, не облегчил никому жизнь. Новые технологии не приносят удовольствия, хотя я продолжаю следить за этим всем «огородом». Все превратилось в обыденность: любой код – это просто код, в нем нет чего-то необычного и, если позволите, «волшебного», как это было раньше.

Все чаще меня посещает мысль, что программирование – это не мое, ведь не может быть так, чтобы человеку наскучило до осточертения любимое дело. Один из моих коллег после десяти лет занятия программированием все бросил и уехал куда-то в Египет учиться, а затем и работать охотником на акул.

И вот сегодня утром, повторюсь, я задумался: а программист ли я?

Послесловие

Что можно сказать напоследок? Впереди ждет переезд в Гугл, возможно, там моя страсть к программированию разгорится снова, но уже точно сказать не могу – время покажет.

Не знаю, зачем все это написал, возможно, потому что некому больше рассказать, а выговориться хочется. А возможно потому, что за окном просто плохая погода – у нас сейчас в Минске барабанит крупный дождь.