Образ мышления программиста

16.02.21

Саморазвитие

Статья описывает основные столпы образа мышления программиста.

Образ мышления программиста

 

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

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

Простой пример - игра в шахматы. Фигуры ходят по определенной траектории, ведущей к результату. Каждый шаг имеет причинно-следственные связи. Этим принципом руководствуются программисты при разработке программ.

Для того, чтобы научиться мыслить как программист, необходимо иметь: 

  • аналитическое мышление;
  • алгоритмическое мышление;
  • умение мыслить абстракцией;
  • знание синтаксиса и языков программирования.

 

Аналитическое мышление

 

Аналитическое мышление тесно связана с логикой. Заключается в умении обращать внимание на детали анализируемого объекта и находить его причинно-следственные связи. Программист руководствуется законами математической логики. Для решения профессиональных задач, необходимо разбивать их на составляющие.

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

Специально для преодоления таких препятствий разработан “метод утенка”. Этот психологический прием заключается в том, что человек ставит на стол игрушечного утенка или любой другой предмет. Нужно сформулировать сложный вопрос и задать его “утенку”. Правильная постановка вопроса и понимание сути поставленной задачи заключает в себе часть ответа. Такой метод дает толчок для дальнейших действий, позволяет преодолеть препятствия.

“Метод утенка” используется при проектировании. Если некоторую часть системы не получается запрограммировать, программист объясняет “утенку” каждую строку. В процессе объяснения специалист находит решение.

 

Алгоритмическое мышление

 

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

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

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

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

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

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

 

Умение мыслить абстракцией

 

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

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

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

В программировании абстракция выглядит немного по-другому. Тут необходимо уметь выделить в задаче “Х” и “У” и выразить одного через другое. 

Дана задача: “Отфильтровать спам-письма в отдельную папку”. Программист создает алгоритм, который за указанное время “Х” будет отрабатывать “У” писем и анализировать их на соответствие указанным требованиям. Грамотный специалист умеет перевести задачу с человеческого языка на язык информационных технологий и наоборот.

 

Знание синтаксиса и языков программирования

 

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

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

Синтаксис характеризует “чистый язык”. Семантика языка описывает действия различных синтаксических конструкций.

Нужно постоянно совершенствовать свои знания в языке и семантике следя за обновлениями своих рабочих языков.  

 

Набор навыков, необходимых для развития мышления программиста
 

  • Для того, чтобы научиться мыслить как программист, необходимо уметь проводить аналогии между знакомым и новым. Имея базовые знания в программировании, специалист должен разбираться в технической документации и осваивать новые технологии на базе предыдущего опыта; 
  • Программист должен уметь сосредоточится на выполнении поставленной задачи на протяжении длительного времени. Если внимание не будет сфокусировано полностью на решении проблемы, то может быть упущена большая часть работы. Также необходимо концентрироваться на связанных друг с другом элементах и понимать принципы их взаимодействия;
  • Способность грамотно пользоваться наработками. Программисту нужно учитывать при решении задачи, что ранее ее мог решить другой специалист. Допустимо разбирать готовые наработки, вникая в код. Таким образом, можно сэкономить большое количество времени, а также дополнить ранее написанный код;
  • Прогнозирование различных сценариев развития событий.  Специалист Нужно предусмотреть несколько вариантов, в том числе и нестандартных. Необходимо продумать, к чему приведет каждый из сценариев. Мышление программиста отличается именно этими особенностями, что позволяет избежать сбой программы в разных случаях ее использования;
  • Способность к непрерывному обучению. Постоянное развитие информационных технологий сопровождается тем, что программисту нужно уметь быстро реагировать на изменения. Нейронные сети становятся длиннее, видеокарты - мощнее, а бизнес процессы - сложнее;
  • Стремление к совершенствованию навыков. Рефакторинг постоянно сопровождает программиста в работе. Идеальный код еще не придуман, его всегда можно переписать эффективно, увеличив его производительность.

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

Тренироваться в решении задач можно разными методами: от игры в шахматы до математических и физических задач.

Программирование - это не только знание теории и математической логики. Исследования, показали, что при изучении исходного кода, задействованы следующие отделы мозга: 

  • средняя лобная извилина. Отвечает за рабочую память, внимание и язык;
  • средняя височная извилина. Отвечает за семантический поиск в памяти;
  •  нижняя теменная доля и нижняя лобная извилина. Соответствуют рабочей памяти;
  • нижняя лобная извилина. Отождествляется с рабочей памятью и языком.

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

 

Примеры задач для развития мышления программиста

 

  1.  Задача, популярная при собеседованиях на Amazon:

Необходимо продолжить последовательность: ППП, ППК, ПКК, ПП.

Задача имеет несколько возможных решений, одно из них:

