Что значит «думать как программист»?
Автоматизация рутины, умение предусмотреть самые неожиданные сценарии и не только — разбираемся, какие особенности есть у мышления программиста.
18К открытий19К показов
Работодатели считают, что за полгода нельзя обучиться программированию и стать классным специалистом. Из-за этого выпускники курсов, у которых нет профильного образования, проигрывают на собеседованиях тем, у кого оно есть. Но это не всегда справедливо. Умение думать как программист на практике оказывается гораздо важнее, чем знание кода и языков. Обучиться этому человек легко может за полгода, а некоторые из вас, возможно, даже уже это умеют.
Александр Патлух
разработчик образовательных программ в «Яндекс.Практикуме»
Если спросить Интернет о том, что отличает мышление программиста от мышления обычного человека, то он выдаст примерно следующий набор параметров:
- системно подходить к решению проблемы,
- докапываться до сути и любить ошибки,
- смотреть на задачу под разными углами,
- учитывать предыдущий опыт.
Это всё так, но, на мой взгляд, все эти характеристики — просто признак хорошего профессионала в любой области, а суть будет несколько глубже.
В отличие от обычного человека, программист умеет:
Легко маневрировать между абстракцией и конкретикой
Когда менеджеры ставят задачи, часто они называют абстрактные вещи, которые хотят увидеть в продукте, например: «хотим, чтобы все спам-фотографии фильтровались автоматически». Программист преобразует это ТЗ в нечто более конкретное: «необходимо создать алгоритм, который за время 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.
Стремиться к постоянному улучшению
Идеального кода не существует: почти всегда можно переписать что-то так, чтобы оно стало более производительным, элегантным или масштабируемым. Поэтому рефакторинг — это постоянный процесс в работе программиста, как минимум в продуктовой разработке.
Что почитать: Масааки Имаи, «Кайдзен. Ключ к успеху японских компаний», чтобы по-новому взглянуть на идею постоянного улучшения.
Полезные ресурсы
Книги для начинающих:
- Ч. Петцольд, «Код. Тайный язык информатики».
- Б. Адитья, «Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих».
Справочники для практикующих:
- Data Structure Visualizations — визуализация самых популярных алгоритмов.
- Problem solving with Algorithms and Data Structures using Python (версия на русском языке) — интерактивный справочник по самым популярным алгоритмам и структурам данных, чтобы закрепить теорию.
На кого подписаться — издания, каналы, подкасты:
- TechCrunch: новости о стартапах и технологиях (на английском).
- CSS-Tricks: новости, гайды и разборы в сфере фронтенд-разработки (на английском).
- The Hacker News: новости, тенденции и разработки в сфере кибербезопасности (на английском).
- DEV: коллективный блог разработчиков программного обеспечения (на английском).
- Типичный программист: издание о разработке и обо всём, что с ней связано.
- Хабр: популярный коллективный блог ИТ-сферы.
- Веб-стандарты: Youtube-канал с обзорами современных фронтенд-технологий.
- Запуск завтра: подкаст о технологиях с Саматом Галимовым.
- Трёп Себранта: подкаст про технологии и людей от Андрея Себранта, директора по маркетингу сервисов «Яндекса».
18К открытий19К показов