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

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

О книге

«Программист-прагматик: ваш путь к мастерству» — незаменимая книга для всех, кто занимается разработкой программного обеспечения. Написанная Эндрю Хантом и Дэвидом Томасом, впервые опубликованная в 1999 году и обновленная в 2020 году, эта книга является вечной классикой, которая остается актуальной в индустрии разработки программного обеспечения даже спустя два десятилетия с момента ее первой публикации.

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

Их цель — дать практические советы по решению типичных повседневных проблем при разработке программного обеспечения и превратить читателя в более эффективного и прагматичного разработчика.

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

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

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

Что характеризует прагматичного программиста?

Согласно Эндрю Ханту и Дэвиду Томасу, авторам книги Программист-прагматик, программист-прагматик характеризуется набором определенных качеств. Эти качества объединяются, чтобы создать универсального, адаптируемого и эффективного профессионала в области программного обеспечения. Ниже мы подробно рассмотрим некоторые из этих ключевых черт:

Ранний пользователь/быстрый адаптирующийся. Обладает чутьем к новым технологиям и методам и любит экспериментировать. Они могут быстро усваивать новинки, интегрируя их в свою базу знаний.

Представьте себе ситуацию, когда новая библиотека JavaScript, скажем, Svelte, начинает набирать популярность в сообществе разработчиков. Многие разработчики, возможно, все еще не решаются принять его, предпочитая использовать уже знакомые инструменты, такие как React или Angular.

Тем не менее, «ранний пользователь» или «быстрый адаптер» будет любопытен и заинтересован в изучении этого нового инструмента. Возможно, они уже читают документацию, экспериментируют с библиотекой в ​​личном проекте или даже предлагают ее использовать в предстоящем проекте своей компании. Они могут быстро понять, как работает библиотека, ее преимущества и ограничения и как ее можно интегрировать в свой арсенал средств разработки.

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

Любознательный: это тот, кто задает вопросы и всегда ищет новые факты. Это любопытство может повлиять на будущие решения.

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

Кроме того, этот разработчик всегда следит за блогами, посвященными технологиям, участвует в местных встречах по программированию и записывается на онлайн-курсы для изучения новых языков программирования или фреймворков. Они всегда задают вопросы вроде «Почему это работает именно так?» или «Что произойдет, если я попытаюсь сделать это таким образом?».

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

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

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

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

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

Это пример «критического мыслителя». Они стремятся полностью понять проблемы и решения и постоянно оценивают и подвергают сомнению все вокруг себя.

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

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

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

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

Это пример «Реалиста». Они понимают природу проблем, с которыми сталкиваются, и стремятся соответствующим образом управлять ожиданиями, ища наилучшие возможные решения.

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

Предположим, вы работаете в небольшом стартапе, разрабатывающем мобильное приложение. В команде есть разработчик, который не только владеет навыками разработки под iOS и Android, но также хорошо разбирается в RESTful API, знает, как настраивать и поддерживать базу данных SQL, знаком с веб-интерфейсом с помощью React и может даже выполнять задачи DevOps, такие как настройка сервера, непрерывная интеграция и развертывание.

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

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

Продолжает…