Помимо программирования: 5 навыков, которыми необходимо обладать, если вы хотите стать старшим программистом

Помимо программирования: 5 навыков, которыми необходимо обладать, если вы хотите стать старшим программистом

22 марта 2023 г.

<цитата>
  • Инстинктивно мы приравниваем программирование к написанию кода. Из-за этого мы в первую очередь ориентируемся на навыки проектирования и создания кода: освоение языков и фреймворков, чистый код, шаблоны проектирования, TDD, архитектура.

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

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

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

Распространенное заблуждение о программировании

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

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

Чистый код. Глубокие, почти тайные знания языков программирования и фреймворков. Шаблоны проектирования. Архитектура. Алгоритмы и структуры данных. Написание красивых модульных тестов.

Это базовые навыки, да. Но они по-прежнему в основном сосредоточены на создании кода.

Я не говорю, что эти навыки не важны. Они критически важны для старшего разработчика. И там столько глубины, что их можно изучать годами. Но они охватывают лишь небольшую часть того, что мы делаем каждый день. А сосредоточение внимания только на навыках создания кода и пренебрежение остальными сделает вас очень неполным и неэффективным программистом.

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

Как на самом деле выглядит профессиональная разработка программного обеспечения

Профессиональная разработка программного обеспечения имеет несколько черт, которые оказывают глубокое влияние на то, что мы делаем каждый день как программисты:

  1. Разработка программного обеспечения — это командная деятельность, и большая часть программного обеспечения долговечна. На практике это означает, что большая часть кода, с которым вы будете работать, либо написана кем-то другим, либо измененный кем-то другим с тех пор, как вы его написали, или написанный вами достаточно давно, чтобы забыть о нем. Это также означает, что большая часть кода, с которым вы будете работать, будет устаревшей.

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

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

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

5. Быстрое понимание новой кодовой базы – важный навык карьерного роста. На новой работе первое впечатление, которое вы производите, определяет, как вас будут воспринимать в течение длительного времени (если не навсегда). И это зависит от того, насколько быстро и самодостаточно вы сможете ориентироваться в новой кодовой базе. Если вы сможете начать вносить значимый вклад сразу же без особых указаний, вас сразу же будут воспринимать как сильного руководителя.

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

Но давайте рассмотрим эти навыки более подробно.

В чем ДОЛЖЕН разбираться разносторонний разработчик

1. Изучение и понимание новых кодовых баз (так называемая археология кода)

Отображение местности. "Чтение" общей структуры кодовой базы (структура каталогов, архитектурные уровни, основные бизнес-области) и построение мысленной модели потока данных и логики через приложение. Знание того, как эффективно отображать, составлять схемы и визуализировать код, данные и поток.

Навигация и поиск по коду. Использование всех возможностей вашей IDE для эффективного поиска в кодовой базе: перемещение вверх и вниз по компонентам или иерархии наследования; перемещаться вверх и вниз по цепочке вызовов функций или методов; искать определение функции, класса, компонента или константы; искать зависимости класса, функции или компонента; найти все вхождения класса, функции или переменной; быстро переключаться между кодом и связанными с ним тестами; быстро найти компонент, класс, функцию или константу по имени. БОНУС: знание того, как структурировать кодовую базу и называть вещи, чтобы упростить навигацию по ним.

Изучение истории Git. Эффективная навигация по истории коммитов и запросов на вытягивание для понимания контекста и решений, стоящих за текущим состоянием кода. Использование таких инструментов, как git fault, чтобы определить, где найти необходимую информацию. БОНУС: написание хороших описаний коммитов и запросов на вытягивание, которые облегчат изучение истории Git для других разработчиков.

Исследовательское тестирование и проверка кода. Использование ручных и автоматических сквозных исследовательских тестов, чтобы увидеть, как работает приложение (что часто трудно понять только по исходному коду). Заглушение запросов API поддельными данными, чтобы перевести приложение в желаемое состояние и изучить все крайние случаи. Изучение внутренней работы приложения с помощью модульных тестов для определения характеристик, отладчиков и инструментов проверки (инструменты разработки веб-браузера, интерактивные оболочки, инструменты захвата запросов, такие как Postman и т. д.).

2. Отладка

Понимание общих принципов и подходов к отладке. Отладка "сверху вниз" и "снизу вверх". Разделяй и властвуй подход. Компромиссы использования различных подходов для точного определения проблемы (например, отладчик против инструкции «печать»). Какие входные данные использовать для наиболее эффективного воспроизведения ошибки и на каком уровне вставлять эти данные: пользовательский интерфейс, веб-запросы или где-то внутри кода.

Отладка и проверка кода. Глубокое знание всего спектра инструментов и подходов к отладке: встроенные и внешние отладчики, оператор "print" и эквиваленты, такие как console.log браузера, утверждения в коде, использование модульных тестов. для отладки кода с помощью git bisect. Глубокое знание инструментов для проверки и взаимодействия с работающим приложением: инструменты разработки браузера, инструменты разработки вашей среды (например, инструменты разработки React или Redux), интерактивные оболочки, такие инструменты, как Postman, для захвата и проверки запросов API и так далее.

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

Мониторинг и ведение журнала. Использование журналов серверов и облачных платформ для обнаружения и сортировки ошибок. Используйте инструменты управления журналами и визуализации, такие как Grafana, Kibana или Splunk, чтобы легче выявлять ошибки. Использование инструментов мониторинга, таких как Sentry, AppSignal или NewRelic.

3. Проверка кода

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

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

Эффективная проверка (и повторная проверка) кода. Эффективная навигация по изменениям и обсуждениям (предложения других рецензентов, ответы авторов запросов на вытягивание). Понимание того, как наиболее эффективно проверять PR в зависимости от его размера, сложности и качества отдельных коммитов (нужно ли проверять коммит за коммитом или все изменения целиком и т. д.). Использование более продвинутых функций вашей платформы для размещения кода, таких как многострочные комментарии GitHub или предлагаемые изменения. Эффективная повторная проверка исправлений, примененных автором кода к вашим предложениям (и предложениям других рецензентов).

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

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: сделать ваши запросы на вытягивание проще для просмотра. Написание отличных запросов на вытягивание и описаний коммитов. Знать, как упростить проверку запроса на вытягивание: когда делать одну большую фиксацию, а когда несколько меньших, каковы должны быть границы запроса на вытягивание и т. д.

4. Поиск информации

Хорошее понимание документации по выбранному стеку (как она организована и как наиболее эффективно найти то, что вам нужно). Научитесь искать информацию в Интернете (Google, StackOverflow и т. д.). Использование всех возможностей вашей IDE: встроенная документация, подсказки параметров, переход к определению и т. д.

5. Работа с устаревшим кодом

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

Изоляция устаревшего кода и покрытие его защитной сеткой. Определение естественных границ («швов») для изоляции областей устаревшего кода для контролируемых, ограниченных изменений. Покрытие изолированной области временными тестами характеристик по швам, чтобы обеспечить подстраховку от регрессии во время рефакторинга. Преобразование характеристических тестов в правильно сфокусированные модульные тесты после рефакторинга.

Реструктуризация и рефакторинг старого кода. Знание шаблонов и методов рефакторинга (особенно извлечение и модульное разделение кода для охвата области рефакторинга). Использование вашей IDE, codemods, автоматического исправления линтера и аналогичных инструментов автоматического рефакторинга.

Итог

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

Вы не только потратите больше времени на эти действия, чем на собственно создание кода, но и улучшите свои творческие навыки. И это то, что кричит вашим коллегам и руководителям о «настоящем старшем».

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE