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

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)

В восемнадцатом выпуске второго сезона подкаста Радио “Аналитик“ обсудили, как появилась методика WOOP, чем она может быть полезна и зачем нужна отдельная методика, если можно просто брать и делать.

30.04.2024    519    0    Radio_Analyst    0    

5

Лидерство Личная эффективность Agile Анализ потребностей и поиск решений Бесплатно (free)

В семнадцатом выпуске второго сезона подкаста Радио “Аналитик“ обсудили, что из себя представляет модель Кеневин, чем и в каких ситуациях она может быть полезна тем, кто работает в сфере ИТ и не только.

19.04.2024    531    0    Radio_Analyst    0    

5

Личная эффективность Презентации и публичные выступления Бесплатно (free)

В статье рассказывается о 5 способах развития аналитика уровня мидл, мидл + и выше.

18.04.2024    1418    0    TanyaRi    1    

14

Личная эффективность Презентации и публичные выступления Бесплатно (free)

В шестнадцатом выпуске второго сезона подкаста Радио “Аналитик“ обсудили, что такое матанавыки, в чем их ценность, чем они отличаются от soft skills и как их развивать.

01.04.2024    462    0    Radio_Analyst    0    

4

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

Данная статья является пилотной в цикле публикаций на тему «Профессиональное мировоззрение учетного специалиста», в котором предполагается рассмотреть основные идеи, важные для профессиональной деятельности любого учетного специалиста в области бухгалтерского, налогового, управленческого и любого другого вида учета. В статье рассмотрены критерии научности профессионального мировоззрения, предложен вариант модели бухгалтерского научного знания. Если данная тема вызовет интерес у читателей, то в последующих статьях будет предложена профессиональная мировоззренческая модель на основе пары взаимосвязанных реальностей – хозяйственной и бухгалтерской (виртуальной) реальностей, а также будут рассмотрены принципы построения научных бухгалтерских моделей.

01.04.2024    817    0    Polav62    4    

8

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

В серии “Путь аналитика” мы говорим о том, как аналитики приходят в профессию, с какими задачами работают, с какими трудностями сталкиваются и как их преодолевают.

18.03.2024    469    0    Radio_Analyst    0    

5

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

В серии “Путь аналитика” мы говорим о том, как аналитики приходят в профессию, с какими задачами работают, с какими трудностями сталкиваются и как их преодолевают.

04.03.2024    529    0    Radio_Analyst    0    

5

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

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

01.03.2024    556    0    DuyunElena    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2543 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 Ответить
Оставьте свое сообщение