Как Армия и open-source помогли мне стартануть карьеру
Если ты в кризисе — не накручивай опыт. Создай его. Это бесплатно

⚠️ Не трать время на чтение, если тебе здесь не откликнется
| До open-source | После open-source | Сейчас | |
|---|---|---|---|
| Временной период | 2014-2016 | с 2017 | 2025 |
| Возраст | 23-25 | 26 | 33 |
| Пол | Мальчик | Мужчина | Зафисит от результатов спринта |
| Роль | Разнорабочий | Front-end разработчик | Лидер платформы по построению интерфейсов (неколько десятков команд) |
| Эмоциональное состояние | Отчаяние | Воодушевление | Привязанное к релизному циклу |
| Я и HRы | Отказы и тишина | Завал предложений | Не в поиске, переодические профильные предложения |
| Состояние карьеры | Неопределенность и застой | Определенность | Ощущение контроля (или иллюзия) |
| Отношение к open-source | Страх | Удивление | Благодарность и желание больше в это инвестировать |
| В посте | Этап описан | Как к нему пришел | Только для этого блока. Чтобы показать, что все в конечном итоге сложилось неплохо |
🚧 Пустыня отчаяния
К 2016-му году я несколько лет как работал разнорабочим разработчиком - проекты/задачи на php, вертска, desktop. Одновременно учился в аспирантуре и параллельно была непрофильная part-time занятость. Доход непостоянный. Работа фултайм оставалась мечтой, к тому же чувствовал, что стою на месте и одна половина знаний быстро устаревает, а вторая - это новые поверхностные которые быстро попадают в первую категорию
Я понимал, что в кризисе и не знал как из него выбраться, на каком я этапе и за что хвататься. Одно было точно - я хочу разрабатывать программное обеспечение.
В отсутствии четкого рецепта я продолжал искать себя, искать то, что мне откликается. Я стал активно перебирать технологии

Я в тот момент
По мере их изучения (технологий) я понимал, что тяготею к разработке GUI. Это как-то по милленеаловски - для меня программа это было всегда то, что я могу кликать. Плюс как разработчику мне нравился моментальный отклик на любые изменения. Но вот незадача - все что я использовал/пробовал для разработки GUI мне не нравилось. То есть болей было больше чем плюсов. DX был ужасным, а UI/UX был тяжел в кастомизации
Ниже идет список направлений которые я протестировал и причины по которым они мне не зашли. Эти разделы можно пропустить и перейти к следующему "Озарение"
GUI на QT (C++)
- проект на
Qt- этоC++, а значит, долгие сборки, хрупкийtoolchain, и головная боль отmoc,qmake,cmake,.pro,.priфайлов Qt Creator- тяжёлыйIDE, который на слабых машинах еле дышал- разные версии
Qtмогли конфликтовать с системными зависимостями. Особенно ад был наLinux- отсутствие нужных пакетов, несовместимыеglibcи т.п - даже простые формы выглядели как некрасивый бизнес-интерфейс из начала нулевых
- делать кастомную стилизацию - боль
- в то время не было нормальных курсов и документации на русском, приходилось лазить по устаревшим форумам
- под Windows
Qtработает нормально, подLinux- зависит от окружения и библиотек, подmacOS- костыли
GUI на JavaFX
- мёртвый комьюнити -
JavaFXдавно не на волне. И даже в те годы когда он позиционировался как новый шаг для построенияGUI, реакции от сообщества я не увидел - тяжеловесность - запуск Java-приложения для простой панели - это как арендовать грузовик, чтобы перевезти рюкзак
- проблемы с интеграцией в браузер - это отдельный кошмар. В те года меня задело легаси в виде аплетов, поэтому я на это обращал внимание
GUI на PHP
Оговорка сразу - PHP как шаблонизатор. В какой-то момент он часто фигурировал в контексте такого паттерна. Это и меня не обошло стороной
GUI на jQuery
- отсутствие принятых сообществом стандартов - в построении клиентских приложений где сердцем является
jQuery. - каждое приложение отличается от другого как день и ночь - императивный ад - каждый шаг
UI— это отдельный клик/обработчик/костыль - проблемы с масштабируемостью - сложнее поддерживать состояние, особенно при нескольких компонентах
- глубокий техдолг -
UIнаjQueryбыстро превращается вspaghetti-code, особенно без модульности
Подходит для кнопки “показать/скрыть”, но не для полноценного интерактивного виджета/приложения
GUI на XSLT (с трансформацией XML)
- это пытка - подход на
XSLTэто будто бы ты пишешьUIв формате бухгалтерской отчётности - большой порог вхождения.
XSLTэто не язык, а язык трансформации. Ошибку дебажить — страдание - невозможность реактивного обновления. Всё построено на "трансформировал → показал". Забудь про динамику
- кроссбраузерность плохая. Особенно в условиях, где нет стабильных версий браузеров
Подойдёт разве что для генерации печатных форм. Но не UI в нормальном смысле
GUI на Android
XML-маркировка интерфейсов была неудобной- работать с
RecyclerViewиListView— как собирать IKEA без инструкций - анимации? Нет, спасибо
- поддержка разных экранов,
dpi, ориентаций — вечная головная боль Android 2.3(Gingerbread), 4.0 (Ice Cream Sandwich), 4.1–4.4 (Jelly Bean/KitKat), 5.0 (Lollipop) — каждая версия со своими багами, UI API, багами рендеринга и различиями в поведении- любое неправильное обращение с
WakeLock,ServicesилиAsyncTaskмогло просто убить батарею. А ты об этом узнаешь... в отзывах
Озарение
Помощь от Habr
И вот в один момент я наткнулся на habr на статью которая сравнивала React и Angular и тут-же сделал следующие вывод
Зачем мне desktop и "fullstack" интерфейсы (с участием
phpиjava)? Ведь проще передать кому-нибудь ссылку, нежели бинарник
Чем зашел Angular
Это был просто шок. Вот я пишу на jQuery и тут я получаю
- двусторонняя привязка данных
ng-if,ng-repeat,ng-show— и всё реально работает$scope,$http,$watch— магия реактивности, без ручной подписки- шаблоны в
HTML, логика в контроллере, сервисы — всё разнесено по слоям - Ты просто пишешь
{{name}}— и оно появляется. Безdocument.createElement
Это был настоящий
фреймворк, а небиблиотека-костыль. Он не просил «допиши здесь», он строилархитектуру.
И пусть он тормозил, но это было в 1000 раз чище и концептуальнее, чем любой мой опыт до этого
Чем зашел React
Тут у меня произошел отвал
| Эффект | Почему это было вау |
|---|---|
| Компоненты как функции | Ты больше не описываешь DOM руками. Ты пишешь `UI как функции от состояния. И это работает |
JSX | Шок: HTML прямо в JavaScript? Это нарушает все догмы... но это невероятно удобно |
Virtual DOM | "Он пересчитывает только то, что нужно" — значит, я могу просто описывать, как должно быть, а не мутировать DOM вручную. Никаких getElementById |
| Однонаправленный поток данных | Прозрачное понимание: данные идут сверху вниз, нет магии. Это облегчает отладку в разы |
Состояние внутри компонента (setState) | Не нужно связывать форму через 100 обработчиков событий. Всё логично, внутри, локально |
| Инструменты разработчика | React DevTools был магией — можно видеть дерево компонентов, отслеживать state/props |
| Портируемость и масштабируемость | Пишешь компонент один раз — используешь везде. Даже в другом проекте. Даже через npm |
После ряда статей, начал тонуть в куче инструкций и туториалов и первым что проработал был AngularJs. Но, не все так просто
Распутье
Пока я всем этим занимался, время защиты диссертации подходило все ближе и вот стоял выбор
- работа преподователем экономической теории
- или продолжать заниматься разработкой и полностью переходить во
Front-End
У каждого из этих пунктов были свои плюсы и минусы
| Работа преподователем | Работа разработчиком | |
|---|---|---|
| Деньги | Мало | Больше |
| Интересность | Начало утомлять | Интересно |
| Чтобы перекатиться | Нужна защита диссертации | Нужно сходить в Армию |
Получив такой расклад, я осознал, что склоняюсь ко второму пункту. В нем я нашел следующие плюсы
- служить всего год
- займусь здоровьем
- заодно отдохну (катастрофически невысыпался)
- а наукой, если будет время и желание, всегда смогу заняться
Путь в Армию
Вот только одно но - я переживал, что в течении года сильно отстану от индустрии и мне придется наверстывать упущенное. То есть я займусь любимым делом только спустя 1.5 года (по моим оценкам на тот момент)
Стал искать решение. Нашел следующие варианты службы которые позволят параллельно инвестировать в знания
- какая-то полугражданская служба связанная с
почтой россии. Не помню детали, но там было что-то про службу в 2 года (или больше). Не годится - служба в
научной роте. Хм, интересно. Направил 3 письма в разные роты
Ответ пришел из двух, но мне больше всего понравилась рота МЧС
Расписывать долго, вкратце - из двух заданий которые мне дали в качестве вступительных сделал одно и по его результатам меня и взяли
Задания были такими
- ⛔ написать модель прогнозирования техногенных катастроф (или пожаров, не помню)
- ✅ написать систему по автоматизации одного процесса (написал на
AngularJS,PHP)
Процесс был крайне увлекательням. Я слишком поздно подал заявку на службу и у меня оставалось 11 дней
- на первое задание я потратил 3 дня
- 1 день ушел на то, чтобы приехать и сказать, что я не справился
- 7 дней ушло на создание рабочей версии. Пришлось самоизолироваться на все эти дни и жить только этой задачей
🪖 Армейская служба
И вот 2017 год. Я прошел КМБ в Ногинске и уже прохожу службу в научной роте. Распорядок такой
- с утра — лаборатория, лекции и код
- вечером — наряды и армейский быт
У каждого из моих сослуживцев была своя конкретная задача. Среди нас были физики, математики, разработчики - кто что делал понятно
Моей задачей было написание системы для НИЦ (научно исследовательский центр). Так вот офицер который был Product Owner данной системы каждый раз когда приходил, задавал одну и туже последовательность вопросов
Офицер: Ну что Кас, как дела с сайтом?
Я: докладываюсь
Офицер: Сколько строчек кода написал?
Я: в ступоре
До этого момента меня ни разу не спрашивали про строки кода. Да и сам я не интересовался
📦 День 1 — MVP
Провожу свой день в наряде по узлу связи. Его суть сводилась к следующему
- прием заявки на починку техники
- забор сломанного оборудования и его транспортировка на узел
- починка
- доставка назад и закрытие заявки. Между заявками, иногда можно было посидеть в интернете. И вот пока я шел с очередной заявки мне пришла в голову мысль
Почему я каждый раз перед докладом вручную делаю прогон скрипта который считает
LOC? Я вообще не хочу этим заниматься. Надо это автоматизировать. Пусть когда офицер открывает систему видит виджет который отражает текущее число строк
В итоге начал исследовать эту тему в перерыве между заявками и наткнулся на вопрос на StackOverflow. Тезисы
- как я хочу реализовать быстро сделать не получится
- у
GitHubнетAPIкоторое мне нужно - но у
GitHubесть ручка которая позволяет приблизительно посчитать эту цифру. И вцелом, для поверхностного анализа ее хватает
Мое внимание привлек один ответ в котором содержался следующий сниппет
'use strict';
async function countGithub(repo) {
const response = await fetch(`https://api.github.com/repos/${repo}/stats/contributors`)
const contributors = await response.json();
const lineCounts = contributors.map(contributor => (
contributor.weeks.reduce((lineCount, week) => lineCount + week.a - week.d, 0)
));
const lines = lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount);
window.alert(lines);
}
countGithub('jquery/jquery'); // or count anything you like
Как только я наткнулся на этот скрипт и протестировал его на пару public реп, раздался звонок и мне нужно было бежать по заявке. Пока я бежал все мысли были только об этом участке кода. Я очень торопился, пропускал мимо ушей что мне говорили и когда я вернулся с чем-то на узел и увидев что никого нет бросился к компьютеру, чтобы продолжить работу
- скачал
IDE - спулил исходники системы, чтобы на этом ПК они тоже были (служить предстояло еще месяцев 10, и я точно понимал, что они тут пригодятся)
- и начал искать способ как посчитать
LOCв private репозитории - быстро сгенерил токен, поправил скрипт и увидел нужный мне результат
Как сейчас помню, откинулся на спинку кресла и стал наслаждаться этим моментом. Именно тут я ощутил переломный момент и что я выхожу из пустыни. Хотя скрипт не мой, задача мега-супер-тривиальная, но именно ощущение того, что я начинаю решать свои проблемы. Внезапно влетает товарищ майор и обращает внимание на то, что я слишком счастливый, а рядом лежит непочиненное оборудование. Я быстро запушил результат в репу и бросился разбираться с чем-то. Вроде ПК, но могу ошибаться. И когда работа была готова я понял, что не знаю кому относить и как фиксировать эту заявку. Благо у оборудования был инвентарный номер и мне сказали куда нести. Только вот, видимо, офицер переезжал с кабинета в кабинет и я принес компьютер не туда. В конечном счете худое испуганное лицо рядового сыграло мне на руку и сильно на меня ругаться никто не стал
⚙️ День 2 — тесты
На следующий день во время доклада я показал систему и когда офицер спросил за количество строк я с ощущением, что я крутой хакер перешел на вкладку где виджет посчитал это количество
Офицер: Как это получилось?
Я: рассказываю
Офицер: Это надо убрать и доступ закрыть
Я: Исходники в приватном репозитории
Офицер: Но ты же как-то туда получил доступ по ссылке
Я: Аутентифицировавшись по токену который выпускается в личном кабинете
Офицер: Значит кто угодно может получить доступ
Я: Если у них есть мой логин и пароль
Офицер: Ну у тебя же он есть
Я: в замешательстве
Только по ходу службы я понял, что товарищ офицер был любителем потроллить солдат. Сам он был кандидатом технических наук и имел многочисленные работы по прогнозированию техногенных пожаров (или катастроф) и курировал разработку многих систем в министерстве. Ну и служба, армейская служба - ей тоже успевал заниматься
🚀 День 3 — публикация
После разговора я решил, что такая задача может возникнуть не только у меня и надо бы как-то ей поделиться с миром. Начал думать и понял, что лучше всего будет распространять этот скрипт в качестве браузерного расширения. Как только я это понял я сразу стал ждать очередного наряда на узел связи
Наряд выпал на субботу, и в день когда я буду половину дня в наряде а во второй уйду в увольнение. Как только я пришел на узел связи утром, у меня образовалось свободное время в виде 1 часа до завтрака с подразделением
Я
- быстро нашел инструкцию по разработке расширений
- изучил процесс публикации и понял что мне нужно 25$
- спроектировал логотип, название, обертку
- и отправил домой сообщение, что по приезду мне нужно часа 4 и 25$ на карте (ох времена когда оплатить из РФ можно было счет из любой точки мира)
В увольнении
- ⛏️ напилил расширение (Gloc chrome extension)
- 🎨 доделал логотип и описание
- 💰 заплатил $25 за размещение в
Chrome Web Store - ✅ отправил всё на модерацию
С тех пор прошло 8 лет за которые
- вышли десятки релизов
- мигрировал проект на React
- работал с пользователями. Самые проблемные отзывы - это одиночные сообщения или комментарии что ничего не работает или просто одна звезда
- боролся со спамом. Множество небольших компаний пытаются купить нишевые расширения
- один раз такое "партнёрство" превратило расширение в malware — но это отдельная история
- были внезапные хотфиксы по невнимательности
- решение вопросов производительности и оптимизации. Это было не похоже на типичные
Front-Endприложения. Например у меня были версии которые работали долго весом в несколько KB и быстро работали весом в несколько MB. И из-за особенностей типа приложения просадки превращались в блокеры
💎 Что это мне дало
Как разработчику
Получить новые знания
- разработка нового типа ПО
- поддержка - работа с отзывами, багфикс, улучшения, миграции на новые стандарты браузеров и магазинов расширений, работа с представителями магазинов
- маркетинг - исследование конкурентов и формирование бэклога
- мониторинг - анализ статистики установок, активности, отзывов. И учет этой информации в составлении бэклога
Сделать следующие выводы
- людям важна интуитивность а не чтение документации. Дисклеймеры/оправдания их не интересуют
- люди чувствительны к неудобствам
- люди очень внимательно относятся к вопросам информационной безопасности. Был случай когда я добавил запрос дополнительного разрешения (сейчас уже не вспомню зачем). Так на следующий день после релиза я получил много гневных сообщений с инструкциями о том куда мне идти и как долго
- если предоставить удобные точки контрибуции, то сообщество быстро включится в процесс. У меня это стало
- единый конфиг точек монтирования виджета. Каждый мог легко его поправить
- интернационализация - файлы и google форма
- если идея попала в точку и ей дан неплохой старт (в моем случае
StackOverflow), то сообщество само подхватывает ее и начинает предлагать новые решения, инструменты, фичи, искать баги и популяризовать его. В какой то момент уже этот продукт начинает самопозиционироваться, то есть говорить его владельцу чем он должен быть - даже маленький продукт требует большого количества усилий, уязвимостей и потенциальных векторов развития. Я стал лучше осознавать сложность всего цикла работ и каждого этапа над продуктом
Как соискателю
Буст профиля на StackOverflow и на GitHub
Когда я выходил на поиск работы, то не я откликался на вакансии, а ко мне приходили рекрутеры именно после просмотра моих профилей. Зачастую это были самые приятные собесы где меня спрашивали про этот проект и про то как я решал конкретные задачи. Разумеется - это был фрагмент беседы, а не все интервью. Да и на тот момент уже было несколько небольших open-source (wordpress тема, мини 3D игра)
Понял, что преимущество open-source для этого этапа еще и в том, что это публичная активность в отличие от типичной работы, что тут все исходники открыты, продукт в live режиме. И тут HR может изучить то как ты общаешься с community, а те кто проводят tech-интервью посмотреть на код
Ну и само приложения неплохо забустилось, просто по инерции. Ниже статистика по пользователям

