С какого языка изучать программирование?

Беседовал недавно со школьником на тему: какой язык программирования он собирается изучать. Буду, говорит, изучать PHP или С++. Спрашиваю: а кто тебе посоветовал именно их изучать? – Да кто-то из друзей...

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

Тем более, что советовал, скорее всего, такой же «грамотей», как и тот, с которым беседовал я.

Так что смысл в такой статье есть. Привожу краткие характеристики тех языков, которые я преподавал в течение ряда лет.

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

PASCAL – требует определенного математического мышления, но вполне подходит для начального изучения. В настоящее время имеется достаточно много литературы, доступной для школьников. Олимпиадное программирование обычно происходит на нем. Это язык, на котором я веду преподавание.

Си – язык профессионального программирования. Для начального изучения не рекомендуется. Его можно изучать после основательного знакомства с Паскалем. Но нужен он лишь для уровня международных олимпиад, ну может иметь преимущества для некоторых классов задач на уровне российских. С литературой по нему, доступной для школьников, я не знаком.

Delphi – в консольном варианте это Паскаль, может использоваться на олимпиадах. В объектно-ориентированном варианте не используется на олимпиадах. Для начального обучения не рекомендуется, также как и остальные ООП языки программирования. Я провожу пару занятий по Delphi в конце курса, но исключительно для того, чтобы у моих учеников не было комплекса неполноценности при общении с «распальцованными» выскочками.

Ассемблер – на самом деле, правильнее говорить ассемблеры, т.к. для каждого типа процессоров ассемблер свой. Для начального изучения категорически не рекомендуется. Его как первый язык может освоить только электронщик, детально знакомый с работой цифровой техники. В Интернете я встречал предложения начинать с ассемблера, но это не более чем стёб.

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

Вывод: начинать изучение надо с TurboBASIC или TurboPASCAL. Подчеркиваю, что с турбо-вариантов. Изучение начинать после знакомства с алгеброй. Как вариант допустимо изучение программирования до знакомства с алгеброй, но тогда на примере языка программирования BASIC вводить алгебраические понятия. Но это в том случае, если идет индивидуальное обучение.

Моя практика показывает, что раннее обучение, как правило, неэффективно. Правда, встречаются дети с исключительной (высокой) мотивировкой, для которых общие рекомендации не работают. Но это очень редко. Если у ребенка есть явновыраженные математические способности, то можно начинать с PASCALя, если нет, то лучше начинать с BASICа. Если есть желание познакомиться с пользовательским аспектом (без серьезного вникания в синтаксис), то можно знакомиться с EXEL (без макросов).

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

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