Почему надо изучать программирование


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

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

В обществе и массовой культуре программирование понимается как самая обычная профессия, высокооплачиваемая и привлекающая разной степени гиковатости личностей. Ну, да, ещё такой профессией, которая из обычного студента может сделать миллиардера, но такое случается крайне редко. Однако, не всё так просто.

Программирование - это фундаментальный навык. Примерно на уровне "писать-читать-считать". Многие (включая и самих программистов) не понимают этого. В чём заключается собственно "программирование"? Грубо говоря, это решение какой-то задачи. И сводится оно к двум процессам: анализ и синтез. Или, другими словами, деконструкция и конструкция.

Анализ - это разбор реальной (или не очень реальной) ситуации, выделение сущностей, категоризация, операционализация и так далее. Например, чтобы написать программу, решающую какую-то бухгалтерскую задачу, нужно понять, что есть такие сущности как "счёт-фактура", "кассовый аппарат", "чек", "опись", "точка продажи", "дебит", "кредит" и так далее. Многие из этих сущностей абстракты, некоторые вполне себе реальны. Сущности эти связаны между собой. Сущности также участвуют во всевозможных процессах. Результат анализа - это ментальная модель, которая описывает ситуацию, явление, или что-то в реально мире. Модель может быть как и в вашей голове, так и записана в виде документации, диаграмм, схем, и так далее.

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

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

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

Пишите свои комментарии на эту тему. Если тема окажется интересной, я её продолжу в этом блоге.


Comments 13


Интересно конечно. Может цикл статей напишешь? Например "программирование для чайников" и тд. По мне так, учитывая частоту обновления технологий, программирование надо класса 5-6 ввести в школах обязательно.

08.07.2017 14:24
0

Я думаю об этом. Как раз хочу написать пост про "программирование для непрограммистов".
Насчёт того, когда надо начинать преподавать, то тут вопрос не в частоте обновления технологии и не в скорости прогресса, а в том, какие базовые навыки становятся всё более и более актуальными. И, да, начинать обучать, имхо, надо ещё до школы.

08.07.2017 14:32
0

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

09.07.2017 16:20
0

Видимо, придётся таки писать об этом :)

09.07.2017 16:22
0

Раз Вы хорошо знаете тему и при этом готовы доступно её подать, объяснить - то грех этого не сделать :)

09.07.2017 16:26
0

Этим я периодически и занимаюсь :)

09.07.2017 16:54
0

Анализ и синтез.. то что вы описали, очень подходит под описание способа мышления математического склада ума. Технарей. Я далек от мысли, что гумунитариями рождаются, но я уверен, что ребенок, может залениться приобретать такой мыслительный аппарат в школе, например. Ведь когда вопрос встает ребром: кто ты, гуманитарий дрожащий или право имеешь?=) Многие могут испугаться математики, и решить что "это не для меня". Встречал такие примеры. Зато если основную техническую дисциплину поменять с математики на программирование - это сделает "технический" путь более интересным для тех кто делает этот выбор. И начав программировать, начав использовать в мыследеятельности синтез и анализ - можно и математику победить. Школьный курс как минимум. Поэтому да, программирование обязательно нужно учить!
Но я всегда думал, что этот путь мышления вызван не программированием, а именно техническим, математическим подходом. Наверняка физик или строитель, используют точно такой же подход, в решении своих проблем.

09.07.2017 21:46
0

Я лично против деления на "технарей" и "гуманитариев". Мне кажется оно крайней неконструктивным.
Я не просто так говорю, что это фундаментальный навык. Анализ и синтез - это про гуманитариев в том числе. Взять, например, литературу: анализ текста, героев, характеров, сюжетных линий, арок.. и синтез нового текста. Думаю, для любой творческой специальности это справедливо (и я не говорю про социальные).
По поводу математики в школах - судя по тому, что я слышал от людей, здесь прежде всего важен учитель. К сожалению, не все могут сделать математику интересной (хотя, казалось бы, это и не так сложно). И да, математика - это прежде всего абстрактное мышление, а без него нельзя изучать никакую другую науку.

09.07.2017 22:04
0

Когда человек с техническим складом ума ( тот, кто использует в своем мышлении анализ и синтез) занимается творчеством, он это делает намного лучше, чем человек с гуманитарным складом. Только посмотрите на нотную грамоту, это же чистая математика. Так же и в литературе. Просто тот, кто использует там анализ и синтез это не типичный гуманитарий, а настоящий технарь, с соответствующим подходом. Технарь может заниматься творческой деятельностью, и сделает это на другом уровне, а вот чистый гуманитарий, человек отказавшийся от анализа и синтеза в своем мышлении, не сможет в математику или программирование. Поэтому важно именно еще в школе этому научить. Насчет преподавателей согласен. И программирование без преподавателя всем не выучить.

10.07.2017 06:35
0

То, что человек не знает таких слов как "анализ" и "синтез" и не занимается этим явно, не значит, что процессы в его голове не ложатся в этот фреймворк. Я думаю, что "чистый гуманитарий" - это миф, или, скорее, отговорка для тех, кто не хочет учиться. Но я не силён в когнитивистике.

10.07.2017 08:17
0

"Программирование - это фундаментальный навык."
Я, вот как юрист, хорошую часть жизни проработавший в области международной торговли, экспорт-импорт и так далее и продолжающий , в некотором роде, данную деятельность сегодня, более чем согласен с данным утверждением и всячески поддерживаю автора в его нелегком начинании. Програмирование и иностранные языки (минимум две штуки) это то, без чего завтрашний школьник и сегодняшний более-менее успешный менеджер могут просто топать на свалку истории.

12.07.2017 10:39
0