Классификация изучаемых в школе языков программирования. Какие функциональные классификации языков программирования есть? Функциональная классификация языков программирования

27.01.2019

Мнения о том, какой язык лучше преподавать в школе, разнятся: от того, что программирование изучать не нужно, а следует просто поднимать компьютерную грамотность и осваивать офисные программы (как на Западе), до того, что нужно изучать операционные системы и несколько языков программирования различных уровней абстракции и с различными парадигмами. Это крайние случаи, но золотую середину найти непросто. В первую очередь, нам нужно определить цель. Научить школьников логически и алгоритмически мыслить? Познакомить с компьютерами на бытовом уровне, чтобы школьники умели пользоваться интернетом, электронной почтой и текстовыми редакторами? Заложить базовые знания, необходимые для будущих инженеров, математиков, физиков и специалистов по информационным технологиям? А может, нам нужно каждого школьника познакомить с программированием как явлением, чтобы он представлял потенциал компьютерных систем? Много ли школьников станет программистами? Немного. Но синусами и уравнениями Кирхгофа в жизни тоже пользуется не каждый. Безусловно, в науке о программировании есть фундаментальная составляющая, но определить её не просто. Некоторые считают, что не так важно, какой язык программирования взять: на уроках информатики нужно учить не языку программирования, а методам программирования и системному подходу решения задач. Нужно развивать алгоритмическое мышление и на примерах знакомиться с принципами построения современных компьютерных систем.

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

Неужели действительно не так важно, какая среда и какой конкретный язык программирования будет использован для практических занятий? Оказывается, что у каждого преподавателя есть свой список требований к учебному языку программирования. Например: простой, интуитивный синтаксис, наличие высокоуровневых инструментов для обнаружения и недопущения ошибок и для отладки программ, наличие качественной документации с примерами, наличие дружелюбной среды разработки, межплатформенность (наличие версий под различные платформы), … У некоторых преподавателей этот список очень короткий, например: "Только Паскаль" или "Любой, кроме Бейсика!" Попробуем подойти к проблеме конструктивно.

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

Когда-то наиболее популярными языками программирования в школах мира были Бейсик и Паскаль. Бейсик всегда считался самым простым языком программирования, а Паскаль -- самым подходящим языком для обучения программированию. Но теперь это не так. Да, Бейсик прост. Но он создавался во времена, когда человечество не имело никакого опыта создания компьютерных систем, и основан на устаревших и не оправдавших себя принципах. Собственно, никакой фундаментальной целостной идеи в основе Бейсика не лежит. Сегодня есть простые и при этом более наглядные и идейно замкнутые языки программирования, нежели Бейсик. Паскаль удобен в учебных целях; ведь именно для них он и создавался. Студенты быстро учатся решать с его помощью алгоритмические задачки. Но так получается, что изучать Паскаль полезно только для того, чтобы писать программы на Паскалe. А если нужно создать настоящий программный продукт, Паскаль оказывается неудобен. И студентам, знающим только Паскаль, приходится переучиваться, что часто сложнее, нежели изучить правильные языки и технологии с нуля. Часто слышишь от преподавателей школ и вузов, что уж лучше Паскаль, чем Бейсик. И лучше Java, а не Паскаль: в Java есть сборка мусора, а это очень удобно для изучения программирования. А еще лучше какой-нибудь сценарный слабо нетипизированный язык. Там и сборка мусора есть, и в типах путаться не будут, всё будет просто и понятно. Но есть и другие мнения, первый язык программирования должен быть требовательным к ученику. Необходимо, чтобы ученик имел чёткое представление о том, что его программа делает на каждом шаге, и уметь записывать алгоритмы на строгом формальном языке, без лишних поблажек, которые имеются, например, в языке Перл, где можно писать круглые скобки вокруг аргументов функций, а можно не писать, и делать другие подобные вещи. Первый язык должен быть cтрого типизированным, ибо смешение целых чисел, вещественных чисел и текстовых переменных приводит у начинающих программистов к неправильному представлению о методах хранения данных в памяти компьютера. Чем больше сообщений об ошибках ученики увидят от компилятора, и чем больше из этих сообщений они поймут, тем больше фундаментальных знаний о программировании они получат. Паскаль -- неплохой язык в этом смысле. Особенно приятно, что в нём есть проверка на принадлежность индекса массива допустимому множеству значений. Это школьникам очень полезно. Но в нём нет указателей, и ученики не понимают простой вещи -- того, что у переменных есть место (адрес), где она хранится, и значение (то, что там хранится). С языком Си другая проблема: в нём много отпугивающих конструкций. С другой стороны, никто не заставляет учителей показывать все глубины Си. С ним можно работать на том же уровне, что и с Паскалем, не занимаясь сложными махинациями c указателями и не используя сложных конструкций.

Хотя дизайн этого исследования был призван подражать видению Паперта, используя метод обнаружения для обучения и обучения, а также метод исследовательских процессов, его можно критиковать за то, что он не смог ответить на вопрос: Каким эффектом он обладает? Вскоре у маленьких детей? Представленные здесь данные показывают, как дети взаимодействовали со строительно-ориентированным обучением, но не показывали краткосрочные или долгосрочные последствия своего опыта работы с логотипом. Однако продольные описания поведения детей в этом исследовании значительно превосходят описательные данные, обнаруженные в большинстве исследований результатов.

Альтернатив много. Ныне есть целый зоопарк (экосистема) языков программирования, которые постоянно эволюционируют, расщепляются и сливаются. Это уже упомянутые выше языки Форт, Ruby и Python. Перечислим ключевые факторы, управляющие отбором:

Предоставление языком высокоуровневых средств контроля за целостностью и безошибочностью кодa на первом этапе сборки проектов. Это относится в первую очередь к языкам Java, Haskell, и Python. Языки стараются делать такими, чтобы программист просто не мог допускать ошибок. А если ошибки все-таки делаются, то на этапе компиляции (трансляции) они должны находиться. В частности, опечатка в одном символе не должна приводить к тому, что программа компилится и запускается (а такое бывает, например, в языках Бейсик и Perl, если не указан явно специальный режим strict. Язык Java создавался в контексте анализа типичных ошибок и проблем, возникающих в проектах на языке Си++. Создатели Java постарались внести в синтаксис и базовую парадигму такие ограничения, чтобы типичные ошибки программистов на Си++ просто не могли появиться в проектах на Java. Это очень важная идея: если умело заключить себя в рамки, можно получить выгоду. Следует отметить, что в крупных корпорациях часто программистам выдаётся список правил оформления программ и набор конструкций, которые нельзя использовать в коде, несмотря на то, что сам язык их допускает. Излишняя гибкость языка иногда вредна, так как позволяет программистам писать мутные и запутанные программы. Новые языки программирования делают так, чтобы не искушать программистов и не давать им возможности писать путано и с ошибками.

За детьми следовали целый учебный год, а в случае исследований 1 и 2 за два года были собраны данные в одном классе. Было действительно много различий между классными комнатами и способами сбора данных. Несмотря на то, что данные были собраны и представлены таким образом, чтобы сделать возможным сравнение, может быть нецелесообразно сравнивать два класса из-за степени несогласованности между этими двумя средами.

Возможности для будущих исследований

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

Чистота и ясность кода, читаемость кода. Далее всего здесь продвинулся, видимо, Руби. Сегодня на всех официальных сайтах программных средств среди первых достоинств указывается "естественность синтаксиса" или "близость к естественному языку" (обычно английскому). Конечно, это немаловажный фактор. Давно прошло время, когда люди подстраивались под компьютеры и кропотливо переводили свои идеи и алгоритмы в машинный язык нулей и единиц. Сегодня компьютеры все более и более подстраиваются под человеческий язык. Это удобно. Увеличивается скорость написания программ, хотя обычно это идёт в ущерб скорости выполнения и вообще рациональности получающейся программы.

Метапознание, обучение и образовательная компьютерная среда. 5. Нида, Роберт Э.; Липински, Джудит М. и Уотсон, Дж. Микрокомпьютеры и дошкольники: Совместная работа в классе. Компьютеры в школах, 3, 53. Пример из шести детей, обучающихся с логотипом. Гендер и образование, 6, 19.

Мозговые штормы или штормы в чашке? Кэтрин Уилсон Гиллеспи является доцентом в Школе образования Университета Дрейка в Де-Мойн, штат Айова, где она преподает о дошкольном образовании и развитии человека. Он проводит исследования за последние 10 лет маленьких детей, которым грозит школьная неудача. Эта статья проистекает из участия д-ра Гиллеспи в партнерстве Айова раннего детства Паперта, партнерстве между Сеймуром Папертом, Университетом Дрейка, Главным начальником Университета Дрейка, государственными школами Де-Мойн, государственными школами штата Норволк и Агентством образования округа Хартленд.

Чистота и целостность парадигмы, заложенной в основу языка. Например, языки Smalltalk и Ruby базируются на чистой объектно-ориентированной парадигме, а Haskell -- на чистой функциональной парадигме. Эта чистота полезна, чтобы программист чётко представлял модель, которой он ограничен, и в терминах которой ему нужно мыслить при проектировании программы.

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

Какие приложения могут создавать мальчики с помощью Алисы?

Алиса - инструмент, который указывает на любопытство и креативность ребят. Он имеет много общего с рассказами и развивающими играми. Это хороший способ приблизиться к программированию. Мальчик, который делает что-то в Алисе, заканчивает анимацию: в мире есть люди, животные, объекты, которым ребенок, программирование, дает им какое-то поведение и может рассказать историю. Например, мальчик, который отправляется на прогулку со своей собакой и встречает кого-то, историю ужаса, что-то смешное или рассказ об издевательствах.

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

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

Можно ли экспортировать приложение или анимацию для запуска на других машинах?

Чтобы запустить игру, сначала вы должны запустить среду Алисы. Мы ходим в школу с пятью прыжками с Алисой, и через десять минут мы ее устанавливаем повсюду.

Вы следите за развитием мальчиков, которые приходят к вам

Мы стараемся дать немного света при выборе карьеры, и в этом году мы добавим информацию о средних технических навыках для детей, которые хотят изучать компьютерные вычисления из школы. У них также есть мотивационные видеоролики людей, которые посвящены вычислениям и вычислениям. И мы сделали довольно большое исследование о том, почему женщины не изучают компьютерные вычисления: они составляют менее 13 процентов.

Многогранность и гибкость, возможность писать сложные программы коротко и красиво. Таким свойством обладают сейчас языки Perl, Ruby, Python. Но следует отметить, что такая универсальность языков может иметь и недостатки, так как часто приводит к излишнему усложнению синтаксиса. Например, очень многогранен Perl, он богат различными конструкциями и хитрыми штучками, которые позволяют записывать сложную логику очень коротко ("коротко о многом"). В итоге очень легко написать программы, которые потом невозможно читать. Впрочем, то же самое касается и языков Си и Си++. Языкам Ruby, Python многогранность даётся с меньшими потерями, нежели Perl и Си++.

Фотографии: Фонд Гентилеза Садоски. Он отвечает за разработку учебных программ в начальной школе Озера, в школе, где дети изучают код из детского сада. Это преподавание кода в этих школах. Первая - третья начальная школа: язык царапин. Третий-пятый первичный: быстрый язык. Вторичный: курсы быстрой игры. Одно из приложений называется плотиной сообщества, созданной Маркосом Абади, второкурсником средней школы, который стремится поддерживать и поощрять альтруистическое донорство крови. Через приложение вы регистрируетесь, чтобы быть донором или запросить единицы крови, таким образом, соединяет вас с другими пользователями и пытается решить их разнообразные потребности.

Наличие стандартных библиотек и наличие средств интеграции проектов друг с другом и с другими системами и технологиями. Cегодня все уважающие себя языки предоставляют средства для работы с базами данных, для создания графических интерфейсов, для работы с сетевыми протоколами и создания приложений с архитектурой клиент-сервер. Сегодня идёт непрерывное соревнование между скриптовыми языками программирования типа PHP, Ruby, Python, Perl и др. в том, насколько хорошо развиты в них средства интеграции с различными технологиями. Кто-то умеет работать с OpenGL, а кто-то нет.

По словам директора, реализация такого рода программ привела к увеличению стипендий в высших учебных заведениях, предоставляемых его ученикам. В Бразилии на технологическом рынке работает более 1, 3 миллиона человек. По данным Бразильской ассоциации информационных технологий и связи, 50 тысяч рабочих мест ждут квалифицированных специалистов для их заполнения.

Мы знаем, что необходимо обеспечить адекватную подготовку, чтобы следующее поколение доминировало в цифровом мире. С этой целью мы создали собственный метод обучения программированию, создания игр и приложений. Обучение происходит быстро, просто, объективно и весело, - говорит Гуто.

Возможность разрабатывать адаптивные системы. Язык должен быть таким, чтобы программы, написанные на нём, не были косными и неповоротливыми. Язык должен допускать возможность внесения малых изменений в код, чтобы подстроится под динамически меняющуюся и усложняющуюся задачу. Краеугольными камнями адаптивности языковых программных средств являются гибкая многоуровневая модульность (как у языков Java, Ruby, Python, Tcl) простота средств экспорта и импорта функциональности (имеются в виду средства, направленные на то, чтобы проекты могли делится друг с другом классами, объектами и функциями) и средства поддержки рефакторинга -- глобальных революционных изменений кода, проходящих сквозь модули и направленных на улучшение читаемости кода и избавление от накопившегося в процессе эволюции груза ненужной функциональности.

Три партнера потратили год на разработку учебных материалов школы, которая была открыта три месяца назад. Принятие было замечательным. Мы ведем переговоры по аналогичному предложению с другими школами, - говорит он. Гуто говорит, что в «Кодексе» дается 16 курсов, которые применяются в соответствии с возрастной группой. Наши учебные материалы сопровождают то, что ребенок учит в школе. Например, во втором классе курса царапин для детей старше 8 лет мы обучаем картезианским планам. Студент понимает, что то, чему он учится в классе, и думает, что он ничего не сделает, используется для создания игр.

Есть и другие номинации. Язык Python сегодня победитель в номинации "простота синтаксиса", а Perl более, чем какой-либо другой язык удобен для обработки текстов и CGI-скриптинга. Язык Python в принципе создавался как язык интегратор. С его помощью можно интегрировать различные приложения и создавать свои собственные пакеты и новые макроязыки.

Чтобы персонажи в играх выполняли определенные действия, вам нужно делать учетные записи и уравнения. По его словам, обучение развивает логические рассуждения и учит работать организованным и структурированным образом, помимо развития творческого мышления. «Этот набор преимуществ заканчивается тем, что отражается на успеваемости в школе».

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

Итак, Perl многогранен, Python прост, Python красив, Ruby тоже молодец, Java и Си технологичны. Номинаций много и явного победителя нет, так же как и нет одежды, которая одинаково хорошо подходит под летнюю, дождливую или зимнюю погоду. Температура и влажность -- всего лишь два параметра, а в языках программирования их гораздо больше.

Преподавание программирования в школах с математическим уклоном преследовало большей частью специальные, профессионально-направленные интересы. Однако в это же время настойчиво велось исследование общеобразовательного влияния ЭВМ и программирования как новой области человеческой деятельности на содержание обучения в массовой средней школе. С самого начала было ясно, что общеобразовательная сила идей и методов, заимствованных из области программирования, несет в себе огромный потенциал для развития новых фундаментальных компонентов содержания общего школьного образования. Выявлению общеобразовательных ценностей практического программирования способствовала также происходящая как раз в это время (60-70-е гг. XX века) быстрая смена его внешнего облика, направленная на развитие естественных форм общения человека и ЭВМ. Что из общеобразовательных ценностей программирования и новых подходов к решению задач на основе применения ЭВМ должно войти в общее образование и как оно может влиять на содержание и методику школьного обучения? - вот вопросы, которые вызывали активный интерес ученых-педагогов задолго до эпохи персональных компьютеров и появления школьной информатики.

Бизнесмен говорит, что школа обслуживает студентов от 5 до 17 лет. Занятия проводятся еженедельно и последние 90 минут. Сантос утверждает, что курс стимулирует развитие логического мышления, творчества, решения проблем и владения английским языком. «Они приобретают навыки, которые можно использовать в любой области».

Наше видение обучения больше связано с развитием навыков и способностей. Обучение программированию шире, чем разработка кодов. Женат до профессора Ванессы, говорит, что когда у них появилась идея, что бизнес видел, что это могло бы объединить способности как касаться компании. С самого начала мы создали бизнес как сеть франчайзинга, поэтому он был масштабируемым и тиражируемым. Первые три блока работают со второй половины Сегодня, нам уже 30, в которых мы используем около 150 человек.

В основе программирования для ЭВМ лежит понятие алгоритмизации, рассматриваемой в широком смысле как процесс разработки и описания алгоритма средствами заданного языка. Однако алгоритмизация как метод, на который опирается общение человека с формализованным исполнителем (автоматом), связана не только с составлением программ для ЭВМ. Так же как и моделирование, алгоритмизация - это общий метод кибернетики. Процессы управления в различных системах сводятся к реализации определенных алгоритмов. С построением алгоритмов связано и создание самых простейших автоматических устройств, и разработка автоматизированных систем управления сложнейшими производственными процессами.

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

«Обучение поможет понять часть мира, в котором они живут». Я понял, что дети должны быть грамотными в цифровой форме, потому что это новая лингва-франка. Не понимать это означает не понимать часть мира, в котором они живут, делая их уязвимыми и потенциальными жертвами этой технологии.

Фундаментальные основы алгоритмизации лежат в сугубо теоретической области современной математики - теории алгоритмов, однако, алгоритмизация в широком практическом смысле понимается как набор определенных практических приемов, основанных на особых специфических навыках рационального мышления об алгоритмах. Хорошо известно, что представления об алгоритмических процессах и способах их описания формировались (хотя и неявно) в сознании учащихся при изучении школьных дисциплин еще до появления информатики и вычислительной техники. Основная роль среди школьных дисциплин при этом выпадала математике, в которой операционные и алгоритмические действия изначально составляли один из существенных элементов учебной деятельности. Действительно, умение формулировать, записывать, проверять математические алгоритмы, а также точно исполнять их всегда составляли важнейший компонент математической культуры школьника, хотя сам термин "алгоритм" мог при этом в школьных учебных программах и не употребляться.

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

1. Понятие алгоритма и его свойства. Понятие алгоритма является центральным понятием алгоритмизации и, соответственно, основным компонентом алгоритмической культуры. В обучения алгоритмизации нет необходимости (да и возможности) использовать строгое математическое уточнение этого понятия, достаточно его толкования на интуитивно-наглядном уровне. Существенное значение при изложении приобретают такие содержательные свойства алгоритмов, как понятность, массовость, детерминированность и результативность.

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

3. Уровень формализации описания. Понятие уровня формализации описания неразрывно связано с понятием языка. Если описание составлено для автомата, то используемый при этом язык подчиняется строгим ограничениям, которые обычно могут быть сведены в систему формальных правил, образующих синтаксис языка. Сам язык в подобных случаях становится, как говорят, формализованным. Однако на практике в процессе разработки алгоритмов, особенно при построении предварительных описаний, могут использоваться языковые средства, не обязательно строго ограниченные. Более того, такая ситуация возможна и не только в процессе предварительной разработки. Если, к примеру, алгоритм адресуется человеку, то и окончательный вариант алгоритмизации может иметь неформальное, "расплывчатое" представление. Немалое множество используемых на практике алгоритмов "работают" именно в неформализованном варианте. Важно лишь, чтобы алгоритм был понятен исполнителю, т.е. не использовал средств представления, выходящих за границы его возможностей. Таким образом, применяемые на практике уровни формализации представления алгоритмов могут варьироваться в довольно широком диапазоне: от уровня полного отсутствия формализации до уровня формализации "в той или иной мере" и, наконец, до уровня "абсолютной" формализации. Умение работать с языками различных уровней формализации с учетом фактора понятности алгоритма для исполнителя также является существенным компонентом алгоритмической культуры.

4. Принцип дискретности (пошаговости) описания. Построение алгоритма предполагает выделение четкой целенаправленной последовательности допустимых элементарных действий, приводящих к требуемому результату. Организованная совокупность этих действий образует определенную дискретную структуру описания алгоритма, сообщающую ему ясность и четкость. В различных языках такие отдельные этапы алгоритма представляются различны ми средствами. В словесных представлениях алгоритма (на естественном языке) - это отдельные предложения, указания, пункты, в языке схем - это отдельные блоки, в объектном языке ЭВМ - это отдельные команды, в алгоритмическом языке высокого уровня - операторы.

5. Принцип блочности. Возможности языка, используемого для построения алгоритмов, вынуждают избирать ту или иную степень детализации описаний. Это обстоятельство не препятствует, однако, тому, чтобы в процессе работы по составлению требуемого алгоритма при описании его первоначальной схемы употребить язык, единицы действия которого более крупны по сравнению с возможностями исполнителя, которому алгоритм адресуется. По сути дела, речь в данном случае идет об умении расчленять сложную задачу на более простые компоненты. Такой путь приходится избирать всегда, когда задача оказывается достаточно сложной, чтобы алгоритм ее решения в нужном языке можно было описать сразу. В этом случае задача разбивается на информационно замкнутые части (блоки), которым придается самостоятельное значение, и после составления первоначальной схемы, связывающей части задачи, проводится работа по детализации отдельных блоков. Каждый из этих блоков может быть детализирован по только что описанному принципу. Принцип блочности, являясь на деле общим мыслительным приемом, имеет большое общеобразовательное и воспитательное значение. Очень часто в его схему укладывается процесс исследования в самых различных областях. Установив внешние связи, исследователь стремится поделить область неведомого на отдельные самостоятельные части (блоки), а затем уже проникает внутрь каждого блока. Или наоборот: с целью обозреть общую схему связей сначала отдельные элементы группируются в самостоятельные блоки, которые связываются затем между собой. Принцип блочности наглядно показывает, какую общеобразовательную силу могут иметь подходы, заимствованные из области программирования. При окончательном построении алгоритма из блоков возможны два принципиально различных подхода:

а) детальное представление блока помещается в соответствующее место алгоритма, а сам блок, исчерпав свою роль общего приема поиска алгоритма, как бы "растворяется" в нем;

6. Принцип ветвления. Требование алгоритмической полноты языков, используемых для представления алгоритмов, должно обеспечивать наличие средств, позволяющих реализовывать в алгоритмических описаниях логические ситуации, т.е. ситуации, в которых требуется принятие решения в зависимости от заданных начальных условий. Организация таких алгоритмов требует умелого использования логических (разветвляющих) средств языка. Существенными компонентами алгоритмической грамотности здесь) является осознание того, что:

а)описание должно предусматривать все возможные варианты) исходных данных и для каждой их комбинации быть результативным;

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

7. Принцип цикличности. Эффективность алгоритмических описаний в большинстве случаев определяется возможностью неоднократного использования одних и тех же фрагментов описаний при различных значениях входных величин. Именно на этом приеме основано построение описаний, не удлиняющихся при увеличении объема действий, предусматриваемых этими описаниями. Возвращение к повторному прохождению одного и того же фрагмента описания может быть организовано с применением логических средств языка, однако язык может содержать и специальные средства организации циклических алгоритмов (например, операторы цикла в языках высокого уровня). И в том и другом случае существенным компонентом алгоритмической культуры здесь является понимание общей схемы функционирования циклического процесса и, что особенно важно, умение выделять при построении алгоритмов повторяющуюся (рабочую) часть цикла.

8. Выполнение (обоснование) алгоритма. Существенно важным компонентом алгоритмической грамотности является постоянно привлекаемое в процессе алгоритмизации умение воспринимать и исполнять разрабатываемые фрагменты описания алгоритма отвлеченно от планируемых результатов - так, как они описаны, а не так, как может быть, в какой-то момент хотелось бы самому автору или исполнителю. Говоря иными словами, требуется развитое умение четко сопоставлять (и разделять) то, что задумано автором, с тем, к чему приводит фактически написанное. Этот компонент алгоритмизации понуждает автора алгоритма постоянно перевоплощаться в хладнокровного и педантичного исполнителя и является, по сути дела, единственным работающим в процессе создания алгоритмического описания (до передачи его исполнителю) средством контроля правильности и обоснования алгоритма.

9. Организация данных. Исходным материалом для алгоритма является информация или исходные данные, которые надлежит обработать. Составитель алгоритма обязан думать не только о том, как и в какой последовательности производить обработку, но и о том, где и как фиксировать промежуточные и окончательные результаты работы алгоритма. Мы перечислили компоненты алгоритмической культуры, овладение которыми имеет основополагающее значение для формирования навыка составления алгоритмов - алгоритмизации и, следовательно, программирования для ЭВМ. Однако особенность компонентов, образующих алгоритмическую культуру, в том, что они не имеют узкой ориентации исключительно на взаимодействие школьника с ЭВМ, а имеют, вообще говоря, независимое от программирования более широкое значение. Говоря иными словами, алгоритмическая культура школьника как совокупность наиболее общих "допрограммистских" представлений, умений и навыков обеспечивает некоторый начальный уровень грамотности школьника не только для его успешной работы в системе "ученик - компьютер", но и в неформальных безмашинных системах "ученик - учитель", "ученик - ученик" и т.п., т.е. создает то операционное наполнение, которое, в частности, обслуживает деятельность школьника в рамках учебных дисциплин за пределами "компьютерной" обстановки. Как отмечал академик Е. П. Велихов в связи с введением в школу предмета Основы информатики и вычислительной техники, "информатика является частью общечеловеческой культуры, не сводящейся к использованию компьютеров, а в равной степени относящейся, скажем, к умению объяснить приезжему дорогу. Исследования, направленные на выявление общеобразовательного материала по программированию для средней школы, связывались в конечном итоге с педагогической задачей формирования общеобразовательного предмета (раздела) по программированию для последующего включения в учебный план массовой школы. Такая попытка впервые была реализована к середине 1970-х гг.: в курсе алгебры VIII класса появился материал для беседы по теме "Вычисления и алгоритмы", а позднее 11-часовой раздел "Алгоритмы и элементы программирования".

