Доброе утро четверга! ^_^

Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃

Сегодня поговорим о том, где разработчикам набираться опыта, вообще и эффективнее всего.

Опрос! Что из перечисленного оказало на вас сильнейшее влияние?
На самом деле понятно, что пункты не взаимоисключающие, в жизни их можно сочетать 🙂

Я попробовал всё, кроме, пожалуй, опен-сорса, и мне сейчас кажется, что самый эффективный способ — это «боевая разработка + ментор».
За весь свой опыт я помню 3 случая, когда рост был взрывным — и все 3 случая были на работе под присмотром ментора 😃
Верстать я начал ещё в школе, но там у меня под рукой лишь были курсы Попова и много свободного времени 😃

Показать результаты особо было не кому, проверить их тоже никто не мог.
Я нашёл эти курсы на Ютубе! 😱🙀🤠

С программированием было прям совсем худо.

Гугл не особо помогал, потому что я ещё не умел нормально гуглить вопросы, которые мне были нужны. Эксперименты часто приводили не к тем результатам, которые были нужны 😅
Первый значительный скачок произошёл году в 2010, на первом большом проекте. Писали на пару с чуваком из, кажется, Австралии: он занимался бэкендом, я фронтом.
Я тогда узнал про Ноду, прокачался во взаимодействии между сервером и браузером, анимации поднатаскал, даже какое-то представление об архитектуре и относительно-нормальных модулях получил.
Я бы не сказал, что он был прям ментором, но на ошибки указывал, хорошие решения подсказывал.

Забавно, что всё это происходило на фрилансе ¯\_(ツ)_/¯
Второй скачок был в команде, где я написал CRM
bespoyasov.ru/projects/reque…

Там познакомился с Реактом, написал первый сервер, потыкал палочкой в Python и Django.

Это всё — тоже под присмотром тимлида. Лёха, привет! 😃
Там и поуправлять другими разработчиками получилось немного, и блог переосмыслить (хотя и к тому времени пока что не начать писать годные технические статьи).
Третий скачок был в D2. Тут техдир открыл мне дорогу в «настоящее программирование™» 😅

Я пописал на шарпе и .net, лучше понял, что такое грамотная архитектура, познакомился с концепциями, о которых раньше представление имел, но очень смутное.
Ну и сейчас я вот занимаюсь R&D проектами всякого около-ML толка. Учусь реализовывать алгоритмы, которые нахожу в разных научных статьях.

При этом я не говорю, что мне не пригодились знания из книг. Пригодились! Просто, чтобы их как-то применять, мало было прочесть 😃
Надо было, чтобы кто-то разжевал что с чем складывать, чтобы оно работало.

К некоторым книгам я возвращаюсь время от времени, потому что осознаю, что понял прочитанное совершенно неправильно.

(Иногда смотрю в конспект, и если вижу, что понял верно, то книгу не перечитываю.)
Университет, пожалуй, был самым малополезным из всех перечисленных пунктов.

Ну то есть, там были попытки привить «инженерный подход» к задачам, а ещё я железки разные потыкал, но больше вещей, которые бы мне были полезны сейчас, я особо не помню.
Хотя не, помню!

Сети с администрированием полезными оказались и плюсы немножко.

Мне, правда, было больше по кайфу в универе слушать лекции по матану, физике и электротехнике. А в остальном я скорее работал на парах, чем слушал.
И вот сейчас смотря на это всё я думаю, что «ментор на работе» — это прям самое эффективное сочетание для роста 😃

А что думаете вы?
Сейчас я доберусь до завтрака и поговорим о плюсах и минусах каждого из пунктов 🙂
Давайте начнём с университета ¯\_(ツ)_/¯

Я понимаю, что не мне с моим дипломом Уфимского технического говорить об университетском образовании, но тем не менее.
Из плюсов я сейчас вижу, пожалуй, нетворкинг. Это именно то, чем я не занимался в университете 😅

Университет — это место, куда попадают люди, с которым можно попробовать что-то вместе сделать.

Не с каждым университетом и не с каждым студентом. Но всё же.
Ещё один плюс — могут научить действительно полезным вещам, если попасть в правильный ВУЗ и на правильную специальность.

Под правильными я тут понимаю такие, которые совпадают с вашими интересами.

Мне повезло наполовину.
Ещё плюс: отсрочка и военная кафедра ¯\_(ツ)_/¯

Я при поступлении уже работал, знал, где хочу развиваться и куда расти — тратить год на армию в мои планы не входило.

Прошёл военную кафедру, ушёл в запас, мне понравилось 😅
Из минусов — образовательные программы по большей части не успевают за рынком.

У нас в программе нейронные сети считались каким-то передовым достижением науки, хотя их все используют кругом.
Офлайн-лекции.

Мне нравилось ходить только на лекции по матану — преподаватель делал из лекции шоу.

Он всегда читал без записей, начинал в левом верхнем углу доски, а в конце занятия ставил жирную точку в нижнем правом.

Всегда травил шуточки по теме и истории из опыта.
Одна единственная специальность.

В 17 лет мне надо выбрать то, чем я буду заниматься ближайшие 5 лет, а то и всю жизнь, А-ха! 😅

Мне нравится концепция major-minor, но остаётся только слюнки пускать. Денег на зарубежный университет у меня не было. (Да и на Москву тоже.)
Преподаватели, которым не хочется учить / хочется утвердиться.

Таких я не помню, чтобы встречал, но слышал рассказы из других ВУЗов.

Это какая-то крайняя дичь вообще, тут обсуждать особо даже нечего.
В общем, всё сильно зависит от ВУЗа, но я больше склоняюсь ко мнению, что мне он оказался почти бесполезен.

Исключение: военный билет, некоторые предметы типа сетей и администрирования.
Курсы! 😃
Я проходил какие-то курсы на Udemy и где-то ещё.

Тут могу сказать, что любые новые знания с курсов надо сразу пробовать включать в работу.

Потому что иначе всё быстро забудется, и толку не будет.
В курсах, мне кажется, самое полезное и важное — обратная связь и сообщество.

Потому что учиться надо на ошибках, так по крайней мере до меня доходит быстрее, так как есть контр-пример.
Курсы без обратной связи тоже имеют право на жизнь, но и стоить они тогда должны совсем копейки или быть бесплатными.
+: курсов огромное количество.
–: а чёрт поймёт, какого они качества 😃

+: можно (хоть и трудно) найти качественную личную программу с персональным наставником.
–: это будет дорого 😃

Хотя если пересчитывать, всё равно дешевле ВУЗа, наверное.
Идём к самому интересному 😃

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

Да, даже если это была галера, это всё ещё опыт.(Мои первые годы после фриланса были на галере.)

Соответственно минус — можно попасть на галеру 😃
Новичкам в боевой разработке трудно определить, они в хорошую компанию вот попали или нет? То, как устроены процессы вот тут, — это нормально? Все так делают?

А можно уходить спустя 3 месяца? А меня куда-то ещё возьмут? 3 месяца — это же мало, наверное.
Другой плюс боевой разработки: нет романтического флёра IT, который иногда продают курсы. Просто ещё одно ремесло.

Изнутри можно посмотреть на «настоящий код™», на компромиссы, как вообще бизнес и разработка связаны, откуда требования берутся и вот это всё.
Минус — это может отпугнуть, если попасть не туда 😞
Ещё один плюс боевой разработки: она помогает бороться с перфекционизмом.

Он мне постоянно мешает, особенно в пет-проектах — там же нет дедлайнов 😃

Внешние ограничения помогают определиться с достаточным уровнем «хорошести».
А если попасть в хорошую команду, то можно найти людей, у которых перенимать опыт.
Что в боевой разработке было для меня сложным: бывали моменты, когда я занимался одним и тем же, не развиваясь вообще.

Ну а чо: работа есть, в компании особо нового ничего не происходит, просто фигачим однотипные сайтики на поток, и норм.

Новых задач не было, а я не замечал.
Особенно отчётливо это было на фрилансе и на галере 😃

Нужно было много работать, чтобы были деньги, но делать приходилось одно и то же. Времени на что-то ещё не оставалось.

Как в такую ловушку не попасть, я хз ¯\_(ツ)_/¯
Видимо, надо какую-то прокачанную осознанность иметь.
Зато я научился многое автоматизировать.
Придумал себе, кхм, «веб-компоненты» 😅
bespoyasov.ru/blog/templates/
Это были такие папки с «компонентами». Каждый компонент состоял из HTML-шаблона, каких-то скелетных стилей и скриптов с логикой.

Обычно это были разные элементы типа слайдеров, каруселей, кастомных селектов и прочего.
Я их подключал, конечно, не одним импортом, а тремя (разметка, стили и скрипты), но работали они независимо друг от друга и от контекста 😃
Там же пришлось научиться и «прогрессивному джипегу» в вёрстке:
bespoyasov.ru/blog/time/

Типа страница готова в любое время, но проработана на какое-то количество процентов.
А вот work-life баланс найти на фрилансе трудно. Для этого, кажется, нужна культура и команда.
Чуть позже поговорим о менторстве 🙂
Продолжим!

Расскажу, почему я считаю, что ментор нужен, почему не только джунам и почему боевая разработка без менторства растит медленнее.
Ментор, как мне кажется, — это не учитель.

Возможно, у меня искажение, но при слове «учитель» я сразу представляю какие-то подчинительско-иерархические отношения.

А это совсем не то, что нужно.
Для меня ментор — это как кто-то кто переехал в другую страну до меня, насобирал шишек и теперь может предупредить меня, как именно стоит переезжать.
Причём, _хорошие_ менторы в состоянии определить, о каких ошибках они могут предупредить меня заранее, а какие — мне бы пошло на пользу _сделать самостоятельно_.

(Ну, может, не сделать, а оказаться в ситуации, которая бы наглядно объяснила, в чём именно проблема.)
Объясню: очень сложно передать какой-то опыт словами.

Слова — это код, модель. (Карта, если хотите.) Они не могут передать реальность (опыт) полностью.

Какие-то ошибки, кажется, просто невозможно «осознать, не сделав».
Хороший ментор в состоянии оценить мой уровень и сделать вывод о том, какие вещи я смогу понять, просто обсудив их, а какие — пока нет.
И вот тут хочется сказать, почему я считаю, что ментор нужен не только джунам.

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

Более того, все решения, которые доступны, на первый взгляд, одинаковы.
Такие задачи ставят в ступор и могут привести к параличу анализа, когда принять решение вообще не получается:
ru.wikipedia.org/wiki/Аналитиче…
Менторы, как более опытные разработчики, могут поделиться опытом решения подобных задач.

Прекрасно — если они уже решали именно такие задачи, пробовали разные решения и знают, какие именно проблемы несёт каждое из них.

(Причём особенно полезно знать проблемы в будущем.)
Но даже если нет, чем больше разнообразного релевантного опыта, тем больше шансов выбрать оптимальное решение для задачи.
Особенно это полезно, когда мы подходим к более философским задачам:

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

Когда я сталкивался с подобными задачами сам, было трудно именно _принимать решение_.
Мне кажется, на более поздних этапах менторы уже скорее идейные вдохновители что ли. Сложно сформулировать 🤔

Они уже не говорят, как правильно. Скорее вы вместе понимаете, как будет, вероятно, менее эффективно.
Для джунов, как по мне, ментор — это вообще обязательно.

Я вот жалею, что у меня было мало возможностей учиться напрямую у кого-то.

Потому что ту часть граблей, о которых я бы мог узнать от кого-то, мне пришлось потоптать самому.
Кстати! Как вы считаете, какими навыками должен обладать хороший ментор?

Понятно, что уметь разжёвывать сложное простым языком — это хорошо. А ещё? 😃
Можем подвести предварительный итог ^_^

Нужны:
- эмпатия и этика;
- умение поставить себя на место ученика;
- планирование и умение подмечать ошибки;
- Т Е Р П Е Н И Е 😃
Скоро закончу с задачами на работе и вернусь, чтобы обсудить опен-сорс 😃
Ну теперь давайте поговорим и об опен-сорсе!

У меня опыта в трушном™ опен-сорсе нет. Весь мой Гитхаб — это пара небольших пакетов да исходники книг:
github.com/bespoyasov/
И я, если честно, не очень понимаю, как эффективно расти через опен-сорс, особенно если я новичок.

Я когда был джуном и смотрел в чьи-то репозитории, думал разве что в документацию законтрибьютить, да и то — непонятно, как: я ж код не понимаю.
Просить объяснить я не могу, потому что просто так буду отнимать у людей время — они же занимаются опен-сорсом в свободное время, им за него (в большей части) не платят.
Просто присылать пул-реквесты — тоже нутакое.

Мейнтейнерам придётся не только отвлечься, но ещё и накатать какой-то фидбек, почему мой пул-реквест не подходит.
Остаётся — делать какие-то библиотечки и пакетики, которые будут кому-то полезны.

Первым у меня был `groontograf` — типограф для Grunt (я старый 😃):
- github.com/bespoyasov/gro…

Но я его быстро забросил.
Было ещё приложеньице для конвертации дат в таймштампы и обратно. Кому-то вроде даже было полезно.

Но опять-таки, я и его забросил, потому что из фидбека была одна ишья и всё 😃
Из каких-то более полезных вещей:

Букмарк, скриптик для навигации по странице
- bespoyasov.ru/bookmark/

Прокрутчик (единственное, что до сих пор частично поддерживаю)
- bespoyasov.ru/scroller/

Но это всё не помогало расти ¯\_(ツ)_/¯
Собственно вопрос: в чём секрет роста через опен-сорс?

Как это делать?
Как это делать этично, чтобы никому не досаждать?
Возможно ли это в принципе? 😃

Поделитесь опытом :—)
Завтра утром подведём итоги сегодняшнего опроса из начала треда и начнём говорить о технических блогах ^_^

- Зачем вообще вести, и как начать писать;
- Насколько глубоко уходить в детали в постах;
- Свой хостинг или блогоплатформа;
- На каком языке писать и другое.
Это первый тред, который не сломался за день ни в одном месте 😅
Итак, самое большое влияние оказала боевая разработка. Ментор на втором месте, университет и курсы — на третьем.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderhood

jsunderhood Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

30 Apr
Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!

- Зачем вообще вести, как начать писать;
- Насколько глубоко уходить в тех. детали в постах;
- Свой хостинг или блогоплатформа;
- Русский или английский язык.

Кидайте ссылки на свои блоги!
Расскажите, ведёте ли вы свой блог?
как начинали?
что подтолкнуло?
что для вас самое сложное?
какие плюшки вы от блога получаете?
Я пока начну и расскажу о своём блоге:
bespoyasov.ru/blog/

Начал я его вести примерно тогда же, когда начал работать. Правда, самые первые посты не сохранились, мой первый пост сейчас 2012 года.

Причин «зачем это надо» могу назвать штук 6. Сейчас пройдёмся по каждой :–)
Read 41 tweets
28 Apr
Да ^_^

Если приходится писать тесты для махрового легаси, которое писали до вас, то советую посмотреть на книжку Физерса «Эффективная работа с легаси»:
bespoyasov.ru/blog/working-e…

Чуть подробнее сегодня писал вот тут:
Он предлагает искать швы — места, в которых можно относительно безопасно «распилить» комбайн на части.

Покрыть швы тестами, а уже потом начинать рефакторинг. Обычно шов — это место, где мы можем заменить одно поведение другим: месте соединения модулей.
В хорошо написанном коде такие места выделены явно, потому что модули слабо зацеплены.

Представьте, где именно вы бы разделили систему на несколько частей (по смыслу, по поведению, по зависимостям) — там и будет шов.
Read 4 tweets
28 Apr
Копипаста, кстати, не всегда однозначное зло:
bespoyasov.ru/blog/copy-past…
Дублирование кода _на ранних этапах_ может показать, как всё на самом деле работает, и какие паттерны мы ещё не увидели.

Удаление дублирования — это прогнозирование будущего. Чем больше исходных данных удастся собрать, тем точнее будет прогноз.
Чтобы не потерять места с копипастой, помечаю их коммент-флагом `DUPLICATE`.

После самого флага пишу, какую функциональность он дублирует. Это даёт флагу осмысленное и уникальное имя, по которому потом проще искать места для рефакторинга.
Read 7 tweets
28 Apr
А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^

Расскажите о своих приёмах, как вы улучшаете кодовую базу на проектах? Какие применяете методы, принципы, эвристики?

Я пока начну 🧶
Самое простое (и одновременно сложное 😃) — это нейминг.

Хорошие и внятные имена для переменных и функций — это очень мощный инструмент.

(Первая книга на тему, которую я прочёл — это «Читаемый код» Фаучера:
bespoyasov.ru/blog/the-art-o… )
Хорошее имя для сущности: короткое, но полное и описательное.

На Гитхабе есть классный чеклист по неймингу сущностей:
github.com/kettanaito/nam…
Read 70 tweets
27 Apr
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.

Пока я заливаю в себя кофе, давайте проведём опрос. Как вы думаете, ООП и фронтенд:
А пока идёт голосование, обсудим, чем ООП плохо и хорошо, а что его не любят и наоборот.

Начнём с хейта 😃
Сразу начну с того, что не каждому проекту ООП нужно.

Иногда гораздо проще написать пару функций с объектами, и никаких солидов не надо. Об этом подробнее в конце 🙂
Read 77 tweets
26 Apr
Теперь немного ссылок на Гитхабы!

Есть несколько шаблончиков для Реакта:
- github.com/eduardomoroni/…
- github.com/bailabs/react_…
Есть и без Реакта!
Вот я писал недавно пост об архитектуре, есть репозиторий для с исходниками:
- github.com/bespoyasov/tre…

А есть и с Реактом, и с Next!
Вот сайт недавно переписывал:
- github.com/bespoyasov/www
Структура файлов в двух последних репозиториях не отражает слои, но из поведение — вполне.

Кстати, репозиторий с сайтом ещё и хорошо показывает, как и когда можно остановить глубину проработки.
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!