Как стать программистом за целую жизнь

Или не стать. Тут как повезет

Alexey “Averrin” Nabrodov
20 min readJan 26, 2018

Эта статья может быть интересна тем, кто хочет вспомнить свой “программерский” путь, или тем, кто только начинает свой. Ну или если вам просто нечего больше почитать. Бывает такое.

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

Эта книга во всем виновата

Я не буду заострять внимание на всем вообще айтишном, а то история и начнется гораздо раньше и вообще распухнет, пройдусь именно по программерским вехам.

Началось все, наверное, году в 2002ом, плюс-минус. Моя сестра, учившаяся в то время в универе, в один из своих визитов к родителям оставила книжку про макросы в Excel. Почему-то я их называл макрОсы =) И я эту самую книгу употребил. Как сейчас понимаю, вряд ли я прочел больше страниц тридцати-сорока, но этого хватило. Мой мозг был разрушен.

Кажется, за пару лет до этого, у меня была какая-то энциклопедия про алгоритмы. Не такая чудесная, как “профессора Фортрана”, но из нее я узнал основы битовых операций, формальной логики и, что немаловажно, нотации блок-схем. Так что такие вещи как условия и циклы дались мне легко. Правда большую часть времени я воевал с явным объявлением переменных (никак не мог понять, зачем) и справкой экселя, чтобы понять как делать границы, форматирование и так далее. Не далеко я тогда ушел, честно сказать.

Смутно припоминаю, где-то в то же время я почитывал книгу “HTML и CSS за 10 минут*”. И даже верстал что-то ужасающее. Не помню, знал ли я тогда про существование JS. Наверное нет.

Да, внезапно, это тоже программирование. WarCraft 3 Trigger Editor

Но все эти немудреные знания помогли мне когда началась “информатика” в школе. QBasic уже тогда казался ужасающе древним, а базовые знания алгоритмов помогали решать задания минут за десять. Увы, там все было еще примитивнее, чем мои потуги в макросы. Так что кроме всякого “программирования” на скриптах в Morrowind и WarCraft 3, я до самого универа ничего приличного не написал. Сейчас я, конечно, понимаю, что все это было очень важно. Дело не только в основах алгоритмов, но и в том, что это была бесконечная практика отладки, тестирования и, самое главное, исследования. Приходилось читать чужой код, гуглить, пробовать варианты. То есть то, что делает программист 80 процентов времени. Кстати, странно, но тогда мне и в голову не приходило поискать документацию. Вряд ли я бы что-то особо полезное нашел, а английский, хоть я тогда и знал уже неплохо, вряд ли позволил бы читать техническую литературу. Но у меня даже и мысли такой, кажется не появлялось. Ну или это мне сейчас так кажется.

*Врывается из середины статьи, вспомнив о чудесной платформе, на которой писал игры еще в школе* Как я мог забыть, это же было прекрасно. И, внезапно, оно еще живо: QSP. И сейчас мне как программисту, особенно писавшему и использовавшему другие игровые движки, больно на это смотреть. Но! Это один из лучших способов научить программированию. Те самые Interactive Fiction игры, которые все так полюбили после Космических Рейнджеров. И лет за 30 до этого. *телепортируется на 7 экранов ниже*

А потом наступил универ. Первый курс давил не только огромными усилиями на учебу, но и наконец-то нормальным интернетом (ну как нормальным, авангардовский адсл, но после моей деревни…). Так как специальность у меня все-таки связана с информатикой, у нас был курс, который обтекаемо назывался что-то вроде “основы специальности”. Его вел мой будущий научрук, отличный дядька, которому я очень благодарен по сей день. Но в самом начале он давал нам… perl. Да, оригинальный выбор. Однако, не так плох, как оказалось. Например, я до сих пор неплохо разбираюсь в регулярках. Кода мы тогда написали мало, но было интересно.

И вот, когда я наигрался наконец в Обливион, я нашел уже пару лет пылящийся на полке диск… Red Hat Linux 4. Да, красная такая дивидишка. Можно рассказывать много историй про то, как там надо было ставить дрова для ntfs, кодеки для mp3 и как я переставлял каждый раз систему, так как она ломалась, если загрузиться в винду… Но если коротко, то именно линукс заставил меня программировать. Думаю, это уже была шестая убунточка, с бесплатного диска, приехавшая в почтовый ящик. Начинал я, наверное с того, что писал простенькие bash-скрипты для переключения плейлистов в Xine и запуска игр в Wine. Однажды мне захотелось написать виджет для панели с кнопками управления плеером. И это была моя ошибка. В тот момент моя жизнь изменилась.

