The Best Programmer I Know • Daniel Terhorst-North • GOTO 2024 (Рубрика Leadership)
Интересное выступление Дэниела Терхорст-Норта (презентация тоже доступна), в котором он поделился своими наблюдениями о том, что делает хорошего программиста отличным. Фактически он разбил все наблюдения на три категории 1) Getting the job done 2) Choosing the right tool 3) Caring about the team
Part 1 - Getting the job done 1) Just start - для того, чтобы сделать работу, важно ее начать, а многим инженерам перфекционизм мешает это сделать:)
- Resist procrastinating - иногда перфекционизм превращается в прокрастинацию, с которой надо бороться
- Know you don’t know - первая версия не обязана быть правильной или хорошей, все равно она будет переписана
- Iterate wildly - это про test and learn и извлечение знаний из опыта (Try, fail, learn, repeat) 2) Build a product - мы не просто пишем код, а создаем продукт - Invest in the outcome - собственно, должна быть какая-то цель и привязанность должна быть не к коду, а к достижению результата - Study the domain - важно понимать домен и разговаривать на языке домена - Watch your users - лучший способ получить обратную связь от пользователей — провести время с ними. Так вы сможете понять что мешает им и поправить это в продукте 3) Solve for now - Learn to see what is really there - важно научиться видеть глубже - Solve the real problem - важно решать реальные проблемы, а не те, которые кажутся таковыми. - Strive for simplicity - нужно стремиться к простым решениям, а не плодить complexitty
Part 2: Choosing the right tool 1) Choosing the right tool for the product, not the team! - выбор инструментов должен основываться на продукте и ситуации, а не на предпочтениях команды. - Teams can learn! - внутри команд работают инженеры, которые могут учиться новому:) - Do the simplest thing, not the easiest - нужно выбирать инструменты, которые лучше подходят для решения конкретной проблемы. - The ‘right tool’ may change over time - тут пример Scala для создания первой версии торговой системы, а потом замена ее на другой язык 2) Make the change easy - Minimise blast radius - для упрощения изменений надо ограничить радиус их поражения:) - Reduce, reuse, recycle - надо строить модульную систему, чтобы можно было менять отдельные компоненты - Then do the same with production code! - Дэн рекомендует упрощать и продакшен код (рефакторинг) 3) Be a polyglot - важно быть универсальным разработчиком - Explore languages, tools, paradigms - Дэну часто помогает с этим Advent of Code - 25-дневная игра с головоломками. - Be ‘full-stack’ - тут про фронт, бек, API, мобилу - Be really full-stack - здесь про инженерные процессы, железо и вопросы к тому, а зачем мы вообще делаем задачу:)
Part 3: Caring about the team 1) Caring about others - Find joy in helping others learn - лидерские качества, работа в команде, наставничество и коучинг важны. - Send the team home! - нет переработкам - Be kind - предполагай, что люди вокруг делают лучшее из возможного, а также работай над психологической безопасностью в команде (подробнее я говорил об этом при обзоре проекта "Google's Project Aristotle" про команды) 2) Caring about staying current - Join communities - контрибьють в коммьюнити и знакомься с новыми крутыми людьми - Try new things - но подходи к этому со здоровым скептицизмом - Practise, practise, practise - чтобы быть хорошим инженером, надо практиковаться 3) Caring about yourself - Have interests outside of programming - нужны хобби вовне:) - Go home on time - не забывай о доме - Be kind to yourself - будь добр к себе и ведите себя так, как хотите, чтобы вели себя другие
Итого
- Наша работа - создавать полезные продукты, а не писать программы.
- Выбирайте правильные инструменты для конкретной ситуации.
- Заботьтесь о команде, себе и своем развитии.
P.S. У Даниэля есть и другие выступления, про которые я рассказывал
#Processes #Management #Agile #Leadership #Software #Project #CriticalThinking