Учебный язык программирования

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Уче́бный язык программи́рования — язык программирования, предназначенный для обучения. В качестве таковых разрабатывались такие языки как BASIC[1] и Паскаль[2]. Из разработанного для обучения языка ABC вырос Python[3]. Популярным языком, разработанным специально для образования является LOGO[4]. Специально для российских школ разработана языковая среда КуМир[5]. Набирает популярность созданный в Массачусетском технологическом институте язык визуального программирования Scratch и тому подобные среды программирования[6].

Требования к учебному языку программирования[править | править исходный текст]

Учебный язык должен обеспечивать простоту, ясность и удобочитаемость конструкций. Излишняя гибкость, «вседозволенность» синтаксиса может затруднить понимание программ. Не слишком хорошо подходят для обучения языки, поощряющие к использованию различных «программистских трюков»[7]. С этим связаны преимущества использования в образовательном процессе языков семейства Pascal перед Си-подобными языками.[8][9]

При выборе языка программирования не играют роль такие факторы, как его новизна, эффективность реализации (в виде компилятора или интерпретатора). Фактор распространённости имеет как психологическое значение (влияя на мотивацию учащихся), так и практическое (востребованность получаемых знаний без необходимости переучивания)[10].

Учебный язык программирования должен обеспечивать плавный переход от псевдокода к собственно программированию. Полезным в обучении может быть возможность использования национальной лексики для ключевых слов и идентификаторов[8].

Альтернативой относительно трудоёмким для изучения комплексным языкам программирования общего назначения могут составить простые миниязыки, в которых, для наглядности, имеется графический исполнитель, вроде черепашки в Лого — первом и одном из самых известных таких языков.[11]

Бейсик[править | править исходный текст]

BASIC, англ. Beginner’s All-purpose Symbolic Instruction Code — стал в начале 60-х первым, получившем распространение языком программирования для обучения начинающих. Однако он получил резкую критику за несоответствие принципам структурного программирования и лёгкость создания спагетти-кода. Известно высказывание Эдсгера Дейкстры — «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации». Под влиянием этой критики создатели Бейсика Джон Кемени и Томас Курц в 1975 расширили язык структурными средствами и отказались от практики использования GOTO. В 80-х годах они создали обновлённый вариант языка, названный True BASIC (англ.)русск.[12]. Современные распространённые диалекты Бейсика (QBasic, Visual Basic) отличаются от этого варианта и имеют microsoftовское происхождение, однако и они имеют мало общего с прародителем, являясь вполне современными структурными языками программирования[13]. Специально для целей обучения созданы следующие диалекты Бейсика.

В школьное образование также внедряется «Visual Basic для Linux» Gambas[18], Доступна бесплатная образовательная экспресс-версия Visual Basic .NET[19].

Языки декларативного программирования[править | править исходный текст]

Язык Logo, появившийся на свет между Бейсиком и Паскалем, стал первым языком программирования, изначально предназначенным для обучения детей можно рассматривать как диалект лиспа — языка, с которого началось функциональное программирование[20]. Хотя этот язык более известен своей черепашьей графикой, первым из графических исполнителей, но такие черты лиспа управление последовательностью действий через рекурсию и работа со списками, как основной структурой данных так же остаются свойствами этого (мультипарадигмального по своей сути) языка.

Хотя Пролог — язык, с которого началось логическое программирование, редко рассматривают как язык начального обучения, он легко осваивается теми, кто только начинает изучать программирование. Этому способствует его ориентированность на человеческое мышление, простой, единообразный синтаксис и отсутствие таких конструкций, как ветвления или циклы[21]. Простота изучения была одной из целей дизайна языка, хотя этот язык остаётся недопонятым. Одна из причин малой распространённости Пролога в начальном обучении — отсутствие в нём удобных средств работы с интерактивной графикой, которая не слишком гладко вписывается в чистое декларативное программирование[22].

