Фернандо Доглио «Путь инженера-программиста»

Фернандо Доглио «Путь инженера-программиста»

@itlibrary


На пути к успешной карьере инженера-программиста важно развивать не только технические, но и множество нетехнических навыков, которые часто упускаются из виду. Книга Фернандо Доглио «Путь инженера-программиста» предлагает детальный план действий для построения успешной карьеры, начиная с основ и заканчивая уровнем профессионала, способного формировать команды и управлять проектами, с особым акцентом на коммуникацию и командную работу.

Ниже представлены ключевые полезные идеи из книги, которые помогут вам в развитии и продвижении по карьерной лестнице.

1. Основные нетехнические навыки

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

  • Терпение: Крайне необходимо для отладки кода и поиска решений проблем, что может занимать много времени.
  • Упорство: Профессия разработчика полна препятствий и разочарований. Упорство помогает не сдаваться перед трудностями.
  • Настрой на непрерывное обучение: Индустрия постоянно меняется, и если вы не будете следить за этими изменениями и быть открытым к обучению, вы безнадежно отстанете.
  • Умение принимать критику и учиться на ней: Программирование — это не работа одиночек. Способность воспринимать обратную связь, особенно негативную, и извлекать из нее уроки, а не воспринимать лично, крайне важна для роста.
  • Умение общаться с людьми: Хотя вы пишете код для машин, вам придется работать с людьми. Эффективная коммуникация (как устная, так и письменная, например, через ведение блога) – это огромное преимущество, которое поможет вам налаживать контакты с коллегами и менеджерами.

2. Лучшие практики написания кода

Ваш код должен быть не просто функциональным; он должен быть написан блестяще.

  • Ваш код должен работать, прежде чем будет оптимизирован: Первая версия кода должна просто выполнять требуемую задачу. Совершенство — враг хорошего, и преждевременная оптимизация, основанная на предположениях, может привести к бесполезной трате времени и усложнению.
  • Пишите код для людей, а не для машины: Ваш код будут читать другие разработчики (и даже вы сами в будущем).Самодокументируемый код — это иллюзия: Комментарии должны быть осмысленными, полезными, актуальными и добавлять ценность, которую нельзя получить из самого кода.
  • Читаемый код важнее однострочного: Приоритет следует отдавать ясности и удобочитаемости, даже если это увеличивает количество строк кода, так как это значительно упрощает понимание и поддержку.
  • Следование стандартам, принятым в проекте, крайне важно: Это помогает уменьшить когнитивную нагрузку на читающего код, делая его более предсказуемым и легким для понимания, как будто его написал один человек.
  • Оверинжиниринг (переусложнение) кода – это первый из смертных грехов: Неоправданное усложнение замедляет работу и тратит время. Прежде чем переусложнять, подумайте, нужна ли эта дополнительная сложность, и стоит ли она усилий, как это сделал бы менеджер.
  • Загадка "плавающей" ошибки: Случайных ошибок не бывает. Всегда есть первопричина. Используйте методы поиска первопричины, такие как «пять "почему"», чтобы понять, как устранить проблему и предотвратить ее повторение в будущем.
  • Стремитесь быть разработчиком ПО, а не специалистом по одной технологии: Изучение различных языков и фреймворков расширит ваш кругозор и позволит переносить концепции между технологиями, делая вас более гибким и востребованным.
  • Применяйте принципы SOLID, DRY, KISS, YAGNI:SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) — набор принципов для создания надежного, чистого, читаемого и расширяемого кода.
  • KISS (Keep It Simple, Stupid – «Будь прост до безобразия») — избегайте ненужной сложности.
  • DRY (Don't Repeat Yourself – «Не повторяйся») — абстрагируйте повторяющуюся логику, чтобы избежать дублирования кода и упростить поддержку.
  • YAGNI (You Ain't Gonna Need It – «Тебе это не понадобится») — не создавайте функциональности, которая не нужна сию минуту, особенно в Agile-разработке.

3. Продвинутые навыки кодирования: Модульное тестирование и Рефакторинг

Эти два навыка имеют решающее значение для качества и поддерживаемости кода.

  • Модульное тестирование: Это не просто задача для новичков, а невероятно недооцененный инструмент, обеспечивающий уверенность в корректности и стабильности кода после внесения изменений.Тестируйте не более одной вещи за раз и делайте сообщения об ошибках информативными.
  • Тестируйте только собственный код, а не сторонние библиотеки, и изолируйте внешние вызовы. Используйте внедрение зависимостей для контроля над поведением внешних ресурсов.
  • Используйте заглушки (stubs), макеты (mocks), шпионы (spies) и болваны (dummies) для эмуляции поведения и проверки взаимодействия.
  • Пишите тесты во время разработки компонента и при изменении кода, всегда учитывая это время в оценках. Автоматизируйте запуск тестов.
  • Рефакторинг: Это реструктурирование существующей логики для улучшения качества кода, а не просто его переписывание.Перед рефакторингом: используйте систему контроля версий (например, Git) для ветвления и регулярного слияния изменений, полагайтесь на модульные тесты как на страховочную сетку, создайте базовую линию кода и тщательно планируйте.
  • Сосредоточьтесь на устранении «запахов» кода: "магические" значения, размытая ответственность, чрезмерное использование примитивных типов, навязчивые switch/if операторы, дублирование логики.
  • Используйте автоматизированные инструменты (IDE, линтеры) для переименования, извлечения кода/значений и преобразования типов сущностей, чтобы избежать человеческих ошибок.
  • Лучшие практики рефакторинга: сначала рефакторинг, потом добавление новых функций; всегда используйте тесты; привлекайте QA; не стремитесь к совершенству; максимально используйте инструменты.
  • Не рефакторите, когда в этом нет смысла: например, для кода, который уже находится в коммерческой эксплуатации и не будет изменяться, или если изменения не упрощают добавление новых функций, или если это не ваш код.

4. Человеческий аспект программирования

Разработка ПО – это не только кодирование; это также умение учиться, общаться и управлять собой.

  • Баланс между работой и личной жизнью имеет решающее значение для предотвращения выгорания.
  • Учитесь учиться: Не нужно знать все сразу. Учитесь просить о помощи, находить источники информации и становиться более автономным. Формальное образование может дополнить самообучение, особенно для освоения фундаментальных концепций и обретения уверенности.
  • Побочные проекты: Отличный способ отточить навыки, поработать с новыми технологиями и создать портфолио для потенциальных работодателей. Не беспокойтесь об оригинальности, сосредоточьтесь на завершении проекта и полученном опыте.
  • Участие в проектах с открытым исходным кодом: Предоставляет уникальные возможности для рецензирования кода, решения реальных проблем, получения обратной связи, следования стандартам и развития навыков работы в команде и автономии.
  • Делать ошибки – это нормально: Ошибки — это часть процесса обучения. Воспринимайте их как возможности узнать что-то новое, а не как повод для сомнений или критики. Избегайте «стражей сообщества», которые пытаются подорвать вашу уверенность.
  • Пишите, пишите, пишите: Ведение блога или написание статей помогает отточить навыки письменной коммуникации, что, в свою очередь, улучшает устные навыки и выделяет вас среди других разработчиков.

5. Работа в коллективе

Разработка ПО – это коллективная профессия, требующая эффективного взаимодействия с менеджерами, коллегами и тестировщиками.

  • Взаимодействие с менеджером:Регулярно обновляйте статус задач в трекере. Это помогает менеджеру отслеживать прогресс проекта и эффективно управлять им.
  • Принимайте активное участие во встречах, приходите подготовленными и суммируйте итоги.
  • Планируйте свою работу, разбивайте большие задачи на мелкие, оценивайте сроки и фиксируйте допущения/зависимости. Это показывает вашу способность к аналитическому мышлению и опыт.
  • Не изобретайте велосипед: Используйте существующие библиотеки, если нет веских причин для собственной реализации (безопасность, специфические требования).
  • Чего не следует говорить менеджеру: Избегайте оправданий, жалоб на сложность работы, абсолютных заявлений или демонстрации незнания базовых концепций.
  • Будьте хорошим коллегой:Взаимодействуйте с тестировщиками (QA): Они ваша страховочная сетка, помогающая найти ошибки до того, как они достигнут пользователей. Уважайте их работу.
  • Оставляйте самолюбие за порогом: Самоуверенность препятствует обучению и командной работе. Будьте открыты к критике и признавайте свои ошибки.
  • Учитесь работать удаленно: Будьте доступны в рабочие часы, уважайте рабочее время коллег, проводите четкую границу между работой и личной жизнью, соблюдайте правила безопасности.
  • Вам необходима социальная жизнь: Социализация с коллегами способствует сплоченности команды, снижает стресс и преодолевает чувство одиночества. Участвуйте в личных и виртуальных встречах.
  • Работа над собственными навыками: Синдром самозванца – распространенное явление; преодолевайте его путем непрерывного совершенствования. Измеряйте прогресс, сравнивая себя с собой в прошлом, а не с другими. Используйте разбор кода как способ учиться на опыте коллег и улучшать качество собственного кода.

6. Общее представление о руководстве группой

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

  • Признаки хорошего руководителя: Он ставит под вопрос статус-кво, устанавливает четкие ожидания, разрабатывает ясный план успеха, ставит подчиненных выше себя, стремится к устойчивости результата, постоянно совершенствуется и выстраивает социальные связи.
  • Неприятные истины от руководства: Понимайте, почему менеджер говорит «нет» (ограничения ресурсов, график), почему сообщает о проблемах в вашей работе (помогает вам улучшиться), почему план может быть «неверен» (контекст проекта), и почему предлагает изучать новые технологии (для вашего роста и потребностей команды). Частые запросы об обновлении статуса также имеют обоснованную причину — менеджер должен отчитываться перед акционерами и следить за графиком.
  • Правило 90-10: Первые 90% проекта завершаются за 10% времени, а оставшиеся 10% требуют 90% времени. Это объясняется такими факторами, как расползание требований, нерешенные допущения и параллельная работа над несколькими проектами. Ваша задача — помогать руководителю управлять этим хаосом.
  • Как правильно поправить руководителя: Делайте это уважительно, с глазу на глаз, и в форме вопроса или предложения для обучения. Помните, что руководитель не всегда является лучшим техническим экспертом в команде, и ваша обратная связь ценна.
  • Как правильно разговаривать с клиентом: Клиент не всегда прав в технических вопросах. Исправляйте их вежливо, объясняя, почему их предположения «неточны» и какое влияние это может оказать на проект. Будьте готовы обосновать свои аргументы.
  • Отзывы о вашей работе обязательны: Запрашивайте и давайте обратную связь (как формальную, так и неформальную, как руководителю, так и коллегам) для непрерывного роста. Отзывы помогают понять, насколько хорошо вы справляетесь, и в каком направлении двигаться.

https://t.me/itlibrary - библиотека IT книг

https://t.me/itlecture - IT лекции


Report Page