Конечной целью образования должно быть искусство конструктивного мышления.
Ученик – это не сосуд, который надо наполнить, а факел, который надо зажечь.
«Не верю!» — отмахнулся бы я, если б не видел это своими глазами. Меня можно понять, как и тех, кто, барахтаясь в мутных волнах 90-х, не помышлял о дальних планах. Но оптимисты неистребимы! Они устроили тогда в нашем городе конкурс юных программистов — KidSoft. Зрители тех состязаний терялись в догадках: где «желторотики» нахватались компьютерных премудростей? Сотворенных ими программ не постыдились бы и профессионалы! А ведь найти приличный компьютер тогда было не проще, чем хороший учебник программирования. «Что же будет лет эдак через 10-15, — спрашивал я себя, — когда компьютер войдет в каждый дом?». И мнились мне колонны юных гениев, бодро шагающие на свой конкурс.
Через годы судьба вновь свела меня с «компьютерной» молодежью. Наблюдая участников олимпиад, я невольно поверял свой прогноз. Во многом он оправдался: компьютер стал предметом быта, книжные полки ломятся от компьютерной литературы, а информатикой пичкают едва ли не с детского сада. Но где колонны юных гениев? Я их не вижу! Да, конечно, «кое-кто, кое-где у нас порой…». И все же мне видится, что интерес молодежи к программированию несколько увял. Логика, ау! Где ты? Привыкнув следовать твоим законам, я поклялся раскрыть эту тайну.
Интернет и другие источники привели меня к парадоксальному выводу: интерес подростков к программированию угасал с развитием компьютерных технологий! Судите сами: чем мог заняться способный мальчишка в компании с каким-нибудь примитивным «синклером» начала 90-х? Наскучив двумя или тремя простенькими игрушками, он, в конце концов, брался за программирование и лепил ещё одну. А сейчас? Об «игрунах» молчу, поскольку даже творческий человек найдет в компьютере уйму интересного!
А школа, чему она учит? Поспешая за техническим прогрессом, школа пытается втиснуть в детскую голову едва ли не все достижения информационных технологий. Сомневаясь в разумности этой попытки, согласен все же с тем, что компьютерная грамотность стала ныне грамотностью номер два. Но теперь она не связана с программированием: в массе востребованы офисные приложения, электронная почта, Интернет.
Спорить с этим трудно, и я бы не стал. Но как быть юным программистам? Или эта профессия отмирает, и технологии будут развивать без них? Смешной вопрос, но иным не до смеха. Ведь в школе с программистами заниматься некому и некогда, – эстафету передали в ВУЗ. А там, на профильных факультетах, давно уже бьют в набат: познания новобранцев в программировании ничтожны, и обучать их приходится с азов.
Что в сухом остатке моих изысканий? Нужны ли нам хорошие программисты? – разумеется. Есть желающие ими стать? – конечно! Но нет школы, которая их научит. Так пусть вундеркинды учатся сами, почему нет? Вот компьютер, вот полка с учебниками, – полный вперед! Так ли это? Присев на корточки, я вошёл в положение юного нахала, дерзнувшего двинуться этой тропой.
Итак, я стал мальчишкой лет двенадцати. В доме есть компьютер, за который изредка садятся и родители. Но, главным образом, – это мой инструмент. Мне многое по плечу: скопировать файлы или напечатать что-то? – запросто! Признаюсь, однако, что игрушки надоели, и хочется освоить программирование. Увы! Родители в этом не разбираются, программистов среди друзей нет, а учителю информатики возиться со мной недосуг. Ладно, попробую сам. Раздобыв пару книжек и ободрившись примером Ломоносова, отважно берусь за дело.
Прикусив от старания язык, я терпеливо «сверлю» страницу за страницей. Вот алфавит языка, идентификаторы, константы, выражения… Кое-что понятно, но… Мамочка! когда же я напишу хоть простенькую программку? Открыв другую книгу, нахожу то же самое – подробное описание языка программирования, или так называемую «теорию». Убойная доза теории свалит с копыт даже крепкую казачью лошадь, – так устоит ли мой нежный организм? Энтузиазм вянет. «Нет, – думаю, – новый Ломоносов подождет, может, в школе когда-нибудь научат». Что будет в школе, вы уже знаете.
Так может, мальчишке попались плохие книги? Не думаю, хорошие учебники встречаются, некоторые написаны основательно. «И все же, все же, все же…». Все же книги эти адресованы другому читателю; по сути это технические руководства, рассчитанные на закаленных, зрелых бойцов. Как же обучать юнцов?
Тогда я мысленно приложил типовой учебник программиста к преподаванию грамоты в первом классе. По замыслу такого учебника, прежде, чем нацарапать «мама мыла раму», первоклашка обязан не только выучить все буквы, но и познать премудрости орфографии, синтаксиса, склонения, спряжения и так далее. Абсурд, не так ли? Ведь я отлично помню, что слово «мама» я вывел, постигнув лишь две буквы. Полагаю, что русский язык не проще языка программирования. И если для первого удалось создать азбуку – чудную вещь! – то нельзя ли чем-то подобным снабдить начинающих программистов? Явилась мысль сделать обратную проекцию и создать «букварь» для программиста. На мой взгляд, такой «букварь» должен строиться на следующих принципах.
Постепенность. Излагать материал следует мелкими, легко постигаемыми порциями. Высота одолеваемых учеником «ступенек» не должна вызывать ощущения тупика, – маленький успех окрыляет, вселяя уверенность.
Практичность. Программирование – инженерная наука. Теория и практика здесь неразделимы, «пропитывают» друг друга, – ученик не должен ощущать границ между ними. Букварь программиста должен сочетать в себе учебник и хрестоматию. Примеры программ должны быть либо простыми, либо очень простыми (по крайней мере, на первых порах). Необходимо показать полные решения задач с разъяснениями, – «учились бы, на старших глядя».
Поправка на возраст. Сюжеты задач в букваре должны учитывать психологию подростка, а он склонен учиться играючи. Хорошо, если примеры похожи на настоящие «взрослые» проекты (разумеется, упрощенные). Непоседу не увлечешь задачей в роде «посчитать по формуле такой то» или «найти сумму элементов массива». А вот полицейская база данных или экзаменующая программа – это серьезно! Разжечь аппетит юного инженера – едва ли не главная цель обучения.
Маловажное – за борт! От изложения некоторых второстепенных деталей языка лучше воздержаться. Например, можно «забыть» о записях с вариантами и не вспоминать о типизированных файлах. Не отвлекая внимания на эти детали, сосредоточиться на главном. Усвоив это главное, ученик доберёт остальное из «взрослых» учебников.
Вот, пожалуй, и все. В идеале такой букварь будет и самоучителем для подростка, и конспектом для преподавателя компьютерного кружка.
Итак, цель поставлена, но достигнута ли? – судить читателям. Вкратце содержание книги таково.
В главах с 1-й по 4-ю после краткой обзорной информации даны практические рекомендации для подготовки рабочего места. Далее все подносимые порции теории немедленно воплощаются на практике.
В главах с 5-й по 31-ю рассматриваются простые типы данных и базовые алгоритмические структуры. Здесь же рассказано о текстовых файлах и даются основные сведения об организации среды программирования.
В главах с 32 по 35 подводится теоретическая черта под пройденным материалом и закладывается фундамент для перехода к сложным типам данных.
Главы с 36 по 58 повествуют о сложных типах данных и связанных с ними алгоритмах. Здесь рассмотрены множества, массивы, записи и динамические структуры.
В главах 59 и 60 раскрыт секрет разработки многофайловых проектов, а глава 61 знакомит с принципами объектно-ориентированного программирования.
Последняя 62-я глава – это попытка заглянуть в будущее и указать читателю дальнейшие цели и пути их достижения.
Полагая, что книга будет, на какое-то время, единственной помощницей новичка, автор счел нелишним включить несколько справочных приложений.
Итак, отойдя от общепринятого порядка изложения теории, я стремился вовлечь читателя в активное осмысление конструкций языка, приглашая его к соавторству с Никлаусом Виртом. «Почему в языке сделано именно так, а не иначе?» – этот вопрос то и дело встает перед учащимся. Решая задачи, он видит, что элементы языка не с потолка свалились, а придуманы для решения типовых проблем. Отсюда следует порядок изложения: 1) проблема, 2) размышление, 3) решение. Сначала ставится задача. Затем обсуждается, как её решить уже известными средствами языка, или почему её нельзя решить этими средствами. После этого даётся надлежащая порция теории, и приводится решение либо с новым применением уже известных конструкций языка, либо с привлечением новой конструкции. Напоследок подводится теоретический итог очередной главы. Так теория с практикой следуют рука об руку.
Несладко быть в шкуре новичка: там и сям натыкаешься на проблемы! Автор снабдил почти все решения полными листингами работающих программ с подробными пояснениями. Кому то они покажутся избыточными, назойливыми. Но согласится ли с этим паренек, корпящий над книгой где-нибудь в глухом поселке? Ведь для него, одинокого бойца, любая «непонятка» порой вырастает в неодолимую преграду!
Я признателен всем, кто высказался о «Песнях» на форумах и в личной переписке, — мы работали над книгой вместе! Особо благодарю форум freepascal.ru и моих читателей Артёма Проскурнёва и Владислава Джавадова, подаривших мне массу полезных советов.
Книга в форматах FB2 и HTML появилась трудами моих добровольных помощников. Один из них – Олег Авилов – подтолкнул нас к этой работе, а также сотворил новую обложку. Но основной вклад внёс пожелавший остаться неизвестным житель таёжного посёлка, затерянного в магаданских просторах! Скрипты уважаемого «navd» – так он назвал себя – сотворили чудеса!
Пишите, мой адрес все тот же: oleg.derevenets@gmail.com
Свежую редакцию книги и сопутствующие файлы можно скачать здесь:
http://oleg.derevenets.com