Что значит «думать как программист»?

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

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

Если спросить Интернет о том, что отличает мышление программиста от мышления обычного человека, то он выдаст примерно следующий набор параметров:

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

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

В отличие от обычного человека, программист умеет:

Легко маневрировать между абстракцией и конкретикой

Когда менеджеры ставят задачи, часто они называют абстрактные вещи, которые хотят увидеть в продукте, например: «хотим, чтобы все спам-фотографии фильтровались автоматически». Программист преобразует это ТЗ в нечто более конкретное: «необходимо создать алгоритм, который за время N будет обрабатывать X фотографий и проверять их на соответствие следующим требованиям: …». Хороший программист умеет перевести задачу с человеческого языка на язык технологий и обратно.

Что почитать: Justin Fuller, How to understand any programming task ― как разбирать задачу при разработке программного обеспечения.

«Есть слона по частям»

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

Что почитать: создатели Scrum о том, как сформировать привычку декомпозировать задачи и планировать разработку, распределяя большие проекты на этапы (на английском).

Проводить аналогии между знакомым и новым и учиться на этом

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

Что почитать: H. Abelson, G.J. Sussman, J. Sussman, Structure and Interpretation of Computer Programs — культовая книга об основах компьютерных программ, с её помощью легче понимать и чувствовать аналогии между знакомым и новым.

Долго концентрироваться

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

Что почитать: Э.М. Хэлловэлл, «Не отвлекайте меня! Как сохранять высокую концентрацию несмотря ни на что».

Грамотно пользоваться наработками

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

Разбираться, а не слепо брать готовое

Когда используешь чужие решения, важно сначала посмотреть на них скептически: если это внедрено и работает, далеко не факт, что ошибок нет. Все ошибаются, даже люди с высоким рейтингом на Stack Overflow. Хороший программист сначала убедится, что решение подходит, исправит ошибки, подчистит код, а уже потом начнёт делать что-то на его основе.

Автоматизировать рутину во всех областях жизни

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

Что посмотреть: примеры проектов на Arduino вдохновляют на автоматизацию необычных вещей.

Предугадывать даже самые неожиданные сценарии

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

Продолжение статьи читайте на tproger.ru

4569 views·36 shares