Читать нас в Telegram

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

Рубрика: Статьи
,
14778

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

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

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

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

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

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

Когда менеджеры ставят задачи, часто они называют абстрактные вещи, которые хотят увидеть в продукте, например: «хотим, чтобы все спам-фотографии фильтровались автоматически». Программист преобразует это ТЗ в нечто более конкретное: «необходимо создать алгоритм, который за время 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 вдохновляют на автоматизацию необычных вещей.

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

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

Постоянно учиться

В кодинге всё устаревает очень быстро: сегодня актуально одно, завтра другое. Появляются новые специальности, языки программирования, компьютеры становятся быстрее, видеокарты — мощнее, нейронные сети — длиннее. Благодаря Интернету всё мгновенно распространяется: сегодня один парень придумал идею, завтра уже кто-то пишет статью на эту тему, послезавтра Google выпускает новый пакет для Python, основываясь на этой идее. Поэтому программисту всегда важно держать руку на пульсе: немного замешкался — и поезд ушёл.

Что посмотреть: онлайн-курс «Научитесь учиться: мощные умственные инструменты, которые помогут вам овладеть сложными предметами» на Coursera.

Стремиться к постоянному улучшению

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

Что почитать: Масааки Имаи, «Кайдзен. Ключ к успеху японских компаний», чтобы по-новому взглянуть на идею постоянного улучшения.

Полезные ресурсы

Книги для начинающих:

  1. Ч. Петцольд, «Код. Тайный язык информатики».
  2. Б. Адитья, «Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих».

Справочники для практикующих:

  1. Data Structure Visualizations — визуализация самых популярных алгоритмов.
  2. Problem solving with Algorithms and Data Structures using Python (версия на русском языке) — интерактивный справочник по самым популярным алгоритмам и структурам данных, чтобы закрепить теорию.

На кого подписаться — издания, каналы, подкасты:

  1. TechCrunch: новости о стартапах и технологиях (на английском).
  2. CSS-Tricks: новости, гайды и разборы в сфере фронтенд-разработки (на английском).
  3. The Hacker News: новости, тенденции и разработки в сфере кибербезопасности (на английском).
  4. DEV: коллективный блог разработчиков программного обеспечения (на английском).
  5. Типичный программист: издание о разработке и обо всём, что с ней связано.
  6. Хабр: популярный коллективный блог ИТ-сферы.
  7. Веб-стандарты: Youtube-канал с обзорами современных фронтенд-технологий.
  8. Запуск завтра: подкаст о технологиях с Саматом Галимовым.
  9. Трёп Себранта: подкаст про технологии и людей от Андрея Себранта, директора по маркетингу сервисов «Яндекса».

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Honor Cup, бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Темы: