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

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)

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

10.06.2025    992    0    a.doroshkevich    8    

25

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

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

05.06.2025    2065    0    vandalsvq    18    

39

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

В данной статье описываю принципы, которыми пользуюсь при работе с клиентами.

12.05.2025    1248    0    apatyukov    47    

17

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

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

25.04.2025    1055    0    DuyunElena    0    

6

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

Технический архитектор (ТА) — востребованная специальность в большинстве ИТ-компаний. Однако на сегодняшний день не существует точного определения этой роли. Как следствие, специалисты, которые хотят вырасти до ТА, зачастую не понимают, с чего начинать и какие навыки прокачивать. Причём это касается не только джунов, но и сеньоров. В КРОК мы выстроили последовательный карьерный трек для разработчиков, которые хотят стать техническими архитекторами, развиваться в сильной команде и решать интересные задачи. Делюсь нашим опытом.

23.04.2025    1112    0    Libelle    2    

15

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

Обучение взрослых (или если по-профессиональному – андрагогика) – это такой же сложный и творческий процесс, как и обучение детей. И два главных барьера тут похожие – вовлечение и мотивация («Мне это интересно?» и «Мне это нужно?»). Отсюда не просто игровые методы обучения имеют большую популярность, но и те, которые будут вызывать интерес. И я вам расскажу о нескольких дидактических формах, которые уж интерес явно могут вызвать. Это первый ответ на вопрос – откуда появилась идея этой статьи.

31.03.2025    853    0    ashtey    4    

8

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

В мире программирования часто считают, что успешный разработчик — это громкий, харизматичный человек, который проводит митапы, активно общается с заказчиками и без проблем выступает перед аудиторией. Но что, если вам ближе глубокая работа в тишине, чем бесконечные зум-звонки? Эта статья основана на книге Сьюзан Кейн «Интроверты. Как использовать особенности своего характера». В ней мы разберём, почему интроверсия — не недостаток, а суперсила для 1С-разработчика, и как использовать её в работе.

26.03.2025    2666    0    kirillobskih    15    

28

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

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

26.03.2025    598    0    Бэнни    1    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2489 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 59 18.02.21 16:05 Сейчас в теме
П=1, К=0
111
110
100
11
далее будет
10 (ПК)
1 (П)

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