С моей любовью к кастомизации, такой система не задерживалась надолго

Это, конечно, громкое заявление, особенно с учетом того, что я учился на “прикладной информатике”. Тем не менее, это так. Я поступал на соседнюю кафедру “математические методы” и то, что мне предложили учиться на информатике — было приятной неожиданностью, ведь в прошлом году туда был дикий конкурс. А в этом получалось наоборот. Но я все равно в тот момент не думал о карьере программиста. Я вообще не думал о том, кем буду работать, а программирование как основное занятие я, почему-то, никогда и не рассматривал. Просто в голову не приходило.

Так вот, виджеты писались на Python и Gtk+2, или как-то так. Сразу скажу, что виджет у меня так и не получился, просто почему-то не встраивался. Питон, который я когда-то, еще в школе, даже поставил, но так и не опробовал, оказался простым и очень мне понравился. Отделаться от него я смог только много лет спустя.

Писал я в редакторе Geany, в котором разве что была подсветка, и с тех пор свободно обхожусь без всяких приблуд, которые помогают писать код. Главное, чтобы была подсветка синтаксиса. Ну и vim-режим, без которого я теперь начинаю-таки страдать. В общим я писал страшный (ужасный, чудовищный, вырвиглазный) код. Но писал его много. Целыми днями и ночами, регулярно прогуливая пары. Правда не пропускал те, что были в компьютерных классах. Универ, хоть 90 процентов знаний которые он дал, я благополучно забыл, очень многому меня научил. Если говорить именно о программировании, то список будет выглядеть как-то так:

  • Искать информацию. У нас был отдельный предмет, на котором мы искали что-то очень хитрое и источники, которое это подтверждали.
  • Поднимать виртуалки, обходить запреты, пробрасывая домашние иксы на универский комп, взламывать программы для тестов и так далее…
  • Ненавидеть Java. Серьезно, у меня до сих пор к ней какая-то особая неприязнь. Я запомнил ее как жутко многословную и упорото компилящуюся. Хотя я позже видел и не менее громоздкий C# и обдолбанную компиляцию плюсов.
  • Все, что имеет в названии Visual — лютое УГ. Даже если это плюсы. Емнип, у меня даже не пятерка была по плюсам. Это было так уныло и скучно, что я, кажется, пропустил таки половину пар и потом дописывал лабы за вечер, прямо на зачете.
  • Писать курсовые по программированию — легко и интересно. Впрочем, диплом тоже не очень много сил отнял.
  • Нужно читать все, интересоваться всем, тыкать миллиард технологий и слушать крутых чуваков, даже если кажется, что это не интересно и не нужно. Одна из самых крутых лекций в моей жизни была про шрифты и типографику. Тогда мне и в голову не могло прийти, что это интересно. Но об этом рассказывал совершенно потрясающий черт. Жаль он вел у нас всего пару лекций. Да и консоль и прочие правильные, но “олдовые” вещи я, наверное, подцепил от научрука.

Первые пару лет я реально писал практически не останавливаясь и прямо в мусорное ведро. Но я раскурил тогда Qt и кроссплатформенность, Django и веб. Ох, прямо вспомнил, сколько разного ада я делал. И на чем только не делал. Десятки веб-фреймворков, жуткие самописные либы… Хотя, потом, когда я начал работать, писал я еще больше. Самые старые репозитории на гитхабе не сохранились, но кое-что осталось. Я просто в шоке, сколько кода я тогда писал. Ну да по порядку.

Я не очень помню, но, кажется, меня взяли с первого же собеседования. Хотя опыта работы у меня было… ну немного выездным админом, за время работы которым, я потратил больше денег на дорогу, чем заработал. Да и не работал я там, считай. Меня подписал одногруппник, и мне периодически в самое неудобное время приходилось ехать в самое неудобное место в городе, чтобы охренеть от того ужаса, который там был и накатить сверху новую пиратскую винду. То ли дело НП СРО МООЖС. Да, они правда так называются.

Там все было плохо. Мы делали систему для внутреннего пользования (хотя однажды даже продали один сервак куда-то), и к моменту моего прихода она была… не очень. Там был интерфейс в стиле HTML 1.0 без применения CSS, там была SVN с очень старой версией кода в репозитории и местный “безумный гений”, который появлялся раз в месяц, накидывал еще тысячу-другую строк в репозиторий и исчезал, оставляя нас править все, что он сломал.

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

Первым делом я натянул интерфейс. Просто больно было на это смотреть, а заодно, отличный способ разобраться в системе. Я знал тогда достаточно, чтобы не выдумывать велосипед и использовать JQuery UI. Затем я внедрил Git и что-то вроде организации работы на сервисе Assembla. На гитхабе тогда еще не было ничего кроме репозиториев, а приватные стоили дороже чем на ассембле. Ну в общем, так незаметно я стал там чем-то вроде “лида”. А так как там временами писалась особая уличная магия, я неплохо прокачал питон. Ну и покушал ситуацию когда ты месяц усиленно пишешь “очень важную фичу”, которая вообще не нужна от слова совсем.

Уже ближе к концу работы там у меня начало появляться свободное время, которое я все так же тратил в основном на программирование. Ну а чем еще в рабочее время за компом развлекаться? Тогда я снова обратил взор на десктопные приложения и для ускорения написания начал собирать часто используемые куски кода в библиотечку, которая оригинально называлась avlib. Да, вот такой я молодец. Она потихоньку разрасталась и превратилась в “фреймворк” с гордым названием Springstone. И это славное время уже можно застать на гитхабе! Да, это онлайновая игра! Пришлось поднимать в докере, но оно шевелится!

К серверу почему-то не цепляется, видимо, контейнер настроен неправильно, но да, там можно было бегать толпой.
О, а это уже чуть позже в кооперации с коллегой. “Лампочка в лабиринте”, динамически считает освещение. Коллега большой фанат игры Nox

Идем на таймлайн, смотрим. Где-то тут я сменил работу=) И не потому что занимался фигней на рабочем месте, а скорее наоборот. В общем я ушел вовремя. И хотя, меня брали как питонщика, писать в ИнтерZете мне пришлось на PHP. Вот тут были воистину темные времена. PHP я никогда не любил, и хотя, говорят, сейчас он стал сильно лучше, в те времена это было ужасно. Сам я продолжал интересоваться питоном, и тащить в дом ту дрянь, которую писал на работе не хотелось. Еще мы там много писали хранимки на SQL. MySQL старых версий тоже доставлял, поверьте мне. Да что там говорить, однажды мне пришлось править скрипт на ПЕРЛЕ, который синкал базу и какой-то самописный сишный биллинг по чудесному костыльному протоколу. Естественно без никакой документации и так далее. Вспоминать весело, но тогда было не особо.

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

Где-то в это время мой питоновский фреймворк переродился в Winterstone. Хотя название и отдает преемственностью, я там действительно озаботился архитектурой и несколько раз все переписал. Там есть ужасное, есть плохое, но есть и правильное. По большей части я делал правильные вещи неправильными способами. Но вообще говоря, я до сих пор, пожалуй, могу им гордиться. Там очень много функционала, приложения писались быстро, имея в себе очень гибкие системы плагинов, настройки, отладки. Qt позволял собирать безумно классные виджеты и настраивать все по своему желанию. Блин, да у меня там даже свой скриптовой “язык” был!

Внезапно единственной действительно полезной вещью, которую я сделал в ИнтерZете была система для автоматизации внутреннего ревью и деплоя. Там это работало очень странно, так что я на питоне набросал что-то, что отдаленно напоминало мердж-реквесты и систему ревью. Этим даже пользовались.

Судя по гитхабу, к концу работы в интернет-провайдере, я пробовал тыкать C#. Основные свои “проекты” на этом языке я напишу только через год-полтора, но если мне память не изменяет, это была попытка переписать свой питоновский клон Mars Notebook на шарп. Предсказуемо, далеко он не продвинулся.

Что-то я не ожидал, что он такой страшный. Следующие попытки будут симпатичнее

Пора было искать наконец работу, которая бы доставляла мне удовольствие. А значит на питоне и не CRM. И тут судьба решила немного пошутить. Дело в том, что когда я прошлый раз искал работу, была вакансия в компанию General Satellite, как раз на питон и Django. Резюме я им отправил, но ответа не получил. Кто же мог подумать, что я таки попаду на это место, но буду писать уже следующую версию этой системы, в их дочерней компании.

