Какой язык программирования в школе. Введение. Виды классификации и назначение языков программирования. Машинно - независимые языки Машинно - независимые языки - это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны

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

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

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

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

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

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

Опубликовано в:, Теги. . Маркус Пёссел уже отмечал во время физических исследований в Гамбургском университете: задача разработки и представления физических тем, чтобы их можно было понять и для нефизиков, была по крайней мере столь же интересна ему, как и настоящая исследовательская работа.

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

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

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

Почему вы хотите научиться программировать?

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

Наиболее рекомендуемые языки программирования для начинающих

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

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

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

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

Почему мальчики нуждаются в логике и алгоритмическом мышлении? Это позволило детям обучаться программированию компьютера, не беспокоясь о том, чтобы одновременно изучать другой язык. Мне посчастливилось пройти очень мотивирующие школы, которые на этом раннем этапе мое призвание было уже обнаружено.

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

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

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

И почему преподавать абстрактное и алгоритмическое мышление, если не тренировать профессионалов, которые понимают компьютерные парадигмы легче? Высказывание хорошего друга: «то, что задействовано, - это не учиться больше, чем программировать, чтобы узнать, что значит программировать». Другими словами, чему учили математику, философию, историю или биологию? Формировать более полных людей не только в их культуре, но и в способе структурирования мысли. Навыки, которые, несомненно, влияют на ваш рост как взрослые.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В Испании: практически табула раса

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

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

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

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

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

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 - генератор машинного кода.


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

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

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

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

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

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