Как стать хорошим программистом?

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

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

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

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

Для начала проведем некоторое разделение: есть пользовательский уровень использования уже готовых программ – компьютерная грамотность и собственно программирование – создание новых программ.

Компьютерная грамотность, при нынешней распространенности вычислительной техники, необходима практически всем нормальным людям. Обучать ей необходимо всех школьников. Кстати, при обучении компьютерной грамотности мне удавалось обучить практически всех. Этот предмет именуется информатика и в школах нормально преподается по принципу: «А это, деточки, подчеркнутый шрифт, и, чтобы его получить, надо нажать вот на эту кнопочку». Для изучения информатики достаточно иметь средний интеллект и среднюю память.

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

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

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

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

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

С какого класса надо учить программировать?В основном, с 8 класса. Попытки учить семиклассников в моем случае не увенчались заметным успехом. Правда, сразу оговорюсь, отдельные школьники, занимавшиеся математикой или имеющие большой интерес к программированию, занимались у меня с 7 класса и достигли больших успехов (являются призерами уровня российской олимпиады).

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

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

Сколько времени требуется на изучение программирования?В зависимости от той цели, которую мы себе ставим. Элементарные навыки постигаются за год. Повышенный уровень – за два года, после чего следует продолжить обучение в ЛКШ (Летняя Компьютерная Школа). Лично я считаю своей задачей подготовить школьников к обучению в ЛКШ. С теми, кто отучился там в группе С, я программирование больше не изучаю, а даю им элементы дискретной математики, после чего они уже доучиваются в старших группах ЛКШ.

Те сроки, которые я указываю, относятся к обучению в небольших группах. Если же брать обычные классы (даже математические), то эти сроки следует умножить примерно на два. Отсюда получается: если начать изучение программирования в 9 классе, то за два года можно изучить начальный уровень, а 11 класс мы выбрасываем на ЕГЭ, тут уж не до программирования.

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