Значение этого внезапного "прорыва" сведений о программировании для ЭВМ в регулярное содержание школьного образования трудно переоценить, хотя в целом эта акция оказалось явно неудачной и новый раздел вскоре был исключен из учебника алгебры. Причина в том, что вместо привлечения наработанных к тому времени умеренных учебно-методических средств наглядно обучения алгоритмизации в учебник была введена формальная англоязычная нотация языка Алгол-60, что, естественно, шокировало неподготовленного массового учителя математики. В результате - развивается идея использования для формирования фундаментальных компонентов алгоритмической культуры учащихся учебных (гипотетических) машин и языков алгоритмизации. В периодической методической? печати все настойчивее ставится вопрос о введении в школу общеобразовательных курсов (разделов), посвященных изучению элементов кибернетики, ЭВМ и программирования, в его обсуждении наряду с методистами принимают участие известные математики. В то же время исследуются содержательно-методические аспекты межпредметного влияния алгоритмизации на традиционные школьные предметы и, прежде всего, математику через язык, алгоритмическую направленность содержания, усиление внимания к прикладной стороне знаний и т.п. Перспективная значимость этих работ в том, что они рассматривали именно те аспекты глубокого влияния идей и методов программирования на содержание и процесс обучения, недостаток которых в полной мере стал проявляться в условиях решительной экспансии компьютеризации школы, грянувшей десятилетие спустя.

Тема №4 Язык программирования: эволюция, классификация

(О.Л. Голицина, И.И. Попов «Основы алгоритмизации и программирования» Стр. 38-45)

Эволюция Языков программирования

В развитии инструментального программного обеспечения (т.е. про­граммного обеспечения, служащего для создания программных средств в любой проблемной области) рассматривают пять поколений языков про­граммирования (ЯП). Языки про­граммирования как средство общения че­ловека с ЭВМ от поколения к поколению улучшали свои характеристики, становясь, все более доступными в освоении непрофессионалам.

Первые три поколения ЯП характеризовались более сложным на­бором зарезервированных слов и синтаксисом. Языки четвертого поко­ления все еще требуют соблюдения определенного синтаксиса при на­писании программ, но он значительно легче для освоения. Естественные ЯП, разрабатываемые в настоящее время, составят пятое поколение и позволят определять необходимые процедуры обработки информации, используя предложения языка, весьма близкого к естественному и не требующего соблюдения особого синтаксиса.

Поколения ЯП

ЯП первого поколения представляли собой набор машинных ко­манд в двоичном (бинарном) или восьмеричном формате, которым оп­ределялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.

Второе поколение ЯП характеризуется созданием языков ассемб­лерного типа (ассемблеров, макроассемблеров), позволяющих вместо двоичных и других форматов машинных команд использовать их мне­монические символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затрудни­тельны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные язы­ки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).

Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня - Fortran, разработанного под руководством Дж. Бэкуса в фирме IВМ. За короткое время Fortran становится основ­ным ЯП при решении инженерно-технических и научных задач. Перво­начально Fortran обладал весьма ограниченными средствами обеспече­ния работы с символьной информацией и с системой ввода-вывода. Од­нако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов - от микро- до супер­ЭВМ, а его версии используются и для вычислительных средств нетра­диционной параллельной архитектуры.

Вскоре после языка Fortran появились такие ныне широко извест­ные языки, как Аlgol, Соbоl, Ваsiс, РL/1, Раscal, АРL, АDА, С, Forth, Lisp, Моdula и др. В настоящее время насчитывается свыше 2000 раз­личных языков высокого уровня.

Языки четвертого поколения носят ярко выраженный непроцедур­ный характер, определяемый тем, что программы на таких языках опи­сывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алго­ритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Рrolog, Langin). Так как непроцедурные языки имеют минимальное число син­таксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.

Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии про­граммного объекта, впервые использованного в языке Simulа-67 и со­ставившего впоследствии основу известного языка Smalltalk. Про­граммный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться со­вершенно разными алгоритмами при выполнении действий, определен­ных одним и тем же ключевым словом (так называемое свойство полиморфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выпол­нения операции умножения. Такими свойствами обладают объектно-ориентированные Pascal Basic, С++, Smalltalk, Simulа, и ряд дру­гих языков программирования.

Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов имеют свой особый син­таксис, который должен соблюдаться, как и в традиционных ЯП третье­го поколения, но при этом проще в использовании. Среди языков запро­сов фактическим стандартом стал язык SQL .

И, наконец, четвертым направлением развития являются языки па­раллельного программирования (модификация ЯВУ Fortran, языки Оссаm, SISAL, FР и др.), которые ориентированы на создание про­граммного обеспечения для вычислительных средств параллельной ар­хитектуры (многомашинные, мультипроцессорные среды и др.), в отли­чие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.

К интенсивно развивающемуся в настоящее время пятому поколе­нию относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SIAL и др.), а также естествен­ные языки, не требующие освоения какого-либо специального синтак­сиса (в настоящее время успешно используются естественные ЯП с ог­раниченными возможностями - Clout, Q&А, НАL и др.).

Классификация языков программирования

Для того чтобы ЭВМ могла решать задачи, составленные человеком, она должна последовательно выполнять инструкции некоторой программы-алгоритма. Совокупность таких инструкций, направленных на решение конкретной зада­чи, называется компьютерной программой. Но это еще не все.