Современный «академический» диалект лиспа — язык Scheme был изначально ориентирован на образование[23]. Он используется в таком знаменитом курсе компьютерного программирования, как «Структура и интерпретация компьютерных программ». Публикация этой книги не только сделала Scheme популярным языком в университетской среде, но и изменила сам подход к изучению программированию[24]. Этот язык используется также в целом ряде учебников, таких как «How to Design Programs (англ.)русск.»[25], «Programming Languages: Application and Interpretation (англ.)русск.»[26], «Essentials of Programming Languages (англ.)русск.»[27] и др. Обучению программированию с нуля, с использованием Scheme посвящена и книга Даниэля Фридмана (англ.)русск. «The Little Schemer»[28] впервые изданная под названием «The Little Lisper» в 1974 году и ставшая началом своего рода трилогии. Первая книга посвящённая языку Racket, прямому потомку Scheme, «Realm of Racket»[29], также представляет собой учебник для детей. Впрочем, эта книга представляет собой переработанный вариант учебника «Land of Lisp»[30], основанного на Common Lisp.

Серьёзным конкурентом различным вариантам лиспа в университетских курсах функционального программирования стал язык Haskell. Авторы этого языка предназначили его в равной мере для обучения, научных исследоваий и практических приложений[31]. Его отличает то, что он представляет собой чисто функциональный язык программирования, реализующий типизированное лямбда-исчисление, его синтаксис приближён к традиционной математической нотации[32][33].

В 1991 году профессор Лувенского католического университета в Бельгии Герт Смолка начал разработку мультипарадигмального языка Oz. Язык позволяет писать программы в стиле любой из основных распространённых парадигм программирования: как декларативных, таких как логическое и функциональное программирование, так и императивных. Этот язык используется как основа для обучающего курса «Concepts, Techniques, and Models of Computer Programming (англ.)русск.»[34].

Паскаль[править | править исходный текст]

Разработанный в качестве развития линии Algol-60 Никлаусом Виртом язык программирования Паскаль автор с самого начала использовал для вводного курса программирования для студентов[2]. Этот язык быстро начал набирать популярность в таком качестве.

Turbo Pascal, Delphi и Free Pascal широко использовался и продолжает использоваться для обучения студентов и школьников. Зародившийся в 2002 году на физфаке МГУ международный научно-образовательный проект «Информатика-21»[35] поставил своей целью внедрение в российское образование системы программирования BlackBox Component Builder[36], реализации компонентного паскаля, диалекта Oberon-2 — объектно-ориентированного языка паскаль-семейства разработанного Виртом. Как и другие языки Никлауса Вирта тот отличается (в том числе от Объктного Паскаля в стиле Borland) минимализмом.

Языки разработанные для российской школы[править | править исходный текст]

Для преподавания элементов программирования в рамках курсов информатики было разработан ряд учебных языков программирования с русскими ключевыми словами[37]. В группе академика А. П. Ершова был выработан подход с изучением двух языков программирования — более простого, предназначенного в основном для управления графическим исполнителем, и более продвинутого универсального. В качестве такой пары были разработаны языки Робик и Рапира.[13] Основными российскими образовательными языками являются:

Для начального обучения программированию могут также использоваться простые языки управления графическими исполнителями, такими как Кукарача в системе Роботландия или Кенгурёнок Ру[13].

Другие[править | править исходный текст]

