Навыки опытного программиста: Самые популярные советы начинающим

Быть программистом — это призвание? Возможно. Мы в 1cloud решили выяснить, как сами программисты оценивают свои достижения, какие качества считают неотъемлемыми в своей работе (вне зависимости от выбранного языка и специализации) и какие советы дают начинающим разработчикам.

b8d24db4b7fc4829a175bb571dc5e508.jpg
/ фото David Joyce CC

1. Измерение кода в строках


Каждый опытный программист знает, что качество кода не определяется его длиной или временем, которое было затрачено на его написание,  считает Джордж Майна (George Maina), сотрудник компании-разработчика ПО Kopo Koop.

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

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

Мэттью Фехер (Matthew Fecher), разработчик большого количества приложений на iOS, технический редактор книжной серии «iPhone for Dummies» и «Mac for Dummies», один из основных членов команды AudioKit, также говорит, что его намного больше впечатлит максимально простое решение, а усложнение кода приводит только к увеличению затраченного времени и конечной стоимости проекта.

2. Желание учиться и умение признавать ошибки


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

Потребность в развитии должна быть свойственна программисту на протяжении всей деятельности,  говорит основатель сервиса по подбору разработчиков Scalable Path Дэмьен Филиатро (Damien Filiatrault).

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

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

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

Постоянное расширение горизонтов помогает специалистам легче признавать свои ошибки. Разработчик, работавший на ВМФ США, Мэтт Пикеринг (Matt Pickering),  уверен, что растущее количество краткосрочных курсов, обещающих быстро научить человека кодить с нуля, не всегда идет на пользу начинающим специалистам. У них возникает ощущение, что после такого «введения в тему» они знают все, и углублять свои навыки им больше не требуется — налицо эффект Даннинга Крюгера, когда недостаток квалификации приводит к завышенной оценке своих профессиональных качеств.

3. Упор на результат, а не затраченное время


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

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

Разработчик архитектуры приложений в компании Imagine Communications Скотт Палмер (Scott Palmer) объясняет, что популярные сегодня онлайн-тесты не могут адекватно оценивать качество кода и профессионализм программиста. Конечно, существуют временные рамки и дедлайны проектов, но задаваться целью тратить на создание кода как можно меньше времени — не самая хорошая и совершенно не оправданная (с точки зрения результата) идея.

Этот принцип лучше всего иллюстрирует индустрия видеоигр (разумеется, создание игры не сводится к работе программистов и гейм-дизайнеров, однако их труд в данном случае — ключевой). Например, выпуск Team Fortress 2 был анонсирован еще в 1998 году, а на прилавках игра появилась лишь 9 лет спустя. Ожидание явно стоило этого, учитывая тот факт, что в нее продолжают играть даже в 2016 году. Разработка Diablo III заняла еще больше, целых 11 лет. При этом в год выпуска (2012) игра побила все рекорды по предзаказу. А в 2015 году игра оказалась на 10 месте в рейтинге самых продаваемых игр (30 млн копий).

4. Необходимость предварительной работы


Разработчик интернет-провайдера EarthLink Telecommunication Ашиш Чандра (Ashish Chandra), описывая свой опыт,  говорит, что большую часть рабочего времени и даже часть личного тратит на обдумывание кода и поиск оптимальных решений, которые можно внедрить. И даже 50 строк кода в день приобретают совсем другую ценность, когда к их написанию подошли очень вдумчиво.

Джо Армстронг (Joe Armstrong), создавший язык Erlang, при разработке ПО, например,  предпочитал очень тщательно документировать все, что только возможно, перед тем, как приступать к непосредственному написанию кода. Очень часто предварительная подготовка играет достаточно большую роль и облегчает работу: Рави Шанкар (Ravi Sankar), инженер-программист в Microsoft,  уверен, что так можно сократить или вовсе избежать последующих преобразований и исправлений.

Согласно опросу на Hacker News, многие программисты до сих пор делают записи в блокнотах и даже используют карточки, чтобы привести мысли в порядок и продумать код до начала самой работы. У некоторых заведен отдельный блокнот для каждого проекта, другие пишут или зарисовывают идеи в одном месте, а затем переводят записи в печатный вид. Но все они уверены, что это сокращает время, затраченное на сам процесс написания кода и помогает избежать большого количества ошибок.

5. Коммуникабельность


У коммуникабельности есть две важных стороны — умение работать в команде и понимать клиентов. Но для Криса Кемпа (Chris Kemp), генерального директора консалтинговой компании в сфере информационных технологий и бизнес-систем Paladin Consultants,  клиент тоже является частью команды, поэтому услышать его и понять, согласовать план и цели проекта — залог создания успешного продукта (хотя, конечно, далеко не во всех компаниях эта задача лежит на плечах самих разработчиков).

Уже известный нам Мэтт Пикеринг считает, что для развития профессионализма поможет и более активное общение с коллегами-непрограммистами (про то, как объяснять им некоторые концепции, популярные в программировании, мы рассказывали здесь).

Поэтому Дамьен Филиатро включает (под пунктом 2) хорошие коммуникативные навыки в список отличительных черт высококлассного специалиста. Стивен Уайатт Буш (Stephen Wyatt Bush) поделился в своем блоге 10 заповедями программиста, которым его научил отец, работающий в Технологическом университете Тенесси. Согласно 5 заповеди, особое терпение следует проявлять в общении с людьми нетехнических специальностей, чтобы не поддерживать сложившийся у них стереотип о программистах.

Майкл Лайонс (Michael Lyons) и Роб Томсетт (Rob Thomsett) провели психологическое исследование на основе системы типологии личности Майерс — Бриггс (созданной на базе идей Карла Юнга). Они пришли к выводу, что половина или две трети всех программистов по ориентации сознания является интровертами, то есть нам больше интересен внутренний мир идей и ментальных процессов, чем внешний мир людей и предметов.

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

Кевин О«Шоннесси (Kevin O’Shaughnessy), веб-разработчик из Британии, уверен, что определение своего типа личности способствует пониманию себя и даже анализу своих ошибок в работе. Поэтому он предлагает программистам пройти сам тест и ознакомиться с описанием всех типов личности — иногда это может помочь в споре или общении с коллегами и клиентами.

Джон Олспоу (John Allspaw), технический директор торговой площадки Etsy,  пишет в своей статье о том, что чем выше вы поднимаетесь по карьерной лестнице, тем больше к вам предъявляется требований — поэтому универсальные практики для начинающих порой могут пригодиться и опытным разработчикам.

P.S. А какие полезные советы новичкам можете подсказать вы?

P.P. S. О чем еще мы пишем в нашем на Хабре:

  • «Ультимативный» SSL-дайджест: Лучшие практические материалы
  • Подборка материалов об облаках, дата-центрах и разработке сервисов
  • Как сделать виртуальную инфраструктуру доступнее
  • «Нельзя просто так взять и объяснить непрограммисту…»

Комментарии (2)

  • 22 ноября 2016 в 16:06

    +1

    Главный совет — гуглить. Причем не готовые решения.
  • 22 ноября 2016 в 16:29

    0

    У опытного программиста есть скрипт stackoverflow.sh, которому можно скормить ТЗ, а на выходе получить готовый проект надерганный из постов на stackoverflow.com

© Habrahabr.ru