
Если ты в кризисе — не накручивай опыт. Создай его. Это бесплатно
⚠️ Не трать время на чтение, если тебе здесь не откликнется
|
До 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 — это путь, это шанс что-то изменить и приглашение туда до сих пор активно. Тебя ждут
ссылка на оригинал статьи https://habr.com/ru/articles/910432/
Добавить комментарий