
Если ты в кризисе — не накручивай опыт. Создай его. Это бесплатно
⚠️ Не трать время на чтение, если тебе здесь не откликнется
До 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 вручную. Никаких |
Однонаправленный поток данных |
Прозрачное понимание: данные идут сверху вниз, нет магии. Это облегчает отладку в разы |
Состояние внутри компонента ( |
Не нужно связывать форму через 100 обработчиков событий. Всё логично, внутри, локально |
Инструменты разработчика |
React DevTools был магией — можно видеть дерево компонентов, отслеживать state/props |
Портируемость и масштабируемость |
Пишешь компонент один раз — используешь везде. Даже в другом проекте. Даже через |
После ряда статей, начал тонуть в куче инструкций и туториалов и первым что проработал был 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$ на карте (ох времена когда оплатить из РФ можно было счет из любой точки мира)
В увольнении
⛏️ напилил расширение
? доделал логотип и описание
? заплатил $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/Stack Overflow профиль заметным
Нам еще много нужно построить прежде чем мы очутимся в мире Трансгуманизма Пелевина. И часть из этого много можешь стать именно ты. И я - разумеется )
Что изменилось фундаментально во мне? Да почти ничего. Я как был энтузиастом разработки, так таким и остался. Просто теперь это стало очевидно не только мне
? Благодарности
Министерству обороны и АГЗ МЧС — за опыт и как платформу для разностороннего развития
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 - это путь, это шанс что-то изменить и приглашение туда до сих пор активно. Тебя ждут