Программирование для всех: почему «нет»

в 17:08, , рубрики: всеобщая грамотность, Песочница, Программирование, Учебный процесс в IT, школьное образование, метки: , ,

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

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

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

Да, с этим можно согласиться, но и другие предметы справляются с этим ничуть не хуже. Алгебра, наверное, развивает абстрактное мышление и усидчивость куда эффективнее программирования, потому что не только не прощает ошибок, но и не имеет компилятора, который бы услужливо на них указывал и автоматически открывал страницу документации с примерами. Умение проектировать и планировать заранее — с этим хорошо справляются сочинения, которые школьники периодически пишут на уроках русского языка (иногда еще и на некоторых других). Почему? Потому что сочинение нельзя написать «лишь бы работало», его содержимое требует куда большего согласования, чем средняя программулька в школе. Маловероятна так же хорошая структура в программе на 300 строк, скорее всего, следует ожидать чего-то в духе «asfdyausd.Cilck()» — оценку получил и забыл.

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

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

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

Да, безусловно. Но целесообразно ли тратить несколько лет на то, что потом понадобится в лучшем случае раз в год? Наверное, нет. Если пользователю нужна простая программа или скрипт, то он идет на сайт вроде freelance.ru и ищет кого-нибудь, кто за умеренную плату написал бы ему требуемое ПО. Одни плюсы: быстро, качественно, экономит нервы и, что самое важное, время, которое зачастую дороже денег.

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

Какие программы нужны среднему пользователю? Браузер, «Ворд»/«Иксель», какой нибудь плеер, uTorrent… и все, не считая игрушек и сервисных программ. Тратить много времени и денег на изучение языка только ради одной небольшой программки — неразумно, проще заказать ее рублей этак за ~300-1500. Но даже таким путем идут очень немногие, просто потому, что существующий софт в той или иной мере способен удовлетворить (и даже зачастую превосходит) их потребности.

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

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

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

Иными словами, «Да ладно, я знаю, как это делается!». Это весело, но такая самодеятельность может очень дорого стоить как для организации, так и для работника. В обсуждении приводился пример с дояркой, но давайте, выразительности ради, представим бухгалтера.

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

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

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

Пользователь должен знать, как работает система

Не должен, по большому счету. И даже в программировании, как это ни удивительно, не должен, иначе бы понятия инкапсуляции попросту бы не было. Определение инкапсуляции можно слегка подредактировать, что бы оно больше соответствовало обсуждаемой теме:

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

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

В конце концов, у пользователя есть только интерфейс и он с ним взаимодействует, совершенно не имея необходимости разбираться в тонкостях реализации и не имея возможности нарушить логику программы — разве это минус? Надо полагать, что далеко не все имеют четкое представление, как работают алгоритмы OpenCV, но это совершенно не мешает его использовать. Уже мало кто пишет программы на чистом WinAPI, просто потому, что .NET быстрее, проще и избавляет от утомительной рутины.

Другой пример — наручные механические часы, широко распространены и существуют с 17 века. Многие ли знают, как работает их механизм? Многие ли могут собрать часовой механизм с нуля, пусть даже из готовых частей? Я думаю, что очень немногие. Это никому и не нужно — часы предоставляют интерфейс для подзаводки и настройки, и этого вполне достаточно для пользователя. Как оказалось, это даже слишком много, поскольку пользователю хватит только возможности настраивать время, а подзаводка представляла собой лишние хлопоты. Смешно, но еще недавно казалось, что уж время-то владелец часов всегда и на любом типе часов будет устанавливать сам. Как бы не так:

image

Жизнь слишком коротка даже для того, что бы безопасно извлекать флешку из USB-порта, так почему же следует рассчитывать на то, что человек после 8-часового рабочего дня и полуторачасового стояния в пробке придет домой и потратит остаток времени на напряженное сидение за компьютером в попытке запрограммировать «умный дом»? Скорее всего, он просто пойдет на сайт и купит (закажет) себе подходящую программу для своего «умного дома».

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

Повсеместное распространение компьютеров

Каждый должен уметь кодировать, потому что коммуникации человек/машина и машина/человек станут настолько же распространёнными, как человек/человек.

У этого утверждения есть очень слабая часть — «станут настолько же распространенными». Давайте посмотрим, что очень распространено сейчас:

  • Компьютеры с Windows
  • Компьютеры с Linux
  • Компьютеры с Mac OS
  • Смартфоны/планшеты с iOS
  • Смартфоны/планшеты с Android

Почему же эти системы стали настолько распространены? Ответ прост — потому что не требуется никаких специальных знаний (и даже зачастую чтения инструкции) что бы ими пользоваться. Девушка купила себе смартфон в красивой коробочке, распаковала, зарядила, играет в Angry Birds, которые в два клика купила в магазине приложений и радуется.

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

Иными словами, что бы стать распространенным — нужно сначала стать простым и удобным.

Не так давно IBM 305 RAMAC занимал комнату 9х15 метров, стоил в месяц 26 тысяч современных долларов и был, надо полагать, довольно сложен в управлении и обслуживании. Сейчас его функции с легкостью может выполнять Excel, который не занимает вообще никакого места, прост в использовании, и, что самое важное, не требует никакого программирования — нужно просто клацнуть по кнопке.

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

Так чему же учить в школе?

На мой взгляд, нужно просто хорошо учить тем вещам, которые многим действительно пригодятся в жизни. В первую очередь это, конечно, Word или другой текстовый процессор. Потому, что документы, бумажные или электронные, набирать придется часто и всем. Ха! — скажете вы, — этому и так учат. Но, по моему субъективному опыту, очень многие не знают, что абзацы и отступы отбиваются не пробелом с энтером, что заголовки надо набирать стилем «заголовок» по вполне объективным причинам, что есть автособираемое оглавление и прочие мелочи, могущие очень сильно упростить жизнь.

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

Школьников нужно научить разбираться в основных принципах интерфейса, что бы они потом не впадали в ступор при любом его изменении. «Ой, а тут все по-другому, я ничего не могу найти, поставьте мне Офис 2003 обратно». Короче говоря, морально подготовить их к тому, что завтра Майкрософт наймет новых индусов дизайнеров, которые очень не любят плитку, а Шаттлворту разонравится Unity и он кинет все силы на разработку Plurality.

Нужно научить адекватно реагировать на некорректное поведение компьютера. Нужно научить людей спокойно и правильно описывать сложившуюся проблему и предшествующие действия, а не закатывать истерики в духе «У меня тут окошечко с крестиком, срочно почините, ничего не знаю, мне отчет через пять минут сдавать!». Если этому удастся положить конец хотя-бы на уровне субъекта федерации, то техподдержка придет в неописуемый восторг и в этом субъекте как-то сама по себе возникнет Кремниевая Долина. Не страшно, что Маша не может самостоятельно исправить ошибку, пусть она просто вызовет мастера (и кто знает, быть может она встретит в лице мастера свою любовь? Я видел в фильмах, так бывает), который сможет все быстро и качественно исправить.

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

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

Можно поставить невероятную цель — научить людей читать инструкции, хотя бы перед звонком в техподдержку. Хотя бы часть «Проблемы и решения». А если уж удастся научить человека читать инструкцию целиком перед использованием программы или технически сложного устройства, то в стране незамедлительно настанет золотой век, инновации, нанотехнологии, всеобщее счастье и качественные дороги.

Заключение

«Каждый должен уметь кодировать, потому что коммуникации человек/машина и машина/человек станут настолько же распространенными, как человек/человек.» — да, станут, но это все-таки не аргумент, ведь никто не мешает предположить, что и интерфейсы к тому времени достигнут феерической гибкости. Но некоторые вещи вряд-ли изменятся, и даже через 100 лет почти все можно будет с некоторой долей условности измерить тремя параметрами

  • время
  • качество
  • деньги

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

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

Спасибо за внимание.

Автор: nullptr


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js