Языки программирования в школе: различия между версиями
Содержимое удалено Содержимое добавлено
Oleg4280 (обсуждение | вклад) |
Oleg4280 (обсуждение | вклад) викификация |
||
Строка 1:
: <small>Исходный вариант статьи (А.
Уроки по информатике в школе и вузе: какой язык программирования выбрать? Насколько глубоко его изучать и нужно ли вообще в школе изучать языки программирования? Есть мнение, что учащихся нужно знакомить с различными языками и различными стилями программирования. Видимо, наиболее подходящими учебными языками программирования сегодня являются [[w:Forth|Форт]], [[w:Ruby|Ruby]], [[w:Python|Python]], [[w:Си (язык программирования)|Си]], [[w:Паскаль (язык программирования)|Паскаль]] и [[w:Java|Java]].
Строка 11:
== Бейсик и Паскаль ==
Когда-то наиболее популярными языками программирования в школах мира были [[w:Бейсик|Бейсик]] и [[w:Паскаль (язык программирования)|Паскаль]]. Бейсик всегда считался самым простым языком программирования, а Паскаль
<blockquote>«Уж лучше Паскаль, чем Бейсик. И лучше [[w:Java|Java]], а не Паскаль: в Java
Но есть и другие мнения:
<blockquote>«Первый язык программирования должен быть требовательным к ученику. Необходимо, чтобы ученик имел чёткое представление о том, что его программа делает на каждом шаге, и уметь записывать алгоритмы на строгом формальном языке, без лишних поблажек, которые имеются, например, в языке [[w:Перл|Перл]], где можно писать круглые скобки вокруг аргументов функций, а можно не писать, и делать другие подобные вещи. Первый язык должен быть cтрого типизированным, ибо смешение целых чисел, вещественных чисел и текстовых переменных приводит у начинающих программистов к неправильному представлению о методах хранения данных в памяти компьютера. Чем больше сообщений об ошибках ученики увидят от компилятора, и чем больше из этих сообщений они поймут, тем больше фундаментальных знаний о программировании они получат. Паскаль
<blockquote>«Язык [[w:Бейсик|Бейсик]], используемый сейчас в большинстве школ, просто вреден как для будущих программистов, так и для обычных школьников. Он не имеет никакой системы отладки{{нет источника}}, не имеет контроля типов и не требует явного объявления переменных. Это приводит к тому, что ученики не могут находить ошибки в своих программах. Ошибки, с которыми они встречаются, обычно неадекватны и создают у учеников отвратное представление о программировании вообще. Бейсик в принципе не пригоден для учебных, и тем более практических целей.»</blockquote>
<blockquote>«[[w:Скрипт|Скриптовые языки]] больше соответствуют потребностям среднего пользователя компьютера. Многие из существующих скриптовых языков имеют достаточно серьёзный идеологический фундамент, замкнутую модель, наглядный естественный синтаксис
<blockquote>«Ныне школьникам приходится работать с морально устаревшими и неудобными системами Borland Pascal и Бейсик. Введение в школах более современных языков программирования автоматически поднимет уровень преподавания информатики, и уровень учителей тоже.»</blockquote>
<blockquote>«Если кто хочет заниматься программированием и идти дальше, желательно начать изучение с Паскаля, прорешивать задачи по циклам, массивам, матрицам и
== Какие есть альтернативы? ==
Строка 30:
Альтернатив много. Ныне есть целый зоопарк (экосистема) языков программирования, которые постоянно эволюционируют, расщепляются и сливаются. Это уже упомянутые выше языки [[w:Forth|Форт]], [[w:Ruby|Ruby]] и [[w:Python|Python]]. Дерево эволюции видов языков программирования можно найти в Сети [http://merd.sourceforge.net/pixel/language-study/diagram.html] [http://www.levenez.com/lang]. Перечислим ключевые факторы, управляющие отбором:
* Предоставление языком высокоуровневых средств контроля за целостностью и безошибочностью кодa на первом этапе сборки проектов. Это относится в первую очередь к языкам Java, Haskell, и Python. Языки стараются делать такими, чтобы программист просто не мог допускать ошибок. А если ошибки все-таки делаются, то на этапе компиляции (трансляции) они должны находиться. В частности, опечатка в одном символе не должна приводить к тому, что программа компилится и запускается (а такое бывает, например, в языках Бейсик и Perl, если не указан явно специальный режим ''strict''. Язык Java создавался в контексте анализа типичных ошибок и проблем, возникающих в проектах на языке Си++. Создатели Java постарались внести в синтаксис и базовую парадигму такие ограничения, чтобы типичные ошибки программистов на [[w:C++|Си++]] просто не могли появиться в проектах на Java. Это очень важная идея: если умело заключить себя в рамки, можно получить выгоду. Следует отметить, что в крупных корпорациях часто программистам выдаётся список правил оформления программ и набор конструкций, которые нельзя использовать в коде, несмотря на то, что сам язык их допускает. Излишняя гибкость языка иногда вредна, так как позволяет программистам писать мутные и запутанные программы. Новые языки программирования делают так, чтобы не искушать программистов и не давать им возможности писать запутано и с ошибками.
* Чистота и ясность кода, читаемость кода. Далее всего здесь продвинулся, видимо, Руби. Сегодня на всех официальных сайтах программных средств среди первых достоинств указывается
* Чистота и целостность парадигмы, заложенной в основу языка. Например, языки Smalltalk и Ruby базируются на чистой объектно-ориентированной парадигме, а Haskell
* Простота синтаксиса, прозрачность интерпретации языковых конструкций. Например, синтаксис языка Python настолько прост, что его описание помещается на одну страницу. Это позволяет программисту всегда понимать то, что он написал. Простота синтаксиса, которая с одной стороны является ограничением, может быть очень полезной, так как позволяет писать ясные, читаемые программы и не думать о том, как же именно компилятор (интерпретатор) оттранслирует ту или иную конструкцию.
* Многогранность и гибкость, возможность писать сложные программы коротко и красиво. Таким свойством обладают сейчас языки Perl, Ruby, Python. Но следует отметить, что такая универсальность языков может иметь и недостатки, так как часто приводит к излишнему усложнению синтаксиса. Например, очень многогранен Perl, он богат различными конструкциями и хитрыми штучками, которые позволяют записывать сложную логику очень коротко (
* Наличие стандартных библиотек и наличие средств интеграции проектов друг с другом и с другими системами и технологиями. Cегодня все уважающие себя языки предоставляют средства для работы с базами данных, для создания графических интерфейсов, для работы с сетевыми протоколами и создания приложений с архитектурой клиент-сервер. Сегодня идёт непрерывное соревнование между скриптовыми языками программирования типа PHP, Ruby, Python, Perl и др. в том, насколько хорошо развиты в них средства интеграции с различными технологиями. Кто-то умеет работать с OpenGL, а кто-то нет.
* Возможность разрабатывать адаптивные системы. Язык должен быть таким, чтобы программы, написанные на нём, не были косными и неповоротливыми. Язык должен допускать возможность внесения малых изменений в код, чтобы подстроится под динамически меняющуюся и усложняющуюся задачу. Краеугольными камнями адаптивности языковых программных средств являются гибкая многоуровневая модульность (как у языков Java, Ruby, Python, Tcl) простота средств экспорта и импорта функциональности (имеются в виду средства, направленные на то, чтобы проекты могли делится друг с другом классами, объектами и функциями) и средства поддержки рефакторинга
Есть и другие номинации. Язык Python сегодня победитель в номинации
Итак, [[w:Perl|Perl]] многогранен, [[w:Python|Python]] прост, [[w:Python|Python]] красив, [[w:Ruby|Ruby]] тоже молодец, [[w:Java|Java]] и [[w:Си (язык программирования)|Си]] технологичны. Номинаций много и явного победителя нет, так же как и нет одежды, которая одинаково хорошо подходит под летнюю, дождливую или зимнюю погоду. Температура и влажность
А что можно сказать про Паскаль и Бейсик?
# Когда-то я сам программировал на [[w:Visual Basic| Visual Basic]] формочки и диалоги, и мне это даже нравилось. И сейчас многие продолжают это делать. Но в программировании на [[w:Visual Basic| Visual Basic]] очень мало от программирования и ещё меньше фундаментальных основ информатики.
# Borland Pascal нужно просто отправить на пенсию
# Статистика показывает, что победители школьных и студенческих олимпиад по программированию пишут в основном на Паскаль. Но следует отметить, что Паскаль активно теснят языки [[w:Java|Java]], [[w:C_Sharp|C#]] и [[w:Haskell|Haskell]]. В частности, на последней олимпиаде на международном соревновании по функциональному программированию два победителя писали на [[w:Haskell|Haskell]] (http://www.haskell.org, http://www.cs.luc.edu/icfp). А на международном соревновании [http://imagine.thespoke.net ImagineCup] победитель использовал язык [[w:C_Sharp|C#]].
# Паскаль и Бейсик по-своему неплохие языки, только не пригодятся они при решении практических задач. Конечно, на [[w:Delphi|Delphi]] (32-разрядная расширенная версия Паскаль) пишутся промышленные системы, но делается это программистами, которые так и не смогли избавиться от своих школьных привычек.
В индустрии компьютерных технологий возникают самые различные задачи. Для одной задачи удобен один язык, для второй
== В поисках царского пути ==
Давайте вернёмся к нашему вопросу
Бесспорно можно сказать лишь одно: каждый из языков стремится удовлетворить определённому набору требований, жертвуя другими. Так, выбор языка для преподавания определяется в конечном итоге педагогическим методом. Нельзя просто «выучиться программированию», ибо это слишком богатая, необъятная и сложная область. Но можно действовать по принципу отбрасывания бесполезного и изучать то, что содержит больше фундаментальных и полезных идей на единицу технических деталей и сложности усвоения. Интересные эксперименты проводятся в московских школах, в школах Петрозаводска, в физико-математической гимназии
{{Рамка}}
;Высокоуровневый набор: Питон или Руби → Лисп или Хаскелл → Java или C#
;Путь уменьшения абстракции от машины: Питон или Руби → Java → Си → Ассемблер
Пути увеличения абстракции:
:;От ассемблера до самых «человечных» языков: Ассемблер → Си → Питон или Руби
:;Смещённый в сторону высокоуровневости: Си → Си++, Java или C# → Руби, Питон, Лисп или Хаскелл,
:;С математическим уклоном: Си → Java → Хаскелл или Mathematica
;Набор популярных языков разных видов: Паскаль → Си → Лисп или Хаскелл → Си++ или Java.
{{Акмар}}
Здесь правильнее рисовать дерево зависимостей между языками. Не имеет смысл изучать и [[w:Python|Python]], и [[w:Ruby|Ruby]], ибо они похожи. Изучать их оба значит загружать учащихся двойным грузом технических деталей, и при этом одарить лишь одним стилем программирования (стилем мышления при проектировании программ). Также неправильно рассказывать студентам и про [[w:Си (язык программирования)|Си]], и Паскаль. Время, потраченное на один из них будет просто потеряно зря. Но тем не менее, шаг от Паскаль к [[w:Си (язык программирования)|Си]] делали многие программисты, после чего Паскаль успешно ими забывался. Язык [[w:Java|Java]] стоит рассказывать вместо языка [[w:C++|Си++]], так как [[w:Java|Java]] более модульный и имеет явно выраженную объектную парадигму, да и намного проще в изучении. Не имеет смысла учить [[w:Lisp|Lisp]] и [[w:Haskell|Haskell]] одновременно, разве только студентам факультетов и групп, специализированных на функциональном программировании. А школьникам и студентам первого курса достаточно одного из них. Просто полезно получить представление о том, что бывают стили программирования, отличные от императивного. В этом смысле также полезен язык [[w:Prolog|Prolog]]. Очень много педагогов соглашается, что рассказывать про один язык программирования так же нелепо, как учить повара готовить только одно блюдо (правда очень хорошо). Нет необходимости знакомить учащихся со всеми тонкостями и техническими подробностями языка программирования. Необходимые детали он сможет узнать сам, если его научат пользоваться документацией. Гораздо важнее познакомить учащегося с различными парадигмами программирования (чтобы наш повар знал о китайской, о русской кухне, и имел представления о всех этапах подготовки пищи
Важно, чтобы учитель информатики не забывал о главном
Вот примерный список этих задач:
* Сложить два введённых числа.
* Найти максимум из ''n'' введённых чисел (однопроходный алгоритм)
* Найти ''n''-е число Фибоначчи (знакомство с рекурсией).
* Вывести таблицу умножения (цикл в цикле).
* Вывести треугольник Паскаля (попробовать рекурсивный алгоритм с запоминанием и без).
* Найти сумму обратных квадратов натуральных чисел.
* Определить правильность скобочной структуры (
* Сортировка пузырьком и быстрая сортировка. Численные эксперименты по определению времени работы.
* Найти кратчайший путь в лабиринте.
/* По рассматриваемому вопросу полезно ознакомиться с проектом Информатика-21. Уже в 2006 году предлагался переход на язык Оберон/Компонентный Паскаль http://is.ifmo.ru/education/_v2a_public.pdf */
== О программировании ==
Программирование развивает ясность мысли и умение решать новые задачи.
== Дерево эволюции языков программирования ==
Строка 89:
[[Файл:derevo.png]]
== Дальнейшее чтение ==
В Викиучебнике:
* Учебник [[Ruby]]
Строка 105:
* [http://www.books.gigagle.com/manual/turbopascal/ Turbo Pascal]
* [http://pascalabc.net Pascal ABC] — система, специально предназначенная для обучения программированию на языке Паскаль школьников и студентов младших курсов
* [http://kuzya.sourceforge.net/ Kuzya]
Официальные страницы языков:
|