Компьютер не понимает естественного языка человека, а понимает только свой язык - машинный код. Что касает­ся языка программирования, то он с помощью фиксирован­ных систем обозначений и правил позволяет описывать ал­горитмы и структуры данных, которые впоследствии будут переведены транслятором в машинный код.

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

Языки низкого уровня - это средство записи инструкций компьютеру простыми приказами-командами на аппаратном уровне. Такой язык зависит от структуры конкретной ЭВМ и иногда называется машинно-ориентированным языком. Этот язык плохо приспособлен для использования челове­ком, ведь запись программы на этом языке представляет со­бой последовательность нулей и единиц, и мало шансов, что сложная задача будет запрограммирована безошибочно. Для упрощения программирования был разработан язык симво­лического кодирования (автокод, или язык ассемблера). Про­грамма, написанная на таком языке, ближе человеку, но все равно требует от программиста широких познаний в этой области.

Следующая группа - языки программирования высокого уровня. Это языки, которые допускают описание задачи в наглядном, легко воспринимаемом виде. Их отличительной особенностью является ориентация не на систему команд той или иной ЭВМ, а на систему инструкций, характерных для записи алгоритмов определенного класса. К языкам програм­мирования высокого класса относятся Бейсик, Фортран, Ал­гол, Паскаль, Си и др.

К языкам программирования сверхвысокого уровня мож­но отнести Алгол-68, в котором сделана попытка формали­зовать описание языка, приведшая к появлению двух типов программ: абстрактной и конкретной. Первый тип программы - абстрактный - создается программистом, конкретный - выводится из первого. Существует предположение, что при таком подходе принципиально невозможно породить син­таксически (а на практике и семантически) неверную конк­ретную программу.

Изучение ЯП часто начинают с их классифика­ции. Определяющие факторы классификации обычно жестко не фиксиру­ются. Чтобы продемонстрировать характер типичной классификации, опи­шем наиболее часто применяемые факторы, дадим им условные названия и приведем примеры ЯП для каждой из классификационных групп.

Элементы языков программирования могут рассматриваться на следующих уровнях:

алфавит - совокупность символов, отображаемых на устройствах печати и экранах и/или вводимых с клавиатуры терминала.

лексика - совокупность правил образования цепочек символов (лексем), образующих идентификаторы (переменные и метки), операто­ры, операции и другие лексические компоненты языка. Сюда же вклю­чаются зарезервированные (запрещенные, ключевые) слова ЯП, предна­значенные для обозначения операторов, встроенных функций и пр.Иногда эквивалентные лексемы, и зависимости от ЯП, могут обо­значаться как одним символом алфавита, так и несколькими.

синтаксис - совокупность правил образования языковых конст­рукций, или предложений ЯП - блоков, процедур, составных операто­ров, условных операторов, операторов цикла и пр. Особенностью син­таксиса является принцип вложенности (рекурсивность) правил построения конструкций. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя. Например, в определении оператора цикла телом цикла явля­ется оператор, частным случаем которого является все тот же опера­тор цикла;

семантика - смысловое содержание конструкций, предложений языка, семантический анализ - это проверка смысловой правильности конструкции. Например, если мы в выражении используем перемен­ную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа пере­менной, можно говорит о допустимости операции с данной перемен­ной. Семантические ошибки возникают при недопустимом использова­нии операций, массивов, функций, операторов и пр.

Трансляторы

Программа, написанная на любом языке программирования, является исходной программой. Особенность таких про­грамм, как мы помним, заключается в том, что они состоят из инструкций, понятных человеку, но не понятных процес­сору компьютера. Чтобы процессор мог выполнить работу в соответствии с алгоритмом, записанным в исходной про­грамме, эта программа должна быть переведена на машин­ный язык - язык команд процессора. Такой перевод про­граммы называется трансляцией, а выполняется он специальными программами - трансля­торами.

Существует три вида трансляторов: интерпретаторы, ком­пиляторы и ассемблеры.

Интерпретатор - транслятор, переводящий текст про­граммы поэтапно (покомандно) и сразу же (то есть парал­лельно) выполняющий оттранслированную команду исход­ной программы.

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

Схематически работу компилятора иллюстрирует рис. 1.6.

Цифрой 1 на схеме обозначен блок синтаксического кон­троля текста программы, цифрой 2 - генератор машинного кода.


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

Последний вид трансляторов - ассемблеры. Они предназ­начены для перевода программы, написанной на языке ас­семблера (автокода), в программу на машинном языке.

Все трансляторы, независимо от их вида, решают следу­ющие основные задачи:

Выполняют анализ и проверяют синтаксис транслируе­мой программы;

Генерируют машинный код программы;

Распределяют память для выходной программы.