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

Источник: habrahabr

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

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

image

И вот тут настал своеобразный переломный момент - программировать красивые анимации, используя готовые компоненты, стало надоедать. Мне не хватало понимания того, что происходит под капотом у этих самых компонентов, как они созданы и на основе чего отрисовываются. А так же начали возникать вопросы производительности - порой программы работали медленно, и я не всегда понимал почему. 
По совету очень хорошего человека мне в руки попала книга Рихтера "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. И опять же все это рассказывал студентам и пытался применять на работе - узнавая какую-то новую "фишку" мне тут же хотелось впихнуть ее куда-то в проект, если это имело хоть какой-то смысл. Порой сидеть без сна двое суток и программировать, подпитываясь сладким чаем и конфетами - было нормой, организм нормально реагировал на это и совсем не жаловался. При этом я работал лишнее время не за деньги - мозг затмевала идея, которую срочно нужно было реализовать, иначе мозг просто не мог уснуть, а продолжал думать и прокручивать раз за разом в воображении новую "модель".
В общем, я делал все, чем должен, как мне кажется, заниматься болеющий за свое дело программист.
В августе этого года как-то в один момент мне все это надоело - стало нестерпимо скучно. У меня было шесть проектов и каждый был интересен чем-то своим, новые технологии, новые знания, новые процессы. А теперь этого не стало - фразы вроде: "у нас очень секъюрная система" больше не вызывают трепета. Как я сейчас вижу очередное предложение от HR"ов:

Секъюрная система говорите? Что вы можете предложить - шифровать куки, трафик и использовать какую-то децентрализованную сеть? 
Скука.

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

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

И так далее. 

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

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


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=35180