Информатики не проходили?
АрхивКогда Анатолий Левенчук изъявил намерение заняться школьной информатикой, я, хоть и не воспротивился, но выразил крайний скептицизм. Тогда Левенчук объяснил, что его "тема" будет не о нехватке компьютеров и педагогов, не о "ершолах", и вообще, никакой социальности он разводить не намерен. Речь пойдет о том, какую пользу навыки программирования могут принести среднему человеку, который компьютеры в лучшем случае юзает, а может, и вообще с ними не сталкивается.
Процедурное программирование учит внятно и непротиворечиво описывать сложные действия. Это может пригодиться каждому - чтобы сочинять кулинарные рецепты или инструкции, например. От общения с другими программистскими инструментами и задачами тоже может получиться какая-то общечеловеческая польза. Не поручусь, что так говорил Левенчук, но так я его понял.
Не знаю, каким путем на самом деле пошла собранная Левенчуком команда информатиков, и к чему пришла. Вероятно, узнаю одновременно с вами. А пока - излагаю свои собственные спекуляции на ту же тему.
Начну с оговорок, или, говоря профессиональным языком, с disclaimer'а. Программирование бывает разное, в зависимости от потребностей программиста и от привычного для него способа мыслить. Широко известно программирование математиков (это не математическое программирование и не математиков при этом программируют), затем, аналогично, программирование естественников и технарей, бухгалтеров и экономистов, и так далее.
Не знаю, каков программистский опыт Анатолия Левенчука. Основываясь на его высказываниях, могу предположить, что он системщик, для которого программирование начинается на уровне процессора, с простых команд, ветвлений и циклов. Мое же программирование, это программирование разработчика цифровой электронной аппаратуры. Не считая команд процессора PDP-11 и кое-каких юношеских грехов, можно сказать, что начинал я с Fortran и Pascal, вырос в Unix и нашел свой программистский рай в системе Smalltalk.
Двадцать лет назад мы с Левенчуком могли бы только гадать о том, как компьютеры повлияют на своих пользователей. Теперь многое уже сбылось, и чем больше Россия отстает от других стран, тем легче предсказывать будущее на этой части суши.
Есть много примеров того, как компьютеры повлияли на образ мысли и действия человечества. Скажем, формализацией, классификацией и хранением документов занимались с момента возникновения бюрократии, то есть многие тысячи лет. Ассоциативная память, реализуемая всем известными интернетовскими "поисковками", все это отменила, открыв совершенно новые решения.
Из компьютерного дела пришли некоторые важнейшие социальные идеи. Так называемые плоские корпорации, одна из которых неплохо работает, выпуская еженедельник "Компьютерра", воплощают парадигму объектно-ориентированного программирования. Даже термины при их описании используются те же самые.
Как известно, программа на "структурированном" процедурном языке, от Agol до C, представляет собой иерархию процедур или функций, пересекающуюся с другими иерархиями. Настоящая объектно-ориентированная система (речь, конечно, не о C++) состоит из независимых, изолированных, целостных объектов, которые знают друг о друге и оказывают друг другу услуги.
В системе Smalltalk еще сохранялась своего рода дань античной философии: иерархия идей, то есть классов, которую пытались преодолеть еретики, допускающие множественное наследование. Позже появились реализации объектно-ориентированных систем без классов, в которых объекты можно порождать по прототипам, то есть по другим объектам, а потом изменять, придавая им новые свойства.
Каждый такой объект ведет себя совершенно самостоятельно. Есть даже такая метафора: контрактное программирование. Конечно, можно сконструировать в каком-то смысле иерархическую структуру, но только если придумать этот смысл и привнести его извне.
Что касается азов процедурного программирования, тех самых ветвлений и циклов, то я что-то не вижу вокруг никого, кто бы ими вдохновился. Способность к циклической деятельности встроена в "системы управления" практически всех животных, начиная чуть ли не с одноклеточных, самой природой. Мы идем к цели, грызем кость, размешиваем сахар в чае, копаем яму, совершенно не затрудняясь описанием соответствующих процедур.
Недавно я слышал, как одна радиостанция проводила викторину. Составитель заложил в студийную PC вопросы и правильные ответы на них. Эфирный ведущий читал с экрана вопрос, принимал по телефону ответ, вводил его в компьютер, и тот проигрывал соответствующий звуковой клип: правильно или неправильно. Вопросы были разные. Например, такого типа: "Сколько пуговиц на рукаве у милиционера". Правильный ответ: "Три". Или вот такого: "Почему у милиционера на рукаве три пуговицы". Правильный ответ: "Чтобы нос не утирал". Легко представить себе, как шла у них игра.
В точности такие ожидания можно было наблюдать у пользователей на заре компьютеризации. Как видите, и поныне люди не могут взять в толк, до чего же компьютер туп. Кулинарные рецепты говорят: нарежь, размешай, взбей, вари до готовности. Только программист способен объяснять процедуру нарезки в стиле оператора for и получать от этого удовольствие. Есть, конечно, непроцедурный подход, когда пользователь может командовать исполняющей системе: "Сделай мне вот это, сама знаешь, как". Но и такое программирование лишь несколько более соответствует ожиданиям обычного человека. Удивляться, а тем более подражать тут тоже нечему.
По существу, обсуждаемая здесь гипотеза состоит в том, что через программирование можно научить управлять. Немного зная программистов, смею вас уверить, что повышенных способностей к управлению (хотя бы самим собой) у них не наблюдается. На самом деле, более непредсказуемых и неуправляемых работников в истории промышленности, пожалуй, не бывало.
Чтобы управлять созданием программ, надо мыслить сетевыми графиками и держать в уме критический путь. Большинство людей удивительно плохо справляется с такой работой, и программисты - ничем не лучше прочих. Управление проектами не имеет аналога в их деятельности. Такие задачи возникают на другом уровне, при управлении выполнением программ, а этим занимаются только проектировщики компиляторов и операционных систем.
Существуют удобные прикладные программы для управления проектами, совершенно не требующие программирования. Поисковые серверы можно остроумно использовать, даже не зная, что такое инвертированный список. Устройство плоских корпораций и других механизмов гораздо проще понять непосредственно, чем через изучение объектно-ориентированных систем. Наконец, не верится, чтобы умение применять Prolog возмещало незнание логики и права.
Образование в России совершенно неадекватно потребностям жизни, но и программирование - не панацея. По-хорошему, в средней школе вполне хватило бы вводного курса. Вот экран, вот клавиатура, вот как с ними обращаться, а дальше - обращайтесь, используйте компьютер как инструмент, как имитатор, и так далее. Сейчас мне скажут, что это не реально, что при тех компьютерах и преподавателях, которые нынче есть, единственно только и остается, что учить азам программирования. Но вот это как раз и будет социальностью, без которой мы договорились обойтись.
Я отвечаю только по электронной почте. Письма читателей по умолчанию считаются конфиденциальными. Мой адрес: