Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том, где разработчикам набираться опыта, вообще и эффективнее всего.
Опрос! Что из перечисленного оказало на вас сильнейшее влияние?
На самом деле понятно, что пункты не взаимоисключающие, в жизни их можно сочетать 🙂
Я попробовал всё, кроме, пожалуй, опен-сорса, и мне сейчас кажется, что самый эффективный способ — это «боевая разработка + ментор».
За весь свой опыт я помню 3 случая, когда рост был взрывным — и все 3 случая были на работе под присмотром ментора 😃
Верстать я начал ещё в школе, но там у меня под рукой лишь были курсы Попова и много свободного времени 😃
Показать результаты особо было не кому, проверить их тоже никто не мог.
Я нашёл эти курсы на Ютубе! 😱🙀🤠
С программированием было прям совсем худо.
Гугл не особо помогал, потому что я ещё не умел нормально гуглить вопросы, которые мне были нужны. Эксперименты часто приводили не к тем результатам, которые были нужны 😅
Первый значительный скачок произошёл году в 2010, на первом большом проекте. Писали на пару с чуваком из, кажется, Австралии: он занимался бэкендом, я фронтом.
Я тогда узнал про Ноду, прокачался во взаимодействии между сервером и браузером, анимации поднатаскал, даже какое-то представление об архитектуре и относительно-нормальных модулях получил.
Я бы не сказал, что он был прям ментором, но на ошибки указывал, хорошие решения подсказывал.
Забавно, что всё это происходило на фрилансе ¯\_(ツ)_/¯
Там познакомился с Реактом, написал первый сервер, потыкал палочкой в Python и Django.
Это всё — тоже под присмотром тимлида. Лёха, привет! 😃
Там и поуправлять другими разработчиками получилось немного, и блог переосмыслить (хотя и к тому времени пока что не начать писать годные технические статьи).
Третий скачок был в D2. Тут техдир открыл мне дорогу в «настоящее программирование™» 😅
Я пописал на шарпе и .net, лучше понял, что такое грамотная архитектура, познакомился с концепциями, о которых раньше представление имел, но очень смутное.
Ну и сейчас я вот занимаюсь R&D проектами всякого около-ML толка. Учусь реализовывать алгоритмы, которые нахожу в разных научных статьях.
При этом я не говорю, что мне не пригодились знания из книг. Пригодились! Просто, чтобы их как-то применять, мало было прочесть 😃
Надо было, чтобы кто-то разжевал что с чем складывать, чтобы оно работало.
К некоторым книгам я возвращаюсь время от времени, потому что осознаю, что понял прочитанное совершенно неправильно.
(Иногда смотрю в конспект, и если вижу, что понял верно, то книгу не перечитываю.)
Университет, пожалуй, был самым малополезным из всех перечисленных пунктов.
Ну то есть, там были попытки привить «инженерный подход» к задачам, а ещё я железки разные потыкал, но больше вещей, которые бы мне были полезны сейчас, я особо не помню.
Хотя не, помню!
Сети с администрированием полезными оказались и плюсы немножко.
Мне, правда, было больше по кайфу в универе слушать лекции по матану, физике и электротехнике. А в остальном я скорее работал на парах, чем слушал.
И вот сейчас смотря на это всё я думаю, что «ментор на работе» — это прям самое эффективное сочетание для роста 😃
А что думаете вы?
Сейчас я доберусь до завтрака и поговорим о плюсах и минусах каждого из пунктов 🙂
Давайте начнём с университета ¯\_(ツ)_/¯
Я понимаю, что не мне с моим дипломом Уфимского технического говорить об университетском образовании, но тем не менее.
Из плюсов я сейчас вижу, пожалуй, нетворкинг. Это именно то, чем я не занимался в университете 😅
Университет — это место, куда попадают люди, с которым можно попробовать что-то вместе сделать.
Не с каждым университетом и не с каждым студентом. Но всё же.
Ещё один плюс — могут научить действительно полезным вещам, если попасть в правильный ВУЗ и на правильную специальность.
Под правильными я тут понимаю такие, которые совпадают с вашими интересами.
Мне повезло наполовину.
Ещё плюс: отсрочка и военная кафедра ¯\_(ツ)_/¯
Я при поступлении уже работал, знал, где хочу развиваться и куда расти — тратить год на армию в мои планы не входило.
Прошёл военную кафедру, ушёл в запас, мне понравилось 😅
Из минусов — образовательные программы по большей части не успевают за рынком.
У нас в программе нейронные сети считались каким-то передовым достижением науки, хотя их все используют кругом.
Офлайн-лекции.
Мне нравилось ходить только на лекции по матану — преподаватель делал из лекции шоу.
Он всегда читал без записей, начинал в левом верхнем углу доски, а в конце занятия ставил жирную точку в нижнем правом.
Всегда травил шуточки по теме и истории из опыта.
Одна единственная специальность.
В 17 лет мне надо выбрать то, чем я буду заниматься ближайшие 5 лет, а то и всю жизнь, А-ха! 😅
Мне нравится концепция major-minor, но остаётся только слюнки пускать. Денег на зарубежный университет у меня не было. (Да и на Москву тоже.)
Преподаватели, которым не хочется учить / хочется утвердиться.
Таких я не помню, чтобы встречал, но слышал рассказы из других ВУЗов.
Это какая-то крайняя дичь вообще, тут обсуждать особо даже нечего.
В общем, всё сильно зависит от ВУЗа, но я больше склоняюсь ко мнению, что мне он оказался почти бесполезен.
Исключение: военный билет, некоторые предметы типа сетей и администрирования.
Курсы! 😃
Я проходил какие-то курсы на Udemy и где-то ещё.
Тут могу сказать, что любые новые знания с курсов надо сразу пробовать включать в работу.
Потому что иначе всё быстро забудется, и толку не будет.
В курсах, мне кажется, самое полезное и важное — обратная связь и сообщество.
Потому что учиться надо на ошибках, так по крайней мере до меня доходит быстрее, так как есть контр-пример.
Курсы без обратной связи тоже имеют право на жизнь, но и стоить они тогда должны совсем копейки или быть бесплатными.
+: курсов огромное количество.
–: а чёрт поймёт, какого они качества 😃
+: можно (хоть и трудно) найти качественную личную программу с персональным наставником.
–: это будет дорого 😃
Хотя если пересчитывать, всё равно дешевле ВУЗа, наверное.
Идём к самому интересному 😃
Давайте следующим пунктом выберем боевую разработку.
Несомненный жирнейший плюс — это настоящий рабочий опыт, которым можно светить в резюме.
Да, даже если это была галера, это всё ещё опыт.(Мои первые годы после фриланса были на галере.)
Соответственно минус — можно попасть на галеру 😃
Новичкам в боевой разработке трудно определить, они в хорошую компанию вот попали или нет? То, как устроены процессы вот тут, — это нормально? Все так делают?
А можно уходить спустя 3 месяца? А меня куда-то ещё возьмут? 3 месяца — это же мало, наверное.
Другой плюс боевой разработки: нет романтического флёра IT, который иногда продают курсы. Просто ещё одно ремесло.
Изнутри можно посмотреть на «настоящий код™», на компромиссы, как вообще бизнес и разработка связаны, откуда требования берутся и вот это всё.
Минус — это может отпугнуть, если попасть не туда 😞
Ещё один плюс боевой разработки: она помогает бороться с перфекционизмом.
Он мне постоянно мешает, особенно в пет-проектах — там же нет дедлайнов 😃
Внешние ограничения помогают определиться с достаточным уровнем «хорошести».
А если попасть в хорошую команду, то можно найти людей, у которых перенимать опыт.
Что в боевой разработке было для меня сложным: бывали моменты, когда я занимался одним и тем же, не развиваясь вообще.
Ну а чо: работа есть, в компании особо нового ничего не происходит, просто фигачим однотипные сайтики на поток, и норм.
Новых задач не было, а я не замечал.
Особенно отчётливо это было на фрилансе и на галере 😃
Нужно было много работать, чтобы были деньги, но делать приходилось одно и то же. Времени на что-то ещё не оставалось.
Как в такую ловушку не попасть, я хз ¯\_(ツ)_/¯
Видимо, надо какую-то прокачанную осознанность иметь.
Типа страница готова в любое время, но проработана на какое-то количество процентов.
А вот work-life баланс найти на фрилансе трудно. Для этого, кажется, нужна культура и команда.
Чуть позже поговорим о менторстве 🙂
Продолжим!
Расскажу, почему я считаю, что ментор нужен, почему не только джунам и почему боевая разработка без менторства растит медленнее.
Ментор, как мне кажется, — это не учитель.
Возможно, у меня искажение, но при слове «учитель» я сразу представляю какие-то подчинительско-иерархические отношения.
А это совсем не то, что нужно.
Для меня ментор — это как кто-то кто переехал в другую страну до меня, насобирал шишек и теперь может предупредить меня, как именно стоит переезжать.
Причём, _хорошие_ менторы в состоянии определить, о каких ошибках они могут предупредить меня заранее, а какие — мне бы пошло на пользу _сделать самостоятельно_.
(Ну, может, не сделать, а оказаться в ситуации, которая бы наглядно объяснила, в чём именно проблема.)
Объясню: очень сложно передать какой-то опыт словами.
Слова — это код, модель. (Карта, если хотите.) Они не могут передать реальность (опыт) полностью.
Какие-то ошибки, кажется, просто невозможно «осознать, не сделав».
Хороший ментор в состоянии оценить мой уровень и сделать вывод о том, какие вещи я смогу понять, просто обсудив их, а какие — пока нет.
И вот тут хочется сказать, почему я считаю, что ментор нужен не только джунам.
Мидлы и сеньоры могут сталкиваться с проблемами, у которых нет однозначного решения.
Более того, все решения, которые доступны, на первый взгляд, одинаковы.
Такие задачи ставят в ступор и могут привести к параличу анализа, когда принять решение вообще не получается: ru.wikipedia.org/wiki/Аналитиче…
Менторы, как более опытные разработчики, могут поделиться опытом решения подобных задач.
Прекрасно — если они уже решали именно такие задачи, пробовали разные решения и знают, какие именно проблемы несёт каждое из них.
(Причём особенно полезно знать проблемы в будущем.)
Но даже если нет, чем больше разнообразного релевантного опыта, тем больше шансов выбрать оптимальное решение для задачи.
Особенно это полезно, когда мы подходим к более философским задачам:
- Как не оверинжинирить, но при этом не копить техдолг сверх меры и быть в состоянии масштабироваться?
- В какой момент пора купировать перфекционизм?
- Как работать с ограничениями при проектировании?
- ...Как управлять по-настоящему большими кодовыми базами?
- Как управлять людьми, как делить нагрузку, на что обращать внимание?
- Да много чего ещё.
Когда я сталкивался с подобными задачами сам, было трудно именно _принимать решение_.
Мне кажется, на более поздних этапах менторы уже скорее идейные вдохновители что ли. Сложно сформулировать 🤔
Они уже не говорят, как правильно. Скорее вы вместе понимаете, как будет, вероятно, менее эффективно.
Для джунов, как по мне, ментор — это вообще обязательно.
Я вот жалею, что у меня было мало возможностей учиться напрямую у кого-то.
Потому что ту часть граблей, о которых я бы мог узнать от кого-то, мне пришлось потоптать самому.
Кстати! Как вы считаете, какими навыками должен обладать хороший ментор?
Понятно, что уметь разжёвывать сложное простым языком — это хорошо. А ещё? 😃
Можем подвести предварительный итог ^_^
Нужны:
- эмпатия и этика;
- умение поставить себя на место ученика;
- планирование и умение подмечать ошибки;
- Т Е Р П Е Н И Е 😃
Скоро закончу с задачами на работе и вернусь, чтобы обсудить опен-сорс 😃
Ну теперь давайте поговорим и об опен-сорсе!
У меня опыта в трушном™ опен-сорсе нет. Весь мой Гитхаб — это пара небольших пакетов да исходники книг: github.com/bespoyasov/
И я, если честно, не очень понимаю, как эффективно расти через опен-сорс, особенно если я новичок.
Я когда был джуном и смотрел в чьи-то репозитории, думал разве что в документацию законтрибьютить, да и то — непонятно, как: я ж код не понимаю.
Просить объяснить я не могу, потому что просто так буду отнимать у людей время — они же занимаются опен-сорсом в свободное время, им за него (в большей части) не платят.
Просто присылать пул-реквесты — тоже нутакое.
Мейнтейнерам придётся не только отвлечься, но ещё и накатать какой-то фидбек, почему мой пул-реквест не подходит.
Остаётся — делать какие-то библиотечки и пакетики, которые будут кому-то полезны.
Собственно вопрос: в чём секрет роста через опен-сорс?
Как это делать?
Как это делать этично, чтобы никому не досаждать?
Возможно ли это в принципе? 😃
Поделитесь опытом :—)
Завтра утром подведём итоги сегодняшнего опроса из начала треда и начнём говорить о технических блогах ^_^
- Зачем вообще вести, и как начать писать;
- Насколько глубоко уходить в детали в постах;
- Свой хостинг или блогоплатформа;
- На каком языке писать и другое.
Это первый тред, который не сломался за день ни в одном месте 😅
Итак, самое большое влияние оказала боевая разработка. Ментор на втором месте, университет и курсы — на третьем.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
- Зачем вообще вести, как начать писать;
- Насколько глубоко уходить в тех. детали в постах;
- Свой хостинг или блогоплатформа;
- Русский или английский язык.
Кидайте ссылки на свои блоги!
Расскажите, ведёте ли вы свой блог?
как начинали?
что подтолкнуло?
что для вас самое сложное?
какие плюшки вы от блога получаете?
Если приходится писать тесты для махрового легаси, которое писали до вас, то советую посмотреть на книжку Физерса «Эффективная работа с легаси»: bespoyasov.ru/blog/working-e…
Дублирование кода _на ранних этапах_ может показать, как всё на самом деле работает, и какие паттерны мы ещё не увидели.
Удаление дублирования — это прогнозирование будущего. Чем больше исходных данных удастся собрать, тем точнее будет прогноз.
Чтобы не потерять места с копипастой, помечаю их коммент-флагом `DUPLICATE`.
После самого флага пишу, какую функциональность он дублирует. Это даёт флагу осмысленное и уникальное имя, по которому потом проще искать места для рефакторинга.