При обучении системной инженерии нужно достичь метанойи в системном мышлении, т.е. научиться думать о мире как о состоящем из систем. Это очень контринтуитивно, и требует многих и долгих разъяснений и последующих упражнений. Зато "генеральным конструктором" (вернее -- системным инженером, ибо у генерального конструктора была и сильная менеджерская составляющая) можно будет стать не "самоучкой", а вполне технологично -- после вполне рационально устроенного обучения. На Западе эта технологичность обучения системной инженерии сама собой разумеется, но вот в России это приходится каждый раз объяснять специально. Поэтому в курсе лекций "Введение в системную инженерию" в МФТИ (
http://ailev.livejournal.com/980403.html) я давал студентам довольно большой фрагмент, посвященный возможности быстро и технологично научиться какому-то "непостижимому искусству", которое на деле оказывается не "искусством", а просто недоосознанной технологией мышления, которой можно так же технологично научиться. Этот фрагмент многим студентам понравился и запомнился. Вот он в письменном виде (по содержанию он соответствует началу второго дня лекций, далее весь остаток дня я говорил только о понятии "система"):
Обучение "на генерального конструктора"
В прошлый раз я поставил вопрос, можно ли выучить генерального конструктора, или для этого обязательно нужно генеральным конструктором родиться, иметь врождённый талант? Я говорил, что генеральные конструкторы прорастают из серой массы инженеров сами по себе, как трава через трещины в асфальте. Они из слесарей потихонечку-потихонечку становятся инженерами, затем зам.начальниками цехов, потом растут-растут-растут, и глянь - вот появился генеральный конструктор, как бы "сам собой". Вообще говоря, сто процентов «генеральных конструкторов», они так сами по себе и вырастали на производстве, потому что из вузов выпускали-то (да и сейчас выпускают) «просто инженеров», нигде в России не выпускают именно генеральных конструкторов, эту инженерную элиту. Просто выясняется, что у некоторых людей (генеральных конструкторов) в голове умещается весь самолет, а у некоторых людей ("просто инженеров") в голову самолет не умещается, умещается только небольшое крыло, а может даже меньше.
Честный ответ на вопрос о "выучивании на генерального конструктора": да, этому можно и нужно учить. Выученный специально генеральный конструктор будет выходить из вуза на работу и в первый же день вести себя примерно так же, как себя ведет какой-нибудь, не очень крупный, не совсем выдающийся и талантливый генеральный конструктор, но все-таки, как ведет себя генеральный конструктор, а не просто инженер. У него в голове будет умещаться весь самолёт как целое, а не только его небольшие части.
Обратите внимание: я говорю, что быть генеральным конструктором -- это не врождённые способности, не талант, этому можно научить. Оппоненты говорят, что «вы же говорите немыслимое. Вот был такой человек Ойстрах, он великолепно играл на скрипке -- ну, и как выучить так играть на скрипке? Ведь любая музыкальная школа учит играть на скрипке, после неё вы всегда сможете спиликать что-нибудь. Но вот выйдите после музыкальной школы на международный конкурс и спиликайте что-нибудь так, чтобы 2000 человек сказали «Ах!»». Оппоненты, которых будет много больше, чем половина человечества, говорят, что такого «обучения на Ойстраха» не может быть, потому что не может быть никогда: «не покушайтесь на святое, это ведь человек, это его талант, это что-то божественное, это космос, который проявляется через человека, искусство трансцендентно!».
Все то же самое, что относится к обучению «на Ойстраха», относится и к обучению «на генерального конструктора». Вторая половина человечества говорит: «эта деятельность считается особо интеллектуальной, потому что мы пока не знаем, как она устроена. Но рано или поздно она станет неинтеллектуальной. Рано или поздно она будет восприниматься как обучение ходьбе - чуть ли не механическим навыкам, несмотря на творческость и уникальность каждого отдельного шага». Первая половина человечества понятно, что на это отвечает: «уже прошло много тысяч лет сознательной деятельности людей, а решения проблемы обучения творчеству в общем виде так и не предложено - ну, и как собираетесь учить? И вообще, в СССР как-то генеральные конструкторы-самоучки тоже до космоса долетели». На что им вежливо отвечают: «до космоса-то долетели, но до Луны особо не добрались, а с марсоходами вообще у отечественных инженеров не получилось». Оппоненты отвечают «так финансирования нет».
Сторонники выучивания «на генерального конструктора» говорят: «Вот именно: из-за этого очевидного неумения и финансирования нет. Кто умеет, тому и платят». И дальше напоминают, что у советских инженеров не всё хорошо было. Во времена перестройки часто шутили, что везде в мире манипулятор типа «мышь», а у нас в СССР манипулятор типа «крыс», ибо маленькие-то вещи сделать в СССР не умеют.
Когда-то я задавал вопросы, ставя в совершенно неудобное положение советских начальников: «в учебнике научного коммунизма написано, что капитализм тормозит научно-технический прогресс, особенно во время кризисов. А когда посмотришь в реальности, то обнаруживаешь, что вся лучшая аппаратура, которая нас окружает (а я работал в этот момент на ректорской кафедре, и там было много отечественной аппаратуры, и много аппаратуры из социалистического лагеря, и совсем чуть-чуть аппаратуры из капиталистического лагеря) - из капиталистического лагеря, и она - это всем очевидно! -- абсолютно недостижима в плане производства её в СССР. Это ж какая скорость научно-технического прогресса должна быть у капитализма, если они во время торможения в этом самом их кризисе выпускают вот такие инженерные шедевры?».
И действительно, что отличает западных инженеров от советских, если отвлечься от обсуждения политического строя? Сторонники инженерного самоучества могут говорить, что на Западе талантливых людей держат за шкирку и выжимают из них все соки, и именно поэтому они творят лучшую в мире аппаратуру. Но я считаю по-другому: на Западе все-таки чуть-чуть научились еще и вот это вот инженерное искусство делать не «искусством» в смысле художественного искусства, которое со вдохновением и полётом фантазии и иногда получающимся результатом, а технологией - то есть с воспроизводимым, неизменно превосходным результатом. Порядок (технология) бьёт класс (искусство).
Берем любого посредственного студента, ставим его на правильный учебный конвейер, и через некоторое время у него в голове помещается всё производство правильной «мышки». В этой «мышке», кстати, сейчас довольно много технологий: там есть и лазер, и небольшой компьютер, и беспроводное радио, и тефлоновое покрытие, которое плохо истирается, но хорошо скользит. Чтобы удержать в голове столько технологий «мышки», системный инженер должен иметь хорошо организованную голову. И к курсу третьему у него будет получаться удерживать в голове вот такую «мышку», а к пятому курсу - небольшую ракету, которая летит еще, может, не с континента на континент, но километров 200 уж точно. Противники образования генеральных конструкторов/системных инженеров на что отвечают уже без аргументов: «вы ничего не понимаете!».
Когда-то операция деления считалась привилегией особо талантливых, и за знание деления давали докторскую степень. И итальянские университеты считались особо искусными в делении, потому что, делить в римских числах - это то еще удовольствие, это трудно. Когда мне говорят, что чему-то «творческому» научить нельзя, что системный инженер, генеральный конструктор, менеджер-организатор растут как сорная трава в столкновении с асфальтом жизни, и преподносят это как результат «производственного опыта, и только», то я отвечаю: «конечно, производственный опыт важен, но не с этого опыта нужно начинать».
Дошкольная алгоритмика
В 1985 году в СССР решили, что программированию надо учить в средних школах. Знающие люди говорят, что это было в тот момент, когда советская военная техника во время шестидневной и прочих войн на Ближнем Востоке начала не успевать взлетать с аэродромов и как-то реагировать на действия шустрого противника. Понятно, что операторами той самой нашей военной техники были вовсе не граждане СССР, а обученные нами иностранцы. А операторами техники противника - тоже, в общем, все обученные. Авторы техники смотрели на чужом поле боя, чья техника кого сборет. И выяснилось, что вот наша хваленая техника просто взлететь не может, до прямого столкновения в воздухе дело даже не доходит. И маленькая, но гордая страна Израиль всех союзников СССР побеждает, невзирая на организованную из СССР мощную военную помощь. Выяснилось, что причина в образовании: у вражьих сил сложные приборы и правила работы с ними в голову помещаются, а у нас вот со сложными приборами и правилами работы люди работать не умеют, в голову это не вмещается. С получением операторов сложной техники та же оказалась постановка проблемы, что с системными инженерами, только не на уровне высшего образования, а на уровне среднего. Главный вопрос тот же: насколько сложные системы помещаются у человека в голову, чтобы среднего (а не талантливого) человека можно было научить нажимать кнопки на радиолокационных станциях, на системах запуска ракет. Аппаратура тогда еще была не такая, как сейчас -- с одной кнопкой, чтобы запустить ракету. Нужно было, скажем, два десятка кнопок нажать. А в голову не слишком образованных операторов 10 кнопок еще помещалось, а два десятка -- уже нет. А уж как весь комплекс работает, и какие кнопки в каком порядке нажимать, если что-то пошло не по плану (а в бою всё обычно идёт не по плану) - это вообще в голову не помещалось.
Осознав, что проигрыш оказался в образовании операторов неожиданно ставшей сложной военной техники, в нашей школе в 1985г. ввели информатику в качестве учебного предмета. Выяснилось, что в военной технике то тут, то там уже есть кусочки компьютерного обеспечения, и нет людей, которые с этим могли бы справляться.
Эта тема информатики в нашем курсе тоже важная, потому что есть тесная связь программной инженерии с системной инженерией. И я, рассказывая байки, потихонечку продвигаюсь к этой теме.
В нашем курсе я не буду в изобилии формулы на доске писать и открывать секрет системной инженерии, выраженный в формулах. Я так и буду до конца курса байки рассказывать. Правда, эти байки специальные, и они ориентированы на «снос головы». Хотя гарантировать «снос головы» после этого курса я не могу, у каждого ведь своя голова по крепости, своя цельность натуры. Цельная натура - это ведь какая? Это меднолобая натура, ее ничем не прошибешь, никакими специальными байками, и она выйдет из учебного курса, не поменяв никаких своих убеждений.
Итак, в конце восьмидесятых стало очевидным, что в сложных технических устройствах завелось что-то трудноуловимое, что уже не охватывается мышлением среднего человека. Почему только тогда? Вспомните 1985-й год, где в СССР были персональные компьютеры, хоть какие-нибудь? IBM PC выпускался на Западе только с 1980 года, в СССР его практически не видели ещё. Какого размера тогда были доступные компьютеры? Если не считать простейших калькуляторов, то самая маленька СМ-4 была размером со стенной шкаф. Но вычислительная мощность у неё была несопоставимо меньше, чем у меня сейчас в телефоне - в разы и разы меньше. Если взять разрешение экрана современного телефона, то в крупных научных институтах пикселей на экранов всех компьютеров, наверное, не хватало бы в 1985 году, чтобы сравниться с числом пикселей экрана этого карманного телефона. Я уже молчу про цветные пиксели, тогда ещё экраны были главным образом монохромными. Компьютеры ставились в машинных залах с фальшполами, это был 85-й год. У меня самого СМ-4 была с номером 00047, в 1982 году. Это как раз вот 82-й год, а с сентября 85-го решением политбюро ввели информатику в школах СССР. До власти дошло, что что-то такое происходит в военной сфере именно потому, что компьютеров мало и простые солдаты недостаточно обучены для адекватной работы операторами сложной военной техники. Принимались безумные решения по линии «догнать и перегнать», то есть не развивать свои разработки, великолепную машину БЭСМ-6, а «слизать» мейнфреймы IBM. В этот момент уже начали выпускать и мини-компьютеры. Та самая СМ-4 - это была копия PDP-11. Наши ЕС ЭВМ - это IBMsystem/360. И в этих условиях вся страна вдруг начала учить информатику. Никто не знал, как её учить. В МГУ на мехмате собралась группа «Аттик», которая разработала вузовский учебник информатики, а затем разработала школьный учебник информатики и определила в нём, в чем, собственно это обучение информатике заключается. Выяснилось, что в голове среднего человека действительно нет сформированного куска мозга, умеющего выполнять вполне определенные операции, связанные с планированием действий в неопределенном будущем. То, что я сейчас вам буду говорить, это и есть вот настройка мозга на какую-то определенную деятельность. Мозг настраивается на деятельность, «становится на рельсы» -- и далее по этим рельсам привычно выполняет все необходимые операции.
Выяснилось, что любой ребенок способен рассказать последовательность действий, какую он видел раньше, и последовательность действий, которую он планирует развернуть прямо сейчас, глядя на доступные ему предметы этой деятельности. Он может рассказать плант того, как он сходит за хлебом прямо сейчас. Но если попросить какого-нибудь ребенка, чтобы он внятно рассказал, как сходить за хлебом завтра, то будет затык. Ему надо будет перенестись мозгом в будущее и в будущем начинать разворачивать какой-то план, план будущего в будущем. Дети тут застывают после первого действия - там же последовательность: одеться, узнать у мамы, чего нужно взять, проконтролировать достаточность денег, выйти из дома, пойти потом направо или налево, и всё это должно быть развёрнуто в будущем.
Если их сбить с толку вопросом «а если там перекопали, что ты будешь делать?», то происходит полная остановка деятельности. Ибо появляются развилки условных действий «если перекопали, то обходишь, иначе идёшь как обычно». Эти формулировки детям даются не так легко, как может показаться, особенно если они вложенные.
Этому «составлению плана-в-будущем» не учат на уроках физики, не учат на уроках алгебры и геометрии. Вот этому планированию с развилками, разворачиванию действий в неопределенном будущем, процессной работе не учит ни один школьный предмет. Ну, может быть, некоторое общее умение что-то спланировать в неявной форме у учеников и формируется стихийно, но проблемы с формулированием хоть сколь-нибудь сложных планов и записью этих планов не решаются.
Школьная алгоритмика - это ровно про это умение. Люди из группы «Аттик» пишут школьный учебник информатики, о целях которого говорят: «учить надо составлению планов в неопределенном будущем». Они простейший алгоритмический язык, который так и назвали - «школьный алгоритмический язык» Правильное название - Ершол (в честь академика А.П.Ершова, который этот язык придумал, и неформально так этот язык все и называют). Язык не меняется уже двадцать пять лет сейчас ЕГЭ по информатике принимают на Паскале, Си и Ершоле.
Люди из группы «Аттик» сформулировали, чему учить, и попытались понять, как учить. Они придумали методику обучения и попробовали учить сразу во всех классах -- с первого класса по 10-й класс. Обнаружилось (последним мне об этом говорил Сергей Бебчук, работавший с одарёнными детьми), что до шестого класса детей алгоритмике учить бесполезно, а начиная с седьмого класса обучение происходит без особых трудностей. На основе этих экспериментов было принято решение, что обязательное образование по информатике проходит, начиная с седьмого класса. Учебники алгоритмики были написаны именно для 7-го класса, тираж только учебника Кушнеренко-Лебедева-Сворня был больше 10 миллионов экземпляров.
Курс алгоритмики, который считался на тот момент курсом высшего образования, в существенной его части был опущен до уровня курса для седьмого класса. В те бескомпьютерные времена были легенды о соревнованиях между учениками, которых учили алгоритмике с компьютерами и без компьютеров. Выяснилось, что ученики тех классов, кто учили вот школьный алгоритмический язык без компьютеров (с доской, тряпкой и листочками бумаги), часто побеждали учеников тех классов, которые учились с компьютерами. Почему? Для алгоритмики важно, чтобы в голове были сформированы навыки правильных мыслительных операций, чтобы в голове проложились рельсы, по которым двигается мышление. А с инструментом, или без инструмента - для скорости мышления это уже неважно. То есть вам поставили какой-то особый тип мышления, и это мышление начало работать, вы можете решать задачи в какой-то предметной области. В случае алгоритмики вы можете разворачивать какие-то конструкции с ветвлениями, у вас в голове появляется понятие последовательности, понятие цикла, понятие ветвления, условного оператора, понятие логических переменных, сложных условий. И когда это всё у вас в голове есть, вам все равно, на каком языке писать, и какие именно алгоритмы или планы писать.
Это формулирование учебного предмета школьной информатики происходило примерно с 1985-го по как раз 1992-й, когда в стране развалилось вообще все и дальше долго катилось только по инерции. Все научные коллективы ушли в бизнес или уехали за рубеж, так что исследованиями просто некому было заниматься. Школьная информатика так и застряла на уровне преподавания в седьмом классе.
Прошло 20 лет, и в прошлом году мне люди из той команды «Аттик» говорят: «У тебя дитенок во втором классе? Мы тут вот программку сделали, ты ему задачки с этой программкой дай порешать. Он сможет, эти задачки мы вообще для детского сада выдумывали». Дал я дитенку эти задачки, смотрю, они действительно, простые. Я сообщаю: «Ребята, задачки эти мой дитенка решил решил». И тут они говорят: «А теперь дай ему наши давно известные задачки для 7-го класса». Я пытался возразить, что терпеливо жду, пока он дорастет до 7-го класса, потому что до того момента учить алгоритмике бесполезно. Они уговорили меня попробовать. Я исключительно из уважения решил попробовать.
День или два ушли у меня на объяснение того, что в «детсадовской» программке надо было мышкой кликнуть, а затем перетащить какую-нибудь команду-стрелочку в нарисованную ячеечку для команды, а в программе для седьмого класса нужно было словом эту команду написать. Например, цикл для детсада - это поместить значок «повторителя» в ячейку для повторителя команд, а тут начало цикла нужно было словами выражать в редакторе текстов. Через несколько часов буквально, у дитенки в голове что-то щёлкнуло - он понял, что эти вот операции мышкой с командами-картинками и ячейками, и операции с написанием слов - это одни и те же операции. И тут же решил первые задачи курса Ершола для седьмого класса. Я ему следующие подсунул, он и их решил. А когда я на больную голову вечером понял, что я какую-то задачу сам не могу решить минут 20 уже, когда у дитенки случился на какой-то задаче затык, я понял, что в этой задаче были уже какие-то уже рекурсии вложенные, штук пять или шесть подпрограмм, и я вообще не понимаю, как мой дитенка добрался до решения подобных задач. Я только тогда начал интересоваться, что это за задачи мне дали. Выяснилось, что задачи эти для физматшколы, что было уже несколько поколений технологии обучения алгоритмике для седьмого класса, и семиклассников таки научились быстро учить писать программы на Ершоле. Но почему эти задачи смог решать мой второклассник?! Выяснилось, что через 20 лет произошло то же самое, что произошло с делением в итальянских университетах. Люди из постепенно разобрались с тем, как нужно делить, и после этого начали этому обучать других. Сначала студентов, а не только философов и докторов, а потом - вот у нас сейчас деление проходится чуть ли не в первом классе школы. Так и группа «Аттик» сумела понять, как учить информатике, и добавка решения нескольких задач в хитрой программе с командами-картинками и ячейками для этих команд-картинок вдруг обрушила тот порог, который не давал учить алгоритмике маленьких детей.
Выяснилось, что в обучении алгоритмике есть три существенных части, которые нужно учитывать. Первая часть - это, собственно, алгоритмическое мышление, это вот те самые рельсы в мозгу, которым нужно научить. Вторая часть - это синтаксис языка программирования, потому что алгоритм нужно как-то выражать, и без синтаксиса конктретного языка его не выразить. Третья часть - это необходимость работы алгоритмического мышления с объектами из какой-то среды, и поэтому учить на языках чисто процедурных нельзя, а надо подняться хотя бы на ступеньку так называемых «пакетных» языков типа Модула или Ада. Замечу, что речь даже не идет об объект-ориентированном современном программировании, это более элементарный уровень. Для школьного алгоритмического языка эта «пакетность» была сформулирована как необходимость наличия какого-то предметного мира, и связанного с этим миром исполнителя (а программное средство, поддерживающее этот подход назвали КуМиром - Комплектом Учебных Миров).
Раньше считалось, что учить алгоритмику нужно на примере математики. Люди из группы «Аттик» сказали, что нужно мир математики заменить на мир двигающегося на клетчатом поле робота с командами «вверх», «вниз», «влево», «вправо», «закрасить клетку». Я думаю, это многим знакомо, потому что я рассказываю самый обычный школьный курс для седьмого класса.
Что же произошло в 2011 году? Люди из группы «Аттик» сказали: давайте мы оставим минимум понятий, необходимых для программирования - последовательность команд, подпрограмма, цикл «раз», условный оператор. Необходимость освоения синтаксиса по возможности исключим, язык у нас будет графический - нарисованные плашки с иконками-командами нужно будет укладывать мышкой в фиксированный набор ячеек для команд. При таком подходе можно учить даже тех, кто читать не умеет! «Вот эта плашка-стрелочка заполняет вот это вот место» -- вот и весь синтаксис. Мир был сделан совсем маленьким, команд движения роботом стало даже не четыре (по направлениям), а три (только «вперед» и повороты вправо и влево). И вот этим крохотным синтаксисом в крохотном мире смогли овладевать дети в детских садах, и не только в подготовительной группе, но даже и в старшей.
Как сказала одна из принявших участие в эксперименте воспитательниц, «я в первый год не верила, что вообще дети-шестилетки могут освоить оператор цикла, я думала, что их предел - только последовательность команд. На второй год я поняла, как этому циклу шестилеток-подготовишек учить, и теперь верю, что научить можно всех шестилеток. А эксперименты мы ведём уже со старшей группой, и эти эксперименты успешны». На моих глазах, глазах одного поколения, вузовский курс (я учил программирование на химфаке в 1975 году примерно в том же объеме, какой сейчас обсуждается для начальной школы) был опущен не только до уровня средней школы, но и до начальной школы, а большими кусками и до детсадовского уровня.
И если раньше это называлось «школьная алгоритмика», то появляются первые работы, первые доклады об успехах, в которых закрепляется термин «дошкольная алгоритмика». Алгоритмика - это ведь не просто расхожая уже «информатика для малышей», понимаемая как крайне упрощенная «логика» с задачками типа «вот уточки розовые, уточки желтые, вперемешку, найди общий признак и рассортируй на две кучки». Да, нынешние учебники «Информатика» в большинстве своём вообще не содержат алгоритмики, которая про составление и записи планов действий в неопределенном будущем. В «дошкольной алгоритмике» дети реальные программы пишут, причем не все взрослые такие программы смогут написать, смогут решить предлагаемые дошколятам задачи. Почему? У этих взрослых в голове просто нет этих «рельсов для мышления» в части алгоритмики.
Когда с простейшим синтаксисом и учебным миром мы проходим ступенечку понимания с маленькими детками и кладём первый участок этих «рельс алгоритмического мышления», то дальше оказывается возможным пройти и весь курс седьмого класса. Секрет был просто в облегчении прохождения маленькой первой части большого сложного курса. Дитенка не может сразу одолеть сложный текстовый синтаксис, сложный мир робота, понятия алгоритмики. А упрощённый синтаксис и упрощенный мир на меньшем числе операторов алгоритмического языка он одолеть может, и после одоления первой ступеньки этой лестницы сложности дальше легко проходится вся лестница - до самой её вершины. На это изобретение ушло двадцать лет, а без первой ступеньки вся лестница была недоступна.
Мое утверждение в том, что системная инженерия - это вот такие же «рельсы в мозгу» для работы со сложными техническими системами. Если вы перестраиваете ваши мозги на основании курсов системной инженерии, прокладываете в мозгах «рельсы мышления системного инженера», то по окончании учебного курса в вашей голове вы сумеете удерживать как целое более-менее большие системы. Ну, а когда дойдет до уровня искусства, ибо этот уровень неразгаданного ещё мастерства всегда есть, выяснится, что системы, которые у вас удерживаются в голове как целое, много больше, чем те системы, которые удерживаются в голове самоучек, которые выросли в системных инженеров как Кулибины, сами по себе. Почему? Ну, потому что образованный Кулибин, он совсем гениальным Кулибиным будет, если он хорошо образован. А необразованный Кулибин имеет потолок в своей работе, поэтому ракеты у него время от времени будут взрываться и не долетать до той точки, куда надо.
Вторая половина текста тут:
http://ailev.livejournal.com/1013825.html