Примечания[править | править исходный текст]

  1. Андрей Колесов. Basic — этапы большого пути Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале «Наука и жизнь» № 10/2000, с. 18—20.
  2. 1 2 Wirth N. Recollections about the development of Pascal (HOPL II), 3.3
  3. The Making of Python, A Conversation with Guido van Rossum, Part I. by Bill Venners, January 13, 2003
  4. Язык Лого на сайте «История компьютера»
  5. Система программирования КуМир → Учебники
  6. Александр Казанцев Школа. Исполнители и алгоритмы // Linux Format. — январь 2010 г.. — № 126-127 (1).
  7. Psychology, 1990, 1. Introduction, pp. 176
  8. 1 2 С. С. Кобилов Образовательная информатика: подход к обучению, выбор учебных языков и создание программных систем. — Самаркандский государственный университет.
  9. Эссе «Язык Си и начальное обучение программированию», А. В. Столяров
  10. Выбор языка для обучения программированию, Лобачев Александр Александрович, Куликова Ольга Валентиновна, ИТО-2008
  11. Mini-languages: a way to learn programming principles
  12. Дейкстра Эдсгер на сайте «История комьютера»
  13. 1 2 3 Леонов А.Г., Первин Ю.А. Роль и место темы «Элементы программирования» в общем школьном информатическом образовании. // Компьютерные инструменты в образовании. Информатизация образования. — СПб.: ЦПО, 1999. — № 5. — С. 14-23.
  14. Джеймс М. Рено Хотите научиться программировать? = So You Want To Learn to Programm? / пер. с англ. С. Ирюпин, В. Чёрный. — М.: Альт Линукс, 2011. — 320 с. — ISBN 978-5-905167-06-5
  15. В нём, к примеру, отсутствуют процедуры и функции. Другой, подобный современный диалект — Basic4GL (англ.)русск.
  16. Brin, David (Sept 14, 2006). «Why Johnny can't code». Salon Magazine. Проверено 4/12/09.
  17. Small Basic для начинающих
  18. Использование свободного программного обеспечения в образовании, Самарина А. Е., Смоленский государственный университет
  19. Visual Basic Express Edition
  20. Сеймур Пейперт. История компьютера. Проверено 25 марта 2014.
  21. Шрайнер П.А. Лекция 1: Введение в язык логического программирования Пролог // Основы программирования на языке Пролог. — ИНТУИТ. — ISBN 978-5-9556-0034-5
  22. Psychology, 1990, 3. The Misconception Problem: Prolog, pp. 186-190
  23. Gerald Jay Sussman and Guy Lewis Steele, Jr.. «Scheme: An Interpreter for Extended Lambda Calculus». MIT AI Lab. AI Lab Memo AIM-349. December 1975. [1], from Lambda Papers (англ.)русск.
  24. Matthias Felleisen (англ.)русск., Robert Bruce Findler (англ.)русск., Matthew Flatt (англ.)русск., Shriram Krishnamurthi (2004). «The Structure and Interpretation of the Computer Science Curriculum». Journal of Functional Programming 14: 365. DOI:10.1017/S0956796804005076.
  25. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi How to Design Programs. — MIT Press, 2001. — 723 p. — ISBN 9780262062183
  26. Shriram Krishnamurthi Programming Languages: Application and Interpretation.
  27. Daniel P. Friedman and Mitchell Wand Essentials of Programming Languages. — Third Edition. — MIT Press, 2008. — 432 p. — ISBN 9780262062794
  28. Daniel P. Friedman, Matthias Felleisen The Little Schemer. — MIT Press, 1996. — ISBN 978-0-262-56099-3
  29. Matthias Felleisen, David Van Horn, Conrad Barski, M.D., and Eight Students of Northeastern University Realm of Racket: Learn to Program, One Game at a Time!. — No Starch Press, 2013. — ISBN 978-1-59327-491-7
  30. Conrad Barski, M.D. Land of Lisp: Learn to Program in Lisp, One Game at a Time!. — No Starch Press, October 2010. — 504 p. — ISBN 978-1-59327-281-4
  31. Jones, Simon Peyton Preface. The Haskell 98 report. Haskell 98 working group (2002). Проверено 4 апреля 2009.
  32. Wadler, Philip (1987). «Why calculating is better than scheming». ACM SIGPLAN Notices: 83–94. ISSN:0362-1340.
  33. Bird Richard Introduction to Functional Programming using Haskell (2nd Edition). — Prentice Hall, 1998. — P. 66. — ISBN 0-13-484346-0
  34. Peter Van Roy, Seif Haridi Concepts, Techniques, and Models of Computer Programming. — MIT Press, March 2004. — ISBN 0-262-22069-5
  35. Международный научно-образовательный проект Информатика-21
  36. Ф. В. Ткачев Обучение программированию: российская перспектива // Modular Programming Languages. Lecture Notes in Computer Science 2789. — Springer-Verlag, 2003. — С. 69-77.
  37. Л. В. Городняя Школьная информатика // Александр Гурьевич Марчук Андрей Петрович Ершов — ученый и человек. — Новосибирск: Издательство СО РАН, 2006. — ISBN 978-5-7692-0819-5.

Литература[править | править исходный текст]

  • Patrick Mendelson, T. R. G. Green and Paul Brna Ch. 2.5. Programming Languages in Education: The Search for an Easy Start // Psychology of Programming / M. Hoc, T.R.G. Green, R. Samurçay and D.J. Gilmore (eds.). — Academic Press, 1990. — P. 175-200. — ISBN 0-12-350772-3

Ссылки[править | править исходный текст]