Скрин кабинета на текущий момент
📈 Эффект приложения на языке фактов
- 🔥 600+ звёзд на
GitHub - 📊 2300+ репутации на StackOverflow (больше 30% от общей репутации моего профиля)
- 🧊 Проект попал в GitHub Arctic Vault
- 📚 Упоминания в книгах:
Code Clone Analysis. Research, Tools, and Practices (2021)Service-Oriented and Cloud Computing (2018)
- 💬 Упоминания в публикациях на
StackOverflow,Dev.to, блоги, отзывы, переводы на десятки языков - 📥 Использовался преподавателями, студентами, писателями, разработчиками
- 👥 знакомство с десятками энтузиастов по всему миру - разработчики, дизайнеры, исследователи
🧠 Что я понял про open-source

Open-Source— это про страсть, а не идеальные условия- Людям важна интуитивность, не документация
- Даже маленький проект требует огромного внимания к UX, безопасности и мониторингу
- Если дать удобные точки входа, сообщество само включится в развитие
- Даже простой виджет может сделать твой
GitHub/StackOverflowпрофиль заметным - Нам еще много нужно построить прежде чем мы очутимся в мире Трансгуманизма Пелевина. И часть из этого много можешь стать именно ты. И я - разумеется )
- Что изменилось фундаментально во мне? Да почти ничего. Я как был энтузиастом разработки, так таким и остался. Просто теперь это стало очевидно не только мне
🙏 Благодарности
- Министерству обороны и АГЗ МЧС — за опыт и как платформу для разностороннего развития
- Microsoft Edge Store - за приглашение в числе первых разработчиков протестировать загрузку браузерных расширений
- Curtis Conard — за мой первый донат
- Laura Reen — за бесплатные иконки и логотип к приложению
- Переводчикам и контрибьюторам со всего мира ❤️
- Suzana Gonçalves - translation into Portuguese (Brazil)
- Kassandra Palma - translation into Spanish (Latin America and Caribbean)
- Lawrence Chou - translation into Chinese (Taiwan)
- Maria Markhaichuk - translation into Ukranian
- Rahmi Tufanoglu - translation into German
- Jonny Hsy - translation into Chinese (China)
- Ryo SHIINA - translation into French and Japanese
- Paweł Idzikowski - translation into Polish
- Radoslav Mandev - translation into Bulgarian
- Thai Nguyen - translation into Vietnamese
- Tom V. - translation into Dutch
- Habr за огромное количество статей. Особенно про истории которые вдохновляют и помогают сделать правильный жизненный выбор
Open-Sourceне только для людей с именем Линус и продуктами всемирного масштаба. Просто найди проблему, которая бесит тебя лично и реши ее
Когда будут критиковать, отбрось эмоции и услышь рациональное зерно. У сообщества нет времени на романтику, но есть на дельные советы. Коллективный разум - рулит
Open-Source- это путь, это шанс что-то изменить и приглашение туда до сих пор активно. Тебя ждут