А писал я систему оповещения “для МЧС”. Короче, вот патент, вот “чудесная статья” в газете (страница 9). Я пришел первым программистом с прицелом на повышение в старшего. Надо было не только поднять и устроить всю разработку, инфраструктуру и так далее, но и спроектировать систему. Дело в том, что прошлая версия была общепризнанно отвратной, но пока от нее была только документация. Я раскурил “это”, нарисовал диаграммки, указал слабые места, сделал свой вариант архитектуры, возможности развития… На презентации у меня спросили, а нужны ли мне исходники прошлой версии, и не могу ли я прямо сейчас начать писать? Я сказал, что могу.

Для протокола стоит признать, что там были местами спорные решения, но в целом, это был неплохой продукт. Помимо того, что я научился мыслить большими категориями, вроде масштабирования на всю страну и требований МЧС, эта работа принесла мне и другой опыт. Так как в итоге я оказался одновременно и руководителем отдела разработки, и проджект менеджером, и ведущим разработчиком, и чертом в ступе, чего я только не делал. И управление командой, все возможные планы и роадмапы, тонны документации и ТЗ, общение с заказчиками, конкурентами, калужскими оборонниками, московскими телевизионщиками, питерскими профессорами… Вы не поверите, я даже ездил по питерским школам, чтобы фотографировать их чердаки и поднимал демо-стенд во Всеволожской мэрии. Ну и писал код. Какие-то мысли про удобство UX, про разумность внешних протоколов и их безопасность, про обслуживание серверов, распределенность, горячую замену…

Упоминать буквосочетание “П-166” в приличном обществе не советую… Чудесные ребята сидят в этом КЗТА…

Вообще, сколько бы ада я не вспоминал со времен работы в “Крипто”, такого концентрированного и полезного опыта я нигде не имел. Отдельное спасибо хочу сказать моему шефу, про которого многие в городе имеют свое особое мнение, но который очень мне помог в профессиональном плане. Я многому от него научился и в плане управления и в плане личной ответственности. Главное, что он хотел и умел этому учить. На самом деле, после тех приключений, работать программистом стало очень просто. А что-то быть начальником желание у меня пропало, по крайней мере на некоторое время.

Кстати, как можно догадаться, проект не выстрелил. В основном потому что сменились ключевые начальники, а в нашей стране все что связано с государством едет только на связях и откатах. Система неплохо работала на локальном уровне, уверен, без проблем бы потянула целый субъект. Но единственная установка на момент ликвидации компании была в каком-то интернате в северном пригороде. Обидно, но я уже привык.

Это было с середины двенадцатого, по пятнадцатый год. Гитхаб рассказывает, что в это время я ковырял node.js, в том числе такие странные вещи, как Meteor.js. Тогда одностраничники были для меня внове, да и вообще, я не очень воспринимал браузер как платформу для серьезного кода. Так, CoffeeScript, много питона… У меня тогда под рукой было множество серверов, я увлекался автоматизацией, сетевым взаимодействием, вот этими всеми штуками. Уже тогда были Ansible, SaltStack, Chief, и прочие, но мне куда интереснее было делать все самому, чем пользоваться готовым. Особенно учитывая то, что особенной нужды во всем этом и не было.

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

Это история буфера обмена, но в целом сделано для красоты и самообразования. Это не последняя версия, кстати, я потом переписал ее в стиле Metro, стало куда симпатичнее

Ого, что я нашел, Skywind Installer! Скайвинд —это был еще один проект по переносу Morrowind на свежий движок, а именно Skyrim. Пока проект не начал медленно вянуть, я успел написать довольно серьезную штуку для работы с этим модом, установки, распаковки, скачивания ассетов. Пожалуй, моя первая работа в англоязычном коммьюнити. Потом все как-то временно заглохло, а у меня появились какие-то дела. Но так-то, проект был неплохой, прямо жалко что его исходники мне уже не пригодится.

