В школе изучал BASIC, в институте - Pascal, а на работе требовался Java. Знакомая ситуация? В курсе информатики, как правило, существует раздел, в рамках которого учащиеся пытаются изучить основы программирования с использованием учебного языка программирования. При этом возникает немало вопросов, включая и выбор наиболее подходящего для этого языка программирования.
К учебным языкам программирования предъявляется ряд требований, которые красиво выглядят на бумаге, но на практике зачастую противоречат друг другу. Понятно, что такой язык программирования должен быть синтаксически простым, распространённым и востребованным на практике без необходимости переучивания. Но можно ли это реализовать в рамках школьного курса информатики?
Существуют разные методики оценки популярности и востребованности языков программирования - по количеству запросов в поисковых системах, количеству вакансий, проектов в репозиториях, результатам опросов и др. Для объективной оценки необходимо учитывать много критериев и факторов, но определённую взаимосвязь можно уловить и в результатах пары международных опросов.
Популярные языки программирования в реальных проектах в 2018 году.
Популярность языков программирования среди профессиональных разработчиков в 2018 году
А почему пропущен Basic и Pascal? Потому что их нет! Можно, конечно, взглянуть на результаты TIOBE Index for August 2018, где Visual Basic .NET занимает аж пятое место, но он имеет достаточно узкую область использования и по факту выходит так, что в школе "проходят" основы языков программирования, которые не востребованы на практике и после "изучения" этих языков придётся учить что-то другое, если в планах стоит выбор пути IT-специалиста. За один год в IT происходит немало всего, а BASIC и Pascal как считались наиболее подходящими языками для обучения в конце прошлого века, так и считаются по сей день. Уже и web-технологии давно вошли в нашу жизнь, и мобильные приложения отвоевали рынок у настольных приложений, а "сладкая парочка" прекрасно себя чувствует в современном учебном процессе. Есть ли альтернативы?
Java и семейство языков C имеет неплохие позиции, но назвать их учебными языками программирования затруднительно. Python является относительно несложным языком программирования, но выбрать его может только тот, кто смотрит на показанную выше статистику с закрытымы глазами. Если же глаза открыть, то сразу станет виден лидер - JavaScript. Если вы не согласны с этим, то попробуйте при помощи языка, который вы считаете наиболее подходящим для изучения в школе, написать код вывода диалога с приветствием в следующих операционных системах - Windows, Mac OS, Linux, Android, iOS. Засекаем время. У меня на это ушло 10 секунд:
<script>
alert("Привет мир!");
</script>
К существенным недостаткам данного языка программирования можно отнести излишнюю вседозволенность и возможность создания различных "программистских трюков". А где их нет, в Python, C#, Java? Да, JavaScript не так строг, как компилируемые языки и даже Python, но у него есть огромное преимущество - простота, доступность и просто огромная область применения, которая даёт возможность школьникам познакомиться и с web, и с мобильной, и с настольной разработкой в самых разных областях. Многие ли захотят заниматься в школьной музыкальной студии, в которой учащихся заставляют играть только классику, только рок-н-ролл или только блюз? JavaScript даёт свободу выбора. Робототехника, графика, музыка, игры, статистика - это лишь небольшой перечень областей, где JavaScript используется совместно с другими технологиями. А как быть с начальной школой? В начальной школе предпочтение отдаётся визуальному программированию, в основе которого также нередко лежит JavaScript, что позволяет создать последовательное изучение этого простого и востребованного языка программирования.
Когда на экране происходит движение картинки в соответствии с запрограммированными визуальными блоками, то это более понятно и наглядно по сравнению с текстовым программированием, где сначала нужно разобраться с синтаксисом языка, затем написать код и отправить его на выполнение для просмотра результатов его работы. Однако, движение картинки по экрану осуществляется в рамках виртуального мира. Ребенок может установить связь между блоком желтого цвета и движением картинки, но сможет ли он подобные связи обнаружить в других программах или реальном мире?
Информатика (и введение в программирование) в рамках школьного курса является тереотизированным предметом с акцентом в сторону математики. Информатика действительно тесно связана с математикой, но это не позволяет увидеть практическое применение знаний. Найдите наибольшее число из заданных, вычислите выражение, посчитайте матрицу - эти задачи подходят для общего развития, но как они связаны с реальным миром мобильных технологий и Интернета? Кружки робототехники позволяют увидеть связь программирования и физики, но этого недостаточно. Тогда что, в рамках информатики учить детей создавать сайты и мобильные приложения? Нет, в рамках информатики это сделать затруднительно, но показать её связь с реальным миром возможно. Цветной блок условного оператора или цикла большинству будет так же непонятен, как и его запись в текстовом виде, потому что это теория, показанная разными способами. А теорию сложно увидеть и ощутить. Внутренние процессы работы выключателя света или секундомера также непонятны, но пользователи понимают результат их работы. Так почему бы это не связать с условным оператором и циклом для наглядной демонстрации того, что программирование позволяет решать практические задачи, а не только учебно-теоретические?
Программирование интересно не всем, но у школьников должна быть возможность познакомиться с практическими основами программирования, что можно было бы осуществить в рамках дополнительного образования. Какой язык программирования для этого выбрать? Это некорректный вопрос! К сожалению, у нас принято рассматривать IT и процесс обучения в общем виде, с конца и в абсолютных категориях. Java и C++ - это круто, а Basic и Pascal - пустая трата времени. Перед выбором языка нужно понять цели обучения и задачи, а не наоборот. Для решения многих задач вполне подойдёт и визуальное программирование, которое имеет такое же право на существование как и текстовое. Предположим, поставлена задача создать дизайн упаковки. Если пользователь умеет рисовать на компьютере, то он может всё нарисовать. Если пользователь не умеет рисовать, то он может выбрать несколько клипартов и составить из них композицию, что подобно соединению блоков для получения требуемого алгоритма.
Визуальное программирование и текстовое имеет тесную связь, но важно обеспечить неразрывность этого процесса. Кто-то может сказать, что учащимся для общего развития желательно изучать разные языки. Но согласитесь, что КуМир + Pascal + Lazarus выглядит менее предпочтительным и перспективным по сравнению с Blockly + JavaScript + стек технологий. В чистом виде область применения JavaScript уступает целому ряду других языков, но его мощь как раз и заключается в совместном использовании. JavaScript позволяет получить эффект быстрого старта или кто-то готов упереться в сложный язык, а через несколько месяцев забыть программирование как страшный сон, как это нередко происходит с занятиями музыкой?
Я не настаиваю исключительно на изучении JavaScript, потому что задача дополнительного образования состоит не в изучении того или иного языка программирования, а предоставление возможности изучать основы программирования под руководством наставника.