Русский
Русский
English
Статистика
Реклама

Почему бухгалтеров мы можем обучать, а программистов нет

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


Позвали Григория Петрова, DevRelа Evrone.com (ex. Voximplant, Radmin, Digital October Center) ивдохновителя сообщества Moscow Python, рассказать, как писать хороший код самому инаучить команду. Аеще обсудили, как понять, какие механизмы нас тормозят, икак посмотреть нанейрофизиологию через призму прикладной разработки ируководства технической командой. Разговор оказался настолько интересным, что сделали статью поего следам.


Наш гость сам себя называет генералистом. Пишет набольшинстве мейнстримовых языков разработки, кроме Haskell, иинтересуется нейрофизиологией. Вкакой-то момент онпосмотрел насвой предыдущий опыт работы ипонял, что ему нравится писать документацию, объяснять сложные вещи простым языком иобщаться сразработчиками, нонеруководить. Поэтому позиция DevRel (Developer Relations) оказалась для него оптимальной.





Хороший код, что это?


Объективные критерии назвать сложно, укаждого свое мнение. Главное понять, для чего мыпишем код. Конечно, есть разработчики, которые относятся ккоду как кискусству, новосновном оннужен бизнесу, чтобы решать бизнес-задачи ипозволять людям взаимодействовать друг сдругом исинформацией. Добавим, чтоIT как индустрии всего лет 2030, иневсе компании понимают, что именно они хотят икак написатьТЗ спервого раза. Иногда самое интересное открывается только после начала разработки. Поэтому хороший код это поддерживаемый код, который негниет отсобственной сложности заполгода, его можно расширять вразные стороны или пивотнуть влюбое время. Новые разработчики смогут разобраться схорошим кодом заразумное время.


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



Вчем, собственно, проблема?


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




Взято наBonkersworld.

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


Кпримеру, уГригория обучение разработчика доуверенного мидла занимало три года. Всреднем порынку разработчик меняет место работы через полтора поэтому онначал искать способы ускорить обучение. Ведь если мыумеем учить бухгалтеров, топочему сразработчиками так сложно?


Герой перебрал немало методов иостановился нанейрофизиологии, которая дала ответы нанекоторые вопросы омозге икак его правильно использовать.





Немного теории


Современная нейрофизиология понимает множество деталей, нополноценных гипотез оработе памяти или внимания пока нетак много, дапростят нас популяризаторы науки. Мыпонимаем, что впроцессе запоминания нейрон иглия вокруг него меняются, ночто конкретно изэтих изменений обеспечивает память, сказать неможем. Вомногом система внутреннего подкрепления (Reward system) выбирает, что именно мызапоминаем. Она связана сэмоциями, нокак именно она определяет, что важно, нам тоже доконца неясно. Эмоционально окрашенные вещи запоминаются лучше, наэтом основано множество попыток хакнуть механизм, нопока безрезультатно.


Сейчас готовых ответов иинструкций, что конкретно делать, чтобы получить результат, нет, ноесть вполне интересные теории. Например, теория Грациано (Attention Schema Theory) описывает, что такое личность икак работает сознание. Врусской нейрофизиологии есть прекрасная теория когнитома Константина Анохина.




Когнитом. Изпрезентации К.В.Анохина от2015 года

Для нас вэтой теории самое ценное, что вмозге кроме нейронов иихконнектома (всех связей нейронов одного организма) есть дерево смыслов когнитом.


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


Кдвадцати годам получается программист, вголове которого дерево миллионов смыслов. Ониспользует этот когнитом, чтобы думать, читать иписать код. Элементы дерева связаны сдругими элементами практически как граф, удерева есть некое поведение. Чтобы вкогнитом добавить что-то новое, нужно много раз активировать окружающие это смыслы. Например, повторять иностранное слово иего перевод, строить предложения сним.


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


Например, Григорий утверждает, что завремя нашего разговора, оннеможет ниувидеть, ниподумать, нисказать ничего нового. Онможет только креативно комбинироватьто, чему уже научился.



Чем нам это поможет напрактике? Решить ссегодняшнего дня делать все правильно недостаточно


Мыговорим джуну: Тебе надо давать читаемые имена идентификаторам, инам кажется, джун, как вFPS, взял новый BMG изDoom ипошел вбой. Нонет, джун впошаговой стратегии: чтобы новый навык приобрести, ему нужно множество раз повторить одно итоже действие.


Чтобы проявить свободу воли иосвоить новый навык, нужно практиковаться втечение нескольких месяцев.


Например, мыучим новый язык программирования Ruby. Мыпрочитали книгу Руби для чайников, унас активировалось множество смыслов вкогнитоме, апотом потухло. Через месяц мынепомним практически ничего, кроме нескольких кусочков, которые задели наш эмоциональный отклик. Чтобы действительно выучить Ruby, нужно кодить наэтом языке иметодично практиковать написание каждого элемента синтаксиса, который нам плохо знаком.


Для запоминания нового обязательно используйте интервальные повторения (Spaced repetition). Можно пользоваться приложениями наподобие Anki или специализированными программами. Даже вIDE есть функции, которые подсказывают, что здесь можно было использовать hotkey, аздесь такую-то особенность языка. Сотни повторений вразных контекстах верный путь куспеху.


Мыестьто, что мыделаем: недумаем, немечтаем, аименно делаем. Если просто слушаем ичитаем что-то онавыке, томыте, кто хорошо читает ислушает, нонете, кто этим навыком владеет.


Чтобы добиться результатов, нужно:


  • определить какой навык хотим прокачать;
  • сфокусироваться нанем, неожидая быстрого результата;
  • повторять вразных контекстах иразными способами.

Звучит просто, анапрактике? Рассмотрим напримере онбординга.



Онбординг разработчика сразных точек зрения


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


Например, когда человек приходит вEvrone, информация илучшие практики выдаются почастям, асоответствующие механизмы иритуалы, как утренние стендапы ивстречи один наодин, обеспечивают повторение. Через несколько недель или месяцев человек понимает, как компания пишет код, как деплоить, как устроен GitOps иуникальная конфигурация технологического стека. Просто кинуть человеку документацию сработает вочень редких случаях.


ВEvrone перед новым бойцом стоит задача освоить весь инструментарий запервые три месяца инаучиться импользоваться. Для внутреннего общения разработчиков используются slack-каналы. Например, для фронтендера будет доступен канал его проекта иканал фронтендеров. Можно задавать анонимизированные вопросы как вканал фронтендеров, так ивобщий технический чат. Также укаждого сотрудника есть доступ кдашборду, где онотслеживает свой текущий уровень ивекторы развития.




Взято наTeamLead Conf

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



Можноли подготовиться квыходу вновую компанию?


Чтобы войти вкурс, потребуется несколько месяцев. Хорошобы проработать ежедневную практику влюбой ToDo-программке десять пунктов, которые выбудете выполнять каждый день: посмотреть как устроены репозитории вкомпании, пройтись поистории последних коммитов, прочесть одну статью извнутренней wiki, посмотреть один code review итому подобное. Этот механизм нужно отладить, ипосле выхода наработу добавлять всписок новые элементы, ключевые для конкретной компании.



Как все-таки писать хороший код вреальных условиях?


Идеального мира несуществует. Мычасто ограничены либо вовремени, либо вресурсах. Если присутствует хотябы одно изограничений, значит сейчас написать код хорошо уже неполучится. Надо подумать ичестно ответить навопрос: чем можно пожертвовать ичто нанесет минимальный вред вбудущем.


Если мыставим костыли, тоготовыли мывбудущем вернуть технический долг икогда? Договоренности окостылях происходят вовремя цейтнота, иесли незапанировать исправление, костыль останется навсегда. Непотому что программисты плохие люди, апотому что так устроен наш мозг. Чтобы чинить код, нужно организовать процессы. Если релиз выходит снедоработками икостылями, товсистеме управления задачами сразу запланируйте сменеджером недостающие часы разработки нарешение багов иуборку костылей.


Если удалось избавиться отнедоделок, тоостается проблема. Как написать простой код, понятный другим разработчикам? Из-за того, что индустрия молодая инет универсального обучения мывсе самоучки, несмотря напрофильное высшее образование. Пятнадцать лет назад обучали ООП, асейчас Rust иGo считают наследование антипаттерном. Как результат, когнитомы увсех разные. Если взять двух хороших программистов, топересечение деревьев смыслов уних может быть всего 1015 %. Код будет понятным программистам сболее похожими участками когнитомов. Поэтому читаемый код это код, написанный привычными конструкциями. Привычными вэтом языке, вэтом стеке ивэтом году.


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



Способность кобучению ивозраст


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


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


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



Универсальное заклинание


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


Разработчик написал код ихочет понять, насколько онхорош. Задаем вопрос: Рассказываетли этот код историю?. Если другому разработчику нужно два часа, чтобы разобраться, это нехорошо.


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



Что такое пять участков?


Приведем пример. Вызапоминаете подряд семь названных вам цифр (пример такого ряда: 1 9 8 4 4 5 1). Каждая цифра это один элемент, который необходимо удерживать впамяти. Если вашему мозгу удалось распознать паттерн или проассоциировать эти цифры сдатами или книгами, товпамяти нужно будет удерживать только две единицы информации (1984 и451 поФаренгейту), анесемь. Этот прием называется группированием или свертыванием (Chunking).


Для программистов, читающих код, это может быть создание объекта или проход посписку пользователей. Размеры элементов исмыслы, стоящие заними, для всех различны. Это добавляет трудности виспользовании метода, ноГригорий работает над поиском решения иможно ожидать улучшения этого заклинания.


Напоследок нам хочется отметить, что все люди разные. Кто-то отприроды мускулистый, хотя изтяжелого только сумки изсупермаркета приносит, акто-то всю жизнь сидит настрожайшей диете. Есть люди, которые отприроды обладают развесистым деревом смыслов, цепкой или расширенной рабочей памятью. Они наверняка пишут крутой код, быстро читают чужой инеимеют сэтим трудностей. Для всех остальных для нас хороший код писать сложно. Каждому стоит разобраться, почему это сложно лично для него, искать решение проблем иобмениваться опытом сдругими. Надеемся, вместе мысделаем IT-индустрию чуточку лучше.



Рекомендации: что почитать ипосмотреть



  • Книга Кто заглавного (Майкл Газзанига) для тех, кто интересуется работой мозга.


Полное видео беседы сГригорием:



<рекламная пауза>
По статистике g-mate, минимум 3050% работодателей готовы рассматривать удаленку, а релокейт среди локаций на второй месте по популярности. И надоевший всем коронавирус не препятствие: за время пандемии и в России, и за рубежом наём ускорился в 3 раза.
Регистрируйтесь в @g_jobbot, подходящие вам вакансии с релокейтом будут приходить в Телеграм.
</рекламная пауза>
Источник: habr.com
К списку статей
Опубликовано: 11.02.2021 00:06:26
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании gms & g-mate

Учебный процесс в it

Управление персоналом

Карьера в it-индустрии

Собеседования

Карьера

Интервью

Программирование

Обучение программированию

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru