Архивы: по дате | по разделам | по авторам

Мама, я не хочу быть ламером

Архив
автор : СЕРГЕЙ ЯКОВЛЕВ    25.05.1998

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

Наполеон Хилл

Нам нужен Программист

Признаюсь: термин "программист" мне все чаще хочется относить не к знатокам и профанам ассемблеров-бейсиков-вижуалсиплюсплюсов, не к специалистам по драйверам MS-DOS и ядру Unix, даже не к группам объектно-сориентированных системных аналитиков-архитекторов, а к людям, мышление которых сочетает в себе трезвую расчетливость с безграничной фантазией в таинственной пропорции, позволяющей им находить, формулировать, а затем красиво и эффективно решать разнообразнейшие задачи и проблемы. Мне представляется, что способы мышления и способности к мышлению этих людей, занимающихся политикой и информатикой, бизнесом и художественным творчеством, физикой и психологией… сближают их, делают понятными и интересными друг другу в большей степени, чем сближают группы традиционных программистов компьютеры, с которыми они работают.

 

Глубоко симпатичная мне черта "Компьютерры" - неослабевающие и нередко успешные попытки взлететь над суетой, что очень непросто при освещении событий и идей, имеющих место в модном, актуальном, динамично меняющемся ("дай Бог, успокоится когда-нибудь!" Или: "не дай Бог, успокоится!") мире компьютерном и в землях сопредельных… Один мой приятель (язык Паскаль он давно выучил, все процедуры и функции наизусть знает, а вот программы почему-то не получаются) сказал, что ему журнал не нравится, так как в нем "вместо дела полно философии". Что ж, понимая под философией "такое <…> мышление о предметах, <…> когда они рассматриваются под углом зрения конечной цели истории и мироздания" (М. Мамардашвили), а не наукообразные -измы, которые мы когда-то вместе с ним выучивали, это можно считать неплохим комплиментом!

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


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

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

Спрос на разработчиков и реализаторов реальных планов и программ постоянно возрастает по мере развития общества. А значит, правомерны следующие вопросы: И откуда же они берутся? Чему и как нужно учить нормального человека, чтобы в результате получить специалиста, способного на выработку компетентных (то есть учитывающих многочисленные нюансы, включая динамически возникающие) решений, на их рациональное обоснование и доходчивое разъяснение, на управление их реализацией?

Так речь все-таки идет о специальном образовании? Нет, об образованности вообще и об общем образовании. Ведь вы не против того, чтобы ваши дети принимали компетентные решения в жизни? Значит, и вам нужен программист! Всем нужен программист.

Образование - чего?

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

Более конструктивная формулировка "наличие совокупности знаний для…" (предложенная многими коллегами-программистами) - тоже не вполне удовлетворительна: зачем багаж знаний тому, кто не в состоянии правильно им распорядиться (в смысле физических возможностей, совести, этики и др.)? Это подмечено давно и отражено в народной мудрости об "умной голове, что дураку досталась".

Центральное место в образованности занимают не знания, и даже не умения (знания тела), а набор навыков, позволяющих человеку играть самостоятельную роль в обществе (навыков, через которые проявляются и умения, и знания). Отсутствие подразумеваемого набора навыков делает человека инвалидом (не принципиально - нет ноги, не знает, как ею пользоваться или временно не может пользоваться из-за гипса; то же - о мозге, хотя и не всегда заметно):

  • окружающим не важно, если X не знает, что 2х2=4 (взбешенная учительница и плачущая мама не в счет), но из этого незнания проистекает его неумение производить простейшие вычисления, когда в калькуляторе села батарейка, а это уже делает его неполноценным членом общества;
  • если X утверждает, что не слышал о Пушкине, окружающие, скорее всего, сочтут это шуткой (хотя знающие и о его предыдущем свойстве, возможно, заподозрят некоторый диагноз), проявится же, скорее всего, отсутствие у Х навыков общения на темы "поэзия", "русская культура" и многое другое;
  • если X не знает, для чего предназначен стакан с минералкой, то это - его очередные трудности, но отсутствие навыков поведения в обществе делает его социально опасным.

Навыки, сгруппированные по тематическому принципу, называют грамотностью. Мы не только констатируем, что некто грамотно говорит и пишет, но говорим также, "грамотно вел себя", "грамотный специалист"… В частности, можно говорить о "компьютерной грамотности" - наборе знаний и базирующихся на них навыках нажимания на кнопки, работы в среде текстового процессора или электронных таблиц, Internet или Norton Commander, графического редактора или Doom, а также навыка делать умное лицо, говоря обо всем этом…

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

Итак, речь идет о содержании общего образования: из пункта А в пункт В… Что же требуется создать, образовать? Личность В, обладающую некоторым (сделаем вид, что известным) набором свойств и способностей (методов), унаследованных, доопределенных или переопределенных из набора свойств и методов милого ребенка А. "Начиная с определенной точки, возврат уже невозможен. Этой точки надо достичь" (Ф. Кафка).

Невозможно говорить об образовании, замалчивая роль учителя. "…В действительности нет ничего такого, чему нужно было бы учиться. Нам нужен лишь учитель, который смог бы убедить нас, какая огромная сила имеется на кончиках наших пальцев" (К. Кастанеда). Учитель - это не обязательно педагог. Это и мать, и мать-природа, и красный цветок, давший опыт ожога и опасности, и стая…

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

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

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

Чему же учить, когда учить нечему?

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

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

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

Где же в этом творчестве я вижу навыки будущего (если не помешают) программиста, где грань, отделяющая творчество от прагматичности? Да там, где воплощение творческого замысла оказывается невозможным без инженерного расчета: детали склеиваются пластилином (о его применении принимается решение!), для торта подбирается последовательность формочек… А вот стук кастрюлями друг о друга - это чистое искусство, обходящееся без программирования. Посмотрите на картины Сальвадора Дали: половина из них (но далеко не все) написана программистом!

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

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

 

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


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

  1. имеется конечное множество правил игры, нарушение которых запрещено;
  2. поставлена цель, достижение которой должно быть гарантировано, независимо от каких бы то ни было условий, не противоречащих правилам;
  3. необходимо составить план (алгоритм) ее достижения на основе все тех же правил.

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

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

Для решения головоломок (тем более, головоломных задач реальной жизни) необходимы анализ и синтез, умение мыслить логически, логично в смысле формальной логики (с точки зрения формальной логики, зачеркивание в билете спортлото номеров 1, 2, 3, 4 и 5 столь же "логично", как и любых других пяти цифр; с точки зрения так называемой логики здравого смысла - это абсурдно и гарантирует проигрыш, ведь "никто и никогда так не выигрывал!"). Да, всему этому учат, казалось бы, все. Но оттого, что анализ, синтез и логика сияют на знаменах практически всех учебных дисциплин, не становится легче: в истории анализируются только исторические условия, в химии синтезируют только химические вещества, а логика поступков литературных персонажей, слава Богу, бесконечно далека от формальной.

 

А не математика ли это?

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

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

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

Вычисляя сложный интеграл, человек поочередно прикладывает к нему ряд шаблонов. Интеграл будет взят, если либо окажется табличным, либо будет упрощен (если формула при этом выросла - не страшно: ведь она описывается простым шаблоном a+b+c или ab/cd, а эти a, b, c и d вычисляются отдельно). Это не моделирование. Это - рутинная (хотя и интеллектуальная в физиологическом смысле, похожая на творческую) работа, нахождение уже существующих решений. Подобным же перебором шаблонов решаются целые классы задач арифметики, геометрии, дифференцирование сложных выражений, определение пределов и сходимости рядов…

Совсем другой деятельностью занимается математик, оперирующий тензорами, группоидами, подалгебрами и сигнатурами… Он тоже ничего не моделирует, а исследует сложный (но абсолютно логичный!) искусственный (созданный им же или коллегами) объект, мир искусственных понятий.

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


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

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

Учителя (или "Кто виноват?")

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

Подход поэтический. Преподаватель читает вдохновенно, заражая учеников верой, что это нужно и интересно. Студенты переспрашивают, решают дополнительные задачи, посещают консультации… В результате - примерно 50% достаточно сносно программируют (еще 20-30% успешно сдают экзамен). Им интересно, но их навыки не подкреплены системой знаний. Кто-то из них, перейдя в какую-нибудь область настоящего программирования, имеет шанс стать асом…

Подход казарменный. Преподаватель четко формулирует определения и правила, разбирает по одному примеру, дает обязательные для решения задачи. На все вопросы отвечает: "Это было в лекции" (действительно, было!). Студенты знают, что либо они разберутся во всем, либо не сдадут (действительно, не сдадут!), - и посещают 100% занятий, разбирают казуистические формулировки, ненавидят программирование и преподавателя… 70-80% сдают экзамен. Все комиссии констатируют хорошую фиксацию набора базовых знаний и навыков… Никаких знаний и навыков, кроме зафиксированных, у этих ребят никогда не будет.

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

Разновидность научно-практическая. Преподаватель ярко и подробно обсуждает историю информатики от Ады до Ады, поколения ЭВМ и ЯП, преподаваемый ЯП и типичные примеры его использования. Он получает 70-80% эрудированных специалистов, умеющих решать шаблонные задачи (то есть те, которые решать им не придется), которые будут столь же "успешно" учить программированию следующие поколения. Умеют программировать - 0, но один энтузиаст уходит в дебри электроники, а другой - в дебри теоретического программирования. Преподаватель гордится выпуском. Это они - основной контингент институтов и программистских фирм, это из-за них возникает вечный вопрос "почему ПО такое дорогое", из-за них программирование предстает перед непосвященными разновидностью магии: "группа прекрасных программистов над этой задачей уже три года бьется"… Да не программисты они!.. а просто "прекрасные ребята", занимающиеся программированием.

Как же совместить утверждение о "силе на кончиках пальцев" со столь пессимистической картиной? Или это - сила кончиков пальцев, проявляющаяся только в форме кнопкодавства в стрелялках и прочих виртуалках? Или реальную силу способны получить только продавшие душу Дьяволу вирусописатели и электронные взломщики чужих секретов?

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

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

И несмотря на это, на мой взгляд, все не столь трагично.

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

Под компьютерной грамотностью я понимаю то же, что и под всеми остальными грамотностями: набор навыков по применению компьютера для… чего угодно - игр, просмотра слайдов и набора текстов, взаимодействия с Internet, программирования и множества других вещей - приятных и/или полезных. Что я понимаю под программированием, описано выше достаточно пространно. А информатика объединяет в себе все, что с переработкой информации связано, - и компьютерную грамотность, и большую (ударение на любом слоге) часть программирования, и, по-видимому, многое другое, постепенно обретая, подобно предшественникам - философии и математике, - достойный статус наднауки.

И "что делать?"

Чему же следует учить на уроках программирования? С чего начинать? Что в нем самое базовое? Простота! Для многих людей сложным оказывается понять, поверить, что речь идет о систематизации довольно-таки очевидных навыков - четко выполнить план, записать план, записать план выполнения пункта плана, вовремя отметить и учесть, что похолодало или что значение переменной i увеличилось на 1…

Так как речь рано или поздно заходит о языке - будь то блок-схемы, автокод или ЯП, нужно для начала научить читать, потом - писать диктанты и изложения, потом - переходить к сочинениям (программам). Фундаментально и очевидно положение о том, что языков много, но любую мысль можно выразить на любом из них…

 

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

  1. если ИХ много, то ЦИКЛ;
  2. если к моменту обработки ПЕРВОГО известно, сколько ИХ всего, то ЦИКЛ ОТ 1 ДО N;
  3. если нужно не сбиться со счета, необходима переменная цикла;
  4. если к моменту обработки ПЕРВОГО неизвестно, сколько ИХ всего, то ЦИКЛ-ДО или ЦИКЛ-ПОКА, в зависимости от того, всегда ли есть ПЕРВЫЙ;
  5. если ОНИ нужны не раз, то ПОСЛЕДОВАТЕЛЬНОСТЬ (массив, файл, список…);
  6. значение переменной можно использовать, если переменная действительно им обладает;
  7. если нужно сделать что-то НЕОЧЕВИДНОЕ, то это - ПРОЦЕДУРА;
  8. если ПРОЦЕДУРА вычисляет что-то одно, то это - ФУНКЦИЯ;
  9. У процедуры бывают параметры - входные и выходные.

…Кроме содержания аккордов, существуют практические приемы их исполнения:

  1. Необходимо придерживаться определенных норм.
  2. ЕСЛИ какой-то из пунктов нарушен, то ПОЧЕМУ?
  3. Записанный алгоритм, скорее всего, неправилен, поэтому требует тестирования и отладки.

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

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

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


Я стараюсь по возможности отдалить начало кодирования (записи на ЯП) от начала работы над задачей. Ученики же, воспитанные на опыте так ничему и не научившихся предшественников (родителей и других старших товарищей), выражают недовольство: "Вы не бумажки писать, - намекают, - вы программировать учите!" Что ж, "Истина и Вера в истину - два почти противоположных мира интересов", - заметил Ф. Ницше.

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

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

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

Очевидно, что умение мыслить, как ядро способностей человека разумного, и умение излагать (человек социальный) и фиксировать мысль (человек современный) не могут оказаться в зависимости от применения/неприменения какого-то конкретного подхода, конкретной методики. Так, общеобразовательный курс информатики, читаемый для "не-информатиков" в Дортмундском университете, вообще не опирается на понятие алгоритма (он опирается на понятие объекта, а в качестве объектов рассматриваются программист, экран, программа…)! Но ведь и задача унификации мышления не ставится. "Средства, которые мы применяем, оказывают глубокое (и тонкое) влияние на наши способы мышления и, следовательно, на нашу способность мыслить", - подмечено Э. Дийкстрой. Значит, разнообразие применяемых средств гарантирует наличие разных мыслей, конкуренцию идей, развитие.

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

Давайте играть, учиться программировать, а научившись, - программировать и отлаживать себя и свое будущее. Давайте выигрывать! Перефразируя завещанное предками: "Программирование уж затем учить следует, что оно ум в порядок приводит".


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

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.