В последовательности закодированы буквы алфавита, сопоставленные с набором символов “П” и “К”. Символы отражают набор характеристик. Следует найти детали, которых в букве “А” - три, “Б” - две и так далее. Например, здесь будет определенное количество кривых и штрихов. Логично будет продолжить последовательность символами ПППП, что соответствует букве “Д” в ряду: А, Б, В, Г, Д.

  1. Человека уменьшили до размера 5-центовой монеты и поместили в блендер. При этом вес уменьшился, а плотность тела осталась прежней. Лопасти блендера начнут вращение через одну минуту. Каковы должны быть действия человека?

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

  • Человек может прижаться ко дну чаши блендера, тогда, возможно, лопасти его не коснуться;
  • Влезть на ось вращения вверх по лезвию. Можно найти участок, на котором удастся сохранить равновесия при вращении. В этом случае центростремительная сила будет близка к нулю, что даст шанс удержаться;
  • Найти зазор между устройством крепления лезвий и стенкой блендера. Вероятно, в это пространство сможет поместиться 5-центовая монета.

Больше примеров подобных задач можно найти на сайтах: TopCoder, Programming Praxis, Coderbyte, CodeKata, The Daily WTF, Al Zimmermann’s Programming Contests, Timus Online Judge.

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

Успехов! 

Программирование мышление язык программирования алгоритм семантика домашнее задание образ мышления программиста мозговая деятельность аналитическое алгоритмическое умение мыслить абстракцией

См. также

Обучение и наставничество Бесплатно (free)

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

12.11.2024    514    0    AlexSvoykin    9    

3

Личная эффективность Бесплатно (free)

«Я знаю одно – во мне есть нечто, и я это скрываю. Я не говорю об этом. Но оно там всегда. Мой Темный попутчик. Когда он просыпается, я чувствую себя живым.» (сериал «Декстер»). «Жажда разработки» – это психологические проявление внутреннего «я», вызывающее острую необходимость программировать. Все, кто любит программировать, неоднократно испытывали такую жажду, и я не исключение. Расскажем о том, как утолить свою жажду и найти баланс между хобби, работой и другими аспектами жизни.

07.11.2024    2737    0    BlizD    70    

40

Обучение и наставничество Бесплатно (free)

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

09.10.2024    2261    0    Akcium    1    

5

Личная эффективность Бесплатно (free)

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

09.09.2024    373    0    Radio_Analyst    1    

2

Личная эффективность Бесплатно (free)

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

23.08.2024    1017    0    user1947860    3    

5

Удаленная команда Личная эффективность Бесплатно (free)

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

20.08.2024    4346    0    PROSTO-1C    14    

23

Коммуникации Личная эффективность Обучение и наставничество Бесплатно (free)

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

23.07.2024    1816    0    SerjoginaMaria    6    

13

Личная эффективность Бесплатно (free)

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

08.07.2024    3961    0    biimmap    117    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2507 16.02.21 18:25 Сейчас в теме
Вспоминается...
Шерлок Холмс и доктор Ватсон летят на воздушном шаре. Погода
портится, шар несется по ветру с огромной скоростю, оринетация
полностью потеряна...
Наконец небо расчищается, Холмс и Ватсон видят под собой залитую
солнцем природу. На берегу ручейка мужик пасет коров.
Когда шар пролетает над мужиком, Холмс обращается к нему:
- Любезнейший, не подскажете ли, э-э..., где мы находимся?
Мужик обалдело смотрит на Холмса и Ватсона, и, когда шар уже
улетел довольно далеко, кричит ему вдогонку:
- Вы находитесь на воздушном шаре!!
Холмс:
- Все ясно, Ватсон. Мы в России.
- Но Холмс! Почему вы решили...
- Элементарно, Ватсон. Этот человек - системный программист.
Только системный программист мог дать столь правильный и
при этом столь бесполезный ответ.
- Да, но почему вы решили, что мы именно в России?
- Элементарно, Ватсон. Только в России системные программисты
пасут коров.

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

Чего вдруг нестандартные то ?

И вот это
Простой пример - игра в шахматы. Фигуры ходят по определенной траектории, ведущей к результату.

Серьезно ???

А как же программирование это искусство ?
А есть Образ мышления водителя автобуса ?
IgorS; mysm; SagittariusA; zaic; ELInfinito; Award; PetrPan; ILM; Nubsdale; Jeka44; akim2040; user1481466; Batman; +13 1 Ответить
2. ILM 241 18.02.21 10:07 Сейчас в теме
(1) А всё, Вы уже не художник и не творец - Вы теперь бизнес-единица, поэтому от вас ждут быстрого результата и желательно малозатратного.
biimmap; grantmax2005; kseagle; +3 Ответить
3. FesenkoA 58 18.02.21 16:05 Сейчас в теме
П=1, К=0
111
110
100
11
далее будет
10 (ПК)
1 (П)

в случае если меня сейчас размозжит блендер, нужно срочно скинуть все пароли от аккаунтов родственникам и коллегам чтобы снизить последствия для остальных)
SavDm; vika534; IgorS; +3 Ответить
Оставьте свое сообщение