Так, дальше много ноды, я делал “сайтики”, даже одно время пилил свой ответ roll20.net, для проведения ролевых игр онлайн. Кстати, я сейчас активнее болтаюсь в среде ролевиков, кажется, эта штука могла бы зайти, надо будет подумать о реинкарнации. Как видите, у меня всегда было полно идей, за которые я хватался и быстро остывал. Я до сих пор болею этим=(

Так, попытка раскурить QML, это уже Qt5. А где мой проект на уже упомянутом Winterstone? Там были интересные программки, щас поищем. Ого, я оживлял эту радость три раза, последний раз аж в конце 15ого года. Ну да о нем надо писать сейчас, возможно, большую часть кода я написал еще в Интерзете. Завести, правда, не удалось, больно много там экспериментального было, а в управление зависимостями я научился вот уже в “Крипто”. У меня там был и web-ui (да, то, что сейчас называется Electron, но на QWebkit), и встроенный интерпретатор питона (да, я стоял у истоков Jupiter. Ничего, правда не сделал, но у истоков постоял, использовал их ядро, когда оно еще было proof-of-concept) и так далее… Я делал “игры”, которые заканчивались на этапе, когда было пора делать контент, какие-то просмотрщики и редакторы, которыми пользовались от силы два раза, и так далее. Потом еще (не)много QML и…

…поворотная веха в моей программерской жизни: я попробовал Go. Вот хоть убейся, никак не могу вспомнить, что стало причиной такого важного решения. Глядя опять же на гитхаб, я начал с веб-приложений, потом попытав счастья с Go+Qt, написав лаунчер для открытой реализации морровиндовского движка OpenMW. Помню, на чем все стухло: привязки к Qt были такими сырыми, что банально выпадающий список нельзя было динамически наполнять. Вечно я режу руки об bleeding edge…

Делал еще всякие такие штуки. В основном всячина связанная со светом выжила.

Воу-воу-воу, палехче! Похоже, я забыл написать об еще одной стороне своего увлечения программированием. Я же еще немножко “умею” в железо! Про микроконтроллеры, наверное, рассказывать особо нечего, тут я дальше “уверенного в себе новичка” не ушел, а вот машинки посерьезнее я помучил более увлекательно. Где-то даже существует пара экземпляров устройства, если мне память не изменяет, ПЗА-1 (прибор замещения аудиосигнала), смонстряченный из какой-то адово совковой релейной переключалки аудиотракта и впиленой внутрь Raspberry Pi, в которой крутился мой питоновский скрипт, вещающий поток с сети прямо в аудиовход радиостудии. Жаль патент получить не успел=) Вообще, у меня немало подобных одноплатников, о многих некоторые и не слышали (CoreWind WIFIG25, например), а я сам для них ядро собирал и довольно круто насиловал, чтобы завести на этом китайском поделии нужную мне периферию. Но, к этому я еще вернусь через годик-другой, а пока я очень странными тропами, чудесными совпадениями и недюжинным упорством оказался в компании Zodiac.

На самом деле, где-то в этот момент я понял, что мне до смерти осточертел питон. Просто перестал интересовать. И так как очень странная прихоть судьбы лишила меня вакансии на Go, я оказался разработчиком на JS. Мне хотелось чего-то нового, и разработка телевизионного интерфейса на canvas — выглядело именно тем, что нужно. Да чего врать, за первый год я получил массу удовольствия от работы. Правда, не припомню даже, чтобы я с таким удовольствием писал код на работе.

Я написал там несколько безумно интересных и красивых демок. Я очень много узнал о JS, о рисовании, эффектах, оптимизации и архитектуре фронтовых приложений. Правда там же я увидел и изнанку мира JS. Например, встраиваемые браузеры, в которых нет даже indexOf, жуткие костыльные фреймворки на доисторическом стандарте языка, мозгодробительные кодировки, странные ограничения, глючные эмуляторы и странные штуки, от которых нет ни документации, ни исходников, но куча глюков и нужда в замене.

Спасибо Cisco за раннюю седину. От слова RTN у людей родимчик случался

Увы, Go тогда не очень годился для написания настольных приложений, так что мелкие инструментальные приблуды все еще приходилось писать на питоне. Да и api пришлось писать на нем же, шанс что кроме меня найдется знающий питон, выше что будет еще один знаток Go. Хотя, я еще одного товарища пересадил на этот язык. Уволился он, правда даже раньше меня.

Еще тонну кода я написал на CoffeeScript, на котором писались плагины для Atom, которым я тогда пользовался. Один плагин даже пользовался успехом, пока апи не поменялся. Увы, я тогда уже сменил редактор и не стал обновлять плагин.

В определенный момент настала ситуация, когда компании перестали быть нужны JS-ники. Сначала нам (точнее остаткам нас) придумывали работу по внутренним проектам, в основном довольно унылым. А после моего ухода, кажется, даже сократили. Надо ли говорить, что ни один из моих проектов так и не увидел продакшен? Хотя демки были клевые. Весьма вероятно, что кое-чем из того, что я делал в свободное время до сих пор пользуются. Вот люблю я всякую прикладную мелочь писать. А уж всякий трэш вроде получения скриншотов по телнету с кабельных коробок…

Пока я занимался вот всей этой внутренней фигней, я довольно неплохо раскурил Go. Написал дико многопоточную текстовую онлайн игру, что-то вроде почивших ныне MUD. Интересный клон Rofi, на котором я обкатывал рисование интерфейса в SDL, и Shodan, о которой есть устаревшая, косноязычная и неполная статья. Надеюсь, я ее еще оживлю когда-нибудь.

Моя реализация переключалки задач.
С запускалкой
И прочими ненужными функциями

Плавно подходит осень 2016ого года, когда я в очередной раз меняю работу. Мои мемуары скоро закончатся, потом останется перетерпеть немного “размышлений”, и вы наконец свободны.

Можно было бы подумать, что я наконец уйду куда-нибудь в десктоп, но веб все еще не отпускал меня. И я пришел в компанию, где разными путями, но оказался почти весь JS-отдел из Зодиака. А в здании напротив еще двое коллег из Крипто. Вот такой маленький город, а вроде “вторая столица”. Итак, я оказался в компании Wrike, где пишут на Dart. Еще одно поделие гугла, хотя, на мой вкус, менее удачное чем Go.

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

Еще один никому не нужный проект. Анлог скайпа, но сращенный с управлением задачами. Огромный потенциал, который нам не дали развить.

И я писал на Go. Например вот этот проектик, который я делал под другой личностью: ZeroGo. Это неофициальный клиент для p2p-сети ZeroNet. Очень интересный проект, много параллельности, распределенные протоколы, тонна хаков… Естественно, дальше работающей альфы проект, по моему обыкновению, не продвинулся, но это было клево.

А еще я перешел на Emacs. И писал для него плагины, чтобы подружить с дартом. Да, на Lisp. То еще приключение, уверяю вас. Но если у меня еще были сомнения, что я могу писать на абсолютно любом языке, то они отпали. Мозг вопит от боли, но код пишется.

Емакс и лисп в нем выглядят как-то так

Так-так-так, это у нас прошивки для клавиатуры, это голые си… Адовый хак для roll20, перехватывающий броски кубов и делающий оверлей для стриминга. Да, при желании и определенных навыках, все ломается, становится возможным и живет, ползя на квадратных колесах и скрученных синей изолентой костылях. Так, а это в ту же копилку, свой оверлей для Discord, ибо их родной не поддается настройке. Жуткий хак, которые еще и жрет процессор как не в себя. Жду, пока они наконец зарелизят RPC, чтобы можно было переписать по-нормальному. Мега полезная вещь в узких кругах. Я потом хотел их объединить, сделав интерфейчик на QML, но что-то недокрутил, уехал в отпуск. А после него уже были другие идеи.

Коммиты в GitHub за последний год. Меньше, чем может показаться из текста.

Про все последующее я уже начал писать отдельные статьи, которые можно найти в моем профиле. С Go я как-то плавно переполз на C++, который мне удивительно зашел, не смотря на существовавшее когда-то предубеждение. Вообще, я в этом длинном жизнеописании даже не все языки, на которых писал упомянул: lua, на котором конфиги в Awesome, к которому я немало кода написал, ActionScript, на котором я делал флеш-игры в универе, Java, на котором в Зодиаке написан таск-трекер и где я тоже переписал пару-тройку мест… В общем, все и не упомнишь.

Скрин одного из последних проектов

Это я все к чему? Я думаю, не сложно было увидеть, что я люблю сам процесс программирования, люблю реализовывать, а потом забрасывать какие-то идеи. Некоторые программы я написал только потому, что мне понравился скриншот, на котором был терминал с красивым шрифтом и цветным текстом. Из всех программ, которые я написал, я ни одной не пользовался больше пары месяцев. Но дело не в этом. Я просто лазаю по гитхабу, смотрю скрины на реддите, читаю статьи на медиуме и ко мне внезапно приходит идея. Иногда вида “хочу красивую консольную утилитку”. Вот я до сих пор не придумал, что она будет делать. Но может быть я возьму неопробованную ранее библиотеку, может даже язык, и просто начну писать. Не читая никаких умных книжек, неистово гугля и пробуя самые разные варианты. Например, я никогда не гуглю решения задачи, обычно мои задачи странноваты и на stackOverflow ответа на них не найти, я ищу похожие на нужные функции, гуглю их использование, гуглю тексты ошибок, ищу на гитхабе в исходниках использования нужных мне функций.

Вообще, если говорить честно, я предпочитаю плохой, но работающий код хорошему, но неработающему. Если совсем не упарываться, то правильная доза “разработки через страдание” — вот мой путь. Я видел лютый оверинжиниринг, который куда сложнее было переделать, чем отрефакторить работающий, но корявый код.

Я считаю, что программистом человек становится тогда, когда он начинает решать проблемы, а не писать код. На любой операционной системе, любом языке и в любом текстовом редакторе. Если ты написал сколь угодно сложную программу —ты еще не программист. А вот если ты имея миллион ограничений, не имея знаний и опыта, на подручных средствах решил поставленную задачу… Да еще, вероятно, понимая, где и что можно было сделать лучше, да еще получив от этого удовольствие —ты программист.

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

Что же касается “soft skills” (коммуникабельность, стрессоустойчивость и прочее, что пишут в вакансиях), о которых сейчас модно порассуждать, у меня мнение такое. Они очень полезны для человека в целом. Программист ты или нет, без них тебе будет менее комфортно жить и почти невозможно работать. Если у тебя нет потребности в деньгах, ты можешь быть классным программистом, что-то где-то писать, но в одиночку только единицы пишут что-то стоящее.

Надо еще сказать про умение проектировать, строить бизнес-процессы и тд. Да, это очень важно. Без этого невозможно уйти дальше “кодера”. Но я не вижу способа развить этот навык, выполняя только рабочие задачи. Да и вообще, не написав десять тысяч строчек плохого кода, ты не сможешь написать и ста хороших. Вот если ты всю ночь сидишь и рефакторишь свой личный проект, потому что неправильно спроектировал — вот тут ты крепко запомнишь, и подумаешь на работе перед тем как бросишься писать код. А если ты пишешь сразу “как надо”, потому что иначе ревью не пройдешь, так ничему не научишься.

И тут плавно переходим к вопросу “А надо ли?”. Ну тут каждый выбирает сам, конечно. Помимо того, что мне просто не перестает быть интересно программирование, есть еще несколько личных мотивов, которые я чуть позже расскажу. Пока отмечу, что помимо программирования, у меня есть и другие хобби, которые, в чем-то продиктованы теми же мотивами. Я, например, увлекаюсь электроникой и прочим “крафтом”, вроде лепки и покраски миниатюр. Я люблю разные проекты “на стыке”, вроде хайтека в деревянных корпусах или программ для социальных ролевых игр.

Во-первых, я люблю делать “вещи”. Что-то чего не было и вот оно есть. Что-то, что большинство не умеет, а возможно, и не поймет, но это не важно. Я люблю, чтобы из горсти пластиковых шариков появилась фигурка кота. Чтобы из буквально ничего появился сайт, или программка, хотя только посвященные смогут оценить, как это было сложно. Чтобы несколько человек собрались и сделали вместе историю, рассказ о которой будет занимать десятки часов скучного для стороннего наблюдателя, ролика на ютубе. Или “коллекция” комиксов, которая собрана из разных стран, имеющая странный, прихотливый состав и какую-то особую систему.

Что за пост без котейки?

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

Очень вероятно, что когда у меня появится семья, на это будет все сложнее находить время. Но пока собственно вся моя личность состоит именно из вот этого стремления “прокачаться”, оставить после себя какое-то “портфолио”, или, если сказать пафосно, наследие.

И если кто-то программист по другим причинам, с другими взглядами — это нормально. И хотя я так за всю жизнь и не написал ничего успешного, “взлетевшего” и, возможно, даже “стоящего”, надеюсь, что именно на плечах таких программистов как я и будут стоять следующие поколения.

--

--

Responses (4)