Языки программирования — ЯП'ы в робототехнике

Содержание

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

Язык программирования – это искуственный язык, созданный для взаимодействия с машиной, в частности, с компьютером. ЯП используются для написания программ, которые управляют машиной и/или выражают алгоритмы.

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

Многие ЯП имеют императивную форму, т.е. описывают последовательность операций. Другие могут иметь декларативную форму, т.е. описывают результат, а не то, как его получить.

Некоторые языки определяются стандартом (C,C++,Haskell, и др.). Другие не имеют формального описания, и наиболее широко распространенная реализация используется в качестве эталона.

Описание ЯП обычно делится на две части: синтаксис, т.е. форма, и семантика, т.е. значение.

Семантика в свою очередь подразделяется на лексику и грамматику.

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

Не все синтаксически корректные программы являются семантически корректными. Например:

Здесь *p не определено, *p >> 4 не определено, даже если определено *p , и p->im так же не определено. Тем не менее, синтаксически это корректная программа.

Семантика же подразделяется на статическую, динамическую, и систему типов.

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

определяет стратегию выполнения программы. Она определяет, каким образом исполняются инструкции, порядок их исполнения, значение управляющих структур и т.д.

определяет каким образом ЯП классифицирует значения и выражения, как эти типы взаимодействуют и каким образом ЯП может манипулировать ими. Система типов является практическим приложением теории категорий. Цель системы типов – проверка программы на корректность (до какой-то степени). Любая система типов, отвергая некорректные программы, будет так же отвергать некоторый процент коррекнтых (хотя необычных) программ. Чтобы обойти это ограничение, ЯП обычно имеют некие механизмы для выхода из ограничений системы типов. В большинстве случаев, указание корректных типов ложится на совесть программиста. Однако некоторые ЯП (обычно функциональные) умеют выводить типы исходя из семантики, и таким образом освобождают программиста от необходимости явно указывать типы.

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

Существует множество критериев, по которым можно классифицировать языки программирования. Частые варианты классификации включают:

  • По парадигме (декларативные, императивные, структурированные и т.п.)
  • По системе типов (динамические, статические, сильно- и слаботипизированные, нетипизированные и т.п.)
  • По уровню абстракции (высокого, низкого уровня)
  • По модели исполнения (компилируемые, интерпретируемые)
  • По “поколению”

Четкой классификации не существует, по той простой причине, что существуют буквально тысячи ЯП, и в любой категории классификации обнаруживается практически непрерывный спектр.

По системе типов

Наиболее категоричное разделение ЯП по системе типов на типизированные и нетипизированные.

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

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

Типизированные языки определяют типы данных, с которыми работает любая операция. Например, операция деления работает над числами – для строк эта операция не определена.

Типизированные языки, в свою очередь, могут классифицироваться по моменту проверки типов и по строгости этой проверки.

По моменту проверки типов ЯП делятся на статически и динамически типизированные (или просто, статические и динамические).

Статически типизированные языки

При статической типизации, типы всех выражений точно определены до выполнения программы, и обычно проверяются при компиляции. Языки со статической типизацией, в свою очередь могут быть явно типизированными (manifestly typed) или типовыводящими (type-inferred).

Явно типизированные языки

требуют явного указания типов. К ним относятся, например, C, C++, C#, Java.

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

Надо заметить, что многие явно типизированные языки умеют выводить типы в некоторых случаях (например, auto в С++11), поэтому четкую грань здесь провести можно не всегда.

Динамически типизированные языки

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

По строгости типизации языки делятся на сильно и слабо типизированные.

Слабо типизированные языки

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

Сильно типизированные языки

не позволяют неявную конверсию, и требуют явной.

В целом, четкую грань провести оказывается достаточно сложно, поскольку неявное преобразование типов в той или иной мере производится в большинстве языков. Однозначно к слабо типизированным относят Perl, JavaScript и C (в силу свободной конверсии void* ). К сильно типизированным относят C++, Java, Haskell, и другие.

По уровню абстракции

Классификация по уровню абстракции сильно зависит от современных представлений о “высоком уровне абстракции”.

Языки по-настоящему низкого уровня – это машинный код и языки ассемблера, все остальные – в некотором смысле языки высокого уровня. Тем не менее, многие сейчас считают C и C++ языками низкого уровня.

Java, Python, Ruby и т.п. сейчас общепринято считаются языками высокого уровня.

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

По модели исполнения

ЯП может быть компилируемым, транс-компилируемым или интерпретируемым.

Интерпретируемые языки исполняются непосредственно, без этапа компиляции. Программа, называемая интерпретатором, читает каждое выражение, определяет сообразное действие, и совершает его. Гибридный вариант может генерировать машинный код “на лету” и исполнять его.

Интерпретируемые языки: PHP, Perl, Bash, Python, JavaScript, Haskell

Компилируемый язык компилируется, т.е. переводится в исполнимую форму до выполнения.

Компиляция может производиться непосредственно в машинный код, или в какое-либо промежуточное представление (байт-код), которое потом интерпретируется виртуальной машиной.

Компилируемые языки (машинный код): ASM, С, С++, Algol, Fortran Компилируемые языки (байт-код): Python, Java

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

Транс-компилируемые языки: C, C++, Haskell, Fortran

Линии сильно размыты, поскольку существуют компиляторы для традиционно интерпретируемых языков, и, напротив, интерпретаторы для традиционно компилируемых.

Классификация по “поколению”

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

Языки первого поколения

1GL – это машинные языки. Исторически, программы на этих языках вводились при помощи переключателей на передней панели ЭВМ, либо “писались” на перфокартах и позже перфолентах. Программа на 1GL состоит из 0 и 1 и сильно привязана к конкретному железу, на котором она должна исполняться.

Языки второго поколения

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

Языки третьего поколения

Более абстрактные, чем 2GL, это языки, которые перекладывают заботу о непринципиальных деталях с плеч программиста на плечи компьютера. Fortran, ALGOL и COBOL являются первыми 2GL. C, C++, Java, BASIC и Pascal так же могут быть отнесены к 3GL, хотя в общем 3GL подразумевает только структурную парадигму (в то время как C++, Java работают в том числе в ООП)

Языки четвертого поколения

Определение несколько расплывчато, однако в целом сводится к еще более высокому уровню абстракции, чем 3GL. Однако, подобный уровень абстракции часто требует сужения области применения. Так, например, FoxPro, LabView G, SQL, Simulink являются 4GL, однако находят применение в узкой специфической области. Некоторые исследователи считают, что 4GL являются подмножеством DSL (domain specific language, язык, специфичный к области).

Языки пятого поколения

В конце 80-х – начале 90-х была попытка разработать класс языков, которые “пишут программы сами”. По идее, программист должен был описывать как программа должна себя вести, а остальное должен был делать компьютер. К примерам можно отнести Prolog, OPS5, Mercury. К добру или худу, но эта затея провалилась, поскольку создание эффективного алгоритма для решения конкретной проблемы – само по себе весьма нетривиальная задача, и часто для ее решения требуются человеческая смекалка и интуиция.

10 основных навыков, необходимых для робототехников

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

А кроме самого материала также комментарии одного из наших робо-экспертов, куратора екатеринбургского хакспейса MakeItLab, Олега Евсегнеева.

Инженеры-робототехники, как правило, попадают в две категории специалистов: думающих (теоретиков) и делающих (практиков). Это означает, что робототехники должны отличаться хорошим сочетанием двух противоположных стилей работы. «Склонные к исследованиям» люди вообще любят решать проблемы, думая, читая и изучая. С другой стороны, специалисты-практики любят решать проблемы лишь «испачкав руки», можно так сказать.

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

1. Системное мышление

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

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

Комментарий Олега Евсегнеева: Вообще, системное мышление является важным навыком для всех инженеров. Наш мир – одна большая сверхсложная система. Навыки системной инженерии помогают правильно понять, что и как связано в этом мире. Зная это, можно создавать эффективные системы управления реальным миром.

2. Мышление программиста

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

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

Комментарий Олега Евсегнеева: Я бы добавил, что для создания современных роботов требуется знание языков низкого, высокого и даже сверхвысокого уровня. Микроконтроллеры должны работать очень быстро и эффективно. Чтобы этого достичь, нужно углубляться в архитектуру вычислительного устройства, знать особенности работы с памятью и низкоуровневыми протоколами. Сердцем робота может быть тяжелая операционная система, например, ROS. Здесь уже может понадобиться знание ООП, умение пользоваться серьезными пакетами машинного зрения, навигации и машинного обучения. Наконец, чтобы написать интерфейс робота в веб и связать его с сетью интернет, неплохо будет научиться скриптовым языкам, тому же python.

3. Способность к самобучению

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

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

Комментарий Олега Евсегнеева: Это ключевой навык в любом творческом деле. С помощью него можно получить другие навыки

4. Математика

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

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

5. Физика и прикладная математика

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

Комментарий Олега Евсегнеева: Есть хороший пример – автоматические станции для полета на другие планеты. Знание физики позволяет настолько точно рассчитать траекторию их полета, что спустя годы и миллионы километров аппарат попадает в точно заданную позицию.

6. Анализ и выбор решения

Быть хорошим робототехником означает постоянно принимать инженерные решения. Что выбрать для программирования — ROS или другую систему? Сколько пальцев должен иметь проектируемый робот? Какие датчики выбрать для использования? Робототехника использует множество решений и среди них почти нет единственно верного.

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

Комментарий Олега Евсегнеева: Анализ – это способность разбирать интересующий предмет на кирпичики. Способность достать до сути механизма или явления. Без этого невозможно даже правильно составить задание на проектирование робота. А ошибки на этом этапе часто бывают фатальными для всей идеи.

7. Хорошие коммуникационные способности

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

Комментарий Олега Евсегнеева: Прямое общение – часто самый быстрый и эффективный способ передать информацию. Замкнутый человек лишается критики со стороны коллег, и тем самым рискует надолго зависнуть на пути неправильного решения. Неправильные решения приводят к провалу проекта, и тем самым сильно бьют по мотивации.

8. Технология проектирования

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

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

9. Решение сложных проблем

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

10. Настойчивость

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

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

А что вы думаете по поводу необходимых навыков для робототехника? Если вам есть что добавить — ждем ваши мысли в комментариях!

Кружки робототехники для детей

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

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

На следующем этапе происходит изучение основ программирования. Ученики создают различные алгоритмы, анализируют полученные объекты. На более сложном уровне происходит знакомство с электроникой и металлической робототехникой. Последняя предполагает присоединение к конструкции различных электросхем и моторов.

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

Какие модули используются?

Сегодня есть несколько десятков проектов создания модульной робототехники. Есть два основных подхода:

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

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

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

Примеры модулей

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

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

Одним из популярных модулей является ультразвуковой дальномер. Это датчик, который отправляет УЗ-волну, считывает время, за которое она возвращается. Еще одним примером служить Ардуино-модуль, которые может измерять температуру воздуха. Актуален для оснащения жилья системой «умный дом». Все варианты модулей обычно присоединяются с использованием специальных платформ.

Какие языки робототехники существуют?

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

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

Знакомство с языками программирования начинается с изучения примеров

Какие языки программирования актуальны для детей?

Существует несколько направлений, которые изучаются детьми по мере освоения материала:

— ROBOLAB – язык программирования для робототехники. Долгое время был для образовательных роботов Лего до выпуска более современного ПО.
— Scratch – среда визуального программирования. Подходит для поддержки NXT или EV3.
— EV3 Basic – текстовый базовый вид.
— RobotC – язык программирования для робототехники на основе С. Имеет интегрированный программный отладчик. Подходит для разнообразных платформ.

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

Какому набору робототехника для детей отдать предпочтение?

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

Наибольшей популярностью пользуется продукция Лего. Компания предлагает целую образовательную линейку. Есть наборы для детей всех возрастов с различным уровнем подготовки. Есть и российские компании, занимающиеся выпуском различных комплектов. Среди них Роботрек и Технолаб. Первый занимается разработкой линеек для малышей, которые активно используется как для занятий при школах робототехники, так и дома. Второй выпускает комплекты, адаптированные под дошкольный возраст.

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

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

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

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

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

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

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

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

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

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Только сон приблежает студента к концу лекции. А чужой храп его отдаляет. 8822 — | 7530 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Языки программирования — ЯП'ы в робототехнике ?

Форум про роботов и робототехнике. Обсуждаем, конструируем из подручных средств или на 3D-принтере и программируем роботов на ардуино и из лего . Рассуждаем о развитие науки и техники в промышленности России, Японии и других стран! Высказывайте своё мнение о статьях, оставляйте комментарии на тему искусственного интеллекта , LEGO конструирования . Задавайте любые вопросы и ставьте задачи. Вместе будем их решать! Делитесь наработками своих роботов!

Поиск

Сегодня: 15.11.2020 — 13:15:17

Форум роботов и робототехники » Робот. С чего начать? » Язык программирования ИИ
Объявление участникам робототехнического форума
Уважаемые гости и участники робототехнического форума. Помогайте друг другу, отвечайте на интересующие Вас вопросы.
Доступ для отправки сообщений и создания тем открыт всем посетителям без регистрации.
Автор Сообщение
Classic • Здравствуйте!В этом деле я новичок.Собственно вопросы:

1.Какие языки программирования используют в наше время,для разработки интеллекта,разума — пролог,ассемблер,си и т.д.?И можно ли одним языком обойтись?

Сейчас изучаю C++.Хочу набрать опыт
программирования на С++ т.к. много хорошего материала.
2.Стоит ли тратить на него время или можно сразу переходить на изучение специфических языков.

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

Программирование — самая перспективная профессия XXI века. Какие бывают языки программирования, для чего они используются и как развиваются?

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

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

Когда этот язык — язык программирования, его влияние, независимо от нашего желания, сказывается на нашем способе мышления.

Нидерландский учёный, труды которого оказали влияние на развитие информатики и информационных технологий

Для чего нужны языки программирования

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

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

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

С момента описания первого универсального программируемого устройства в 1835 году — им считается разностная машина Чарльза Бэббиджа — человечество создало более8000 языков программирования. Конкретно для этой машины первую программу написала в 1842 году леди Ада Лавлейс, ее считают первым в мире программистом. К сожалению, саму машину не удалось полностью собрать при жизни создателя из-за несовершенства технологий и дотошности Бэббиджа. Машина считывает данные с перфокарт и использует паровой двигатель как источник энергии. Если бы механизм собрали по плану, то он стал бы первым в мире компьютером.

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

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

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

Какие бывают языки программирования

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

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

Текст программы для отображения «Hello, world» на языке Python

>>> print («Hello, world»)

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

Текст программы для отображения «Hello, world» на языке Malbolge

Выделяют такие подходы к программированию (на профессиональном языке они называются парадигмами): аспектно-ориентированные, структурные, процедурные, логические, объектно-ориентированные, функциональные, мультипарадигмальные языки.

Общепринятой классификации не существует, но исторически принято разделять ЯП на высокоуровневые и низкоуровневые языки.

Языки высокого уровня

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

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

Машинно-ориентированные языки

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

Дональд Кнут в своей классической книге «Искусство программирования» приводил такой довод в пользу низкоуровневых языков: «Например, некоторые комбинаторные вычисления нужно повторять триллионы раз, и мы сэкономим приблизительно 11,6 дней работы за счет того, что сократим время вычислений во внутреннем цикле всего на одну микросекунду». Даже один сэкономленный такт вычислений дает огромную экономию в крупном масштабе!

Если вам попалась невероятно эффективная и быстрая программа — она наверняка написана с применением низкоуровневого языка.

Популярность языков

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

  1. Подсчет числа вакансий с упоминанием этого языка.
  2. Количество проданных книг (учебников или справочников).
  3. Оценка количества строк кода, написанных на языке (например, по статистике хостингов, где публикуются тексты программ).
  4. Подсчет упоминаний языка в запросах поисковиков.

Например, журнал IEEE Spectrum попытался составить самый объективную картину популярности языков программирования по12 метрикам из10 источников. Вот как выглядела в 2020 году таблица, отранжированная по этим параметрам:

По активности разработчиков на GitHub в 2020 году рейтинг выглядит так:

По каждой метрике может лидировать какой-то один язык, а по другой метрике — другой. Например, Cobol до сих пор доминирует в корпоративных дата-центрах, на нем написано много программ, хотя новых практически не пишут. Вариации языка C используются в системном программировании, а язык Java популярен для написания приложений под Android. Прочие языки регулярно используются для создания других разнообразных приложений.

За каким языком программирования будущее — покажет история, но исследователи отмечают, что по совокупности метрик в последнее время растет популярность Python, который сейчас вышел на 1-е место. Поднялись по рейтингу C# и Swift. По количеству вакансий для программистов C значительно опережает Python. В веб-программировании популярны JavaScript и PHP.

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

Курс «Профессия Веб-разработчик» предполагает, что по окончании годичной программы студент сможет устроиться джуниор-программистом. Программа обучение рассчитана на один год и составлена из трех основных курсов: «Веб-разработчик», «JavaScript с нуля» и «Базовые навыки PHP». По окончании курса студент получает глубокие комплексные знания, необходимые для профессиональной работы.

Тобольские робототехники познакомились с языком программирования

Сотрудники регионального ресурсного центра по развитию образовательной робототехники и прототипирования в Тюменской области (Колледж цифровых и педагогических технологий) провели образовательную сессию для одаренных детей и тренеров по робототехнике в Тобольске .

Сессию посетили 15 педагогов и 24 школьника из Вагайского, Тобольского, Уватского районов и города Тобольска. Тренеры со своими воспитанниками познакомились с видами, уровнями и направлениями робототехнических соревнований. Подробно рассмотрели такие мероприятия как «РобоФест», «JuniorSkills» и Всероссийская робототехническая олимпиада (ВРО), провели обзор соревновательных направлений фестиваля «РобоФинист».

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

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

Также в рамках сессии педагоги разобрали особенности алгоритмов состязаний основной категории ВРО и познакомились с языком программирования Small Basic, который можно использовать в рамках уроков информатики.

Язык программирования для Радиотехнических задач

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

Методом полу осмысленного тыка выбрал С++, т.к. он считается универсальными и используется в объектно ориентированном программировании. Есть мысли на счет С# и MatLab, но я так понял, что в матлабе сужается круг рассматриваемых задач, а вот С# имеет знакомый для меня синтаксис, очень похож на Borland и среду Eclipse для Андроида, ну и Java.

До этого изучал Borland C, pascal, Java, но это было года 2 назад и на уровне техникума. А на данный момент скачал себе 2 книги: Страуструп «Язык программирования С++» и Липпман «Вводный курс. С++».

31.03.2015, 20:55

Графический язык ДРАКОН для программирования микроконтроллеров
ДРАКОН — визуальный язык, в котором используются два типа элементов: графические фигуры.

Язык программирования для решения олимпиадных задач?
Вечер в хату арестанты, подскажите, новичку в олимпиадном программировании, на каком языке.

Как называется язык программирования для программирования на Android?
Как называется язык программирования для программирования на Android?

Язык программирования для Android
Посоветуйте, какой ЯП выбрать для написания приложений на Android? Знаю только про Java, но.

Программирование роботов. Разработка робототехники

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

Железные люди Анри Дро

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

Созданию первых автоматических механизмов с программным управлением положили начало в конце XVΙΙΙ века европейские часовые мастера. Наиболее преуспели на этом поприще швейцарские специалисты отец и сын Пьер-Жак и Анри Дро. Ими создана целая серия человекоподобных роботов («пишущий мальчик», «рисовальщик», «музыкантша») в основе управления которыми лежали часовые механизмы. Именно в честь Анри Дро в дальнейшем все программируемые человекоподобные автоматы стали называть «андроидами».

У истоков программирования

Основы программирования промышленных роботов были заложены на заре XIX века во Франции. Здесь же и были разработаны первые программы для автоматических текстильных станков (прядильных и ткацких). Стремительно растущая армия Наполеона остро нуждалась в обмундировании и, следовательно, тканях. Изобретатель из Лиона Жозеф Жаккар предложил способ быстрой перенастройки ткацкого станка для производства различных видов продукции. Нередко эта процедура требовала огромного количества времени, колоссальных усилий и внимания целого коллектива. Суть нововведения сводилась к использованию картонных карточек с перфорированными отверстиями. Иглы, попадая в просеченные места, необходимым образом смещали нити. Смена карт быстро проводилась оператором станка: новая перфокарта — новая программа — новый тип ткани или узора. Французская разработка стала прообразом современных автоматизированных комплексов, роботов с возможностью программирования.

Идею, предложенную Жаккаром, с восторгом использовали в своих автоматических устройствах многие изобретатели:

  • Начальник статистического управления С. Н. Корсаков (Россия, 1832 г.) — в механизме для сравнивания и анализа идей.
  • Математик Чарльз Бэббидж (Англия, 1834 г.) — в аналитической машине для решения широкого круга математических задач.
  • Инженер Герман Холлерит (США, 1890 г.) — в устройстве для хранения и обработки статистических данных (табуляторе). Для заметки: в 1911 году компания. Холлерита получила название IBM (International Business Machines).

Перфокарты были основными носителями информации вплоть до 60-х годов прошлого века.

Что такое робот?

Своим названием интеллектуальные машины обязаны чешскому драматургу Карелу Чапеку. В пьесе «R.U.R.», увидевшей свет в 1920 году, писатель назвал роботом искусственного человека, созданного для тяжелых и опасных участков производства (robota (чешск.) — каторга). А что отличает робота от механизмов и автоматических устройств? В отличие от последних, робот не только выполняет определенные действия, слепо следуя заложенному алгоритму, но и способен более тесно взаимодействовать с окружающей средой и человеком (оператором), адаптировать свои функции при изменении внешних сигналов и условий.

Принято считать, что первый действующий робот был сконструирован и реализован в 1928 году американским инженером Р. Уэнсли. Человекоподобный «железный интеллектуал» получил имя Герберт Телевокс. На лавры пионеров претендуют также ученый-биолог Макото Нисимура (Япония, 1929 г.) и английский военнослужащий Уильям Ричардс (1928 г.). Созданные изобретателями антропоморфные механизмы имели схожий функционал: способны были двигать конечностями и головой, выполнять голосовые и звуковые команды, отвечать на простые вопросы. Основным предназначением устройств была демонстрация научно-технических достижений. Очередной виток в развитии технологий позволил в скором времени создать и первых индустриальных роботов.

Поколение за поколением

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

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

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

И наконец, третье поколение — интеллектуальные роботы, которые способны:

  • Обобщать и анализировать информацию,
  • Совершенствоваться и самообучаться, накапливать навыки и знания,
  • Распознавать образы и изменения ситуации, и в соответствии с этим выстраивать работу своей исполнительной системы.

В основе искусственного интеллекта лежит алгоритмическое и программное обеспечение.

Общая классификация

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

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

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

Основы программирования роботов

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

В соответствии с решаемыми задачами управления выделяют четыре уровня такого специально созданного языка:

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

Робототехники стремятся свести программирование роботов к общению с ними на языках высшего уровня. В идеале оператор ставит задачу: «Произвести сборку двигателя внутреннего сгорания автомобиля» и ожидает от робота полного выполнения задания.

Языковые нюансы

В современной робототехнике программирование роботов развивается по двум векторам: роботоориентированное и проблемно ориентированное программирование.

Наиболее распространенные роботоориентированные языки — AML и AL. Первый разработан фирмой IBM только для управления интеллектуальными механизмами собственного производства. Второй — продукт специалистов Стэндфордского университета (США) — активно развивается и оказывает существенное влияние на формирование новых языков этого класса. Профессионал легко разглядит в языке характерные черты Паскаля и Алгола. Все языки, ориентированные на роботов, описывают алгоритм, как последовательность действий «умного» механизма. В связи с этим программа зачастую выходит очень громоздкой и неудобной в практической реализации.

При программировании роботов на проблемно ориентированных языках, в программе указывается последовательность не действий, а целей или промежуточных позиций объекта. Наиболее популярным в этом сегменте является язык AUTOPASS (IBM), в котором состояние рабочей среды представлено в виде графов (вершины — объекты, дуги — связи).

Обучение роботов

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

Весьма перспективной выглядит программа для программирования роботов, представленная разработчиками Лаборатории информационных технологий при Массачусетском технологическом институте (CSAIL MIT) на международной конференции промышленной автоматизации и робототехники ICRA-2020 (Сингапур). Созданная ими платформа C-LEARN обладает достоинствами обоих методов. Она предоставляет роботу библиотеку элементарных движений с заданными ограничениями (например, усилие хвата для манипулятора в соответствии с формой и жесткостью детали). В то же время, оператор демонстрирует роботу ключевые движения в трехмерном интерфейсе. Система, исходя из поставленной задачи, формирует последовательность операций для выполнения рабочего цикла. C-LEARN позволяет переписать существующую программу для робота другой конструкции. Оператору при этом не требуются углубленные знания в области программирования.

Робототехника и искусственный интеллект

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

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

В этом году на выставке роботов в Женеве самый совершенный андроид София заявила, что учится быть человеком. В октябре София впервые в истории искусственного интеллекта была признана гражданкой Саудовской Аравии с полноценными правами. Первая ласточка?

Основные тенденции робототехники

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

  • Управление беспилотной техникой (складскими погрузчиками и манипуляторами, дронами, трейлерами),
  • Проведение медицинских исследований и хирургических операций,
  • Освоение труднодоступных объектов и областей (дно океана, полярные области). Кроме того, программирование роботов позволяет им осуществлять и автономную работу.

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

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

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

Роботы Образование Творчество

  • Министерство образования и науки РФ
  • Дошкольное образование
    • Конструирование
      • Конспекты
      • Программы
      • Дневник педагога
      • Метод копилка
    • Робототехника
      • Программы
      • Конспекты
      • Метод копилка
    • Исследовательская деятельность
      • Программы
      • Конспекты
      • Метод копилка
    • Руководителям ДОУ
    • Кейс конспектов «ЖУРАВЛЁНОК»
  • Основное образование
    • На уроках физики
    • На уроках технологии
      • Современный урок технологии
        • Материалы к августовским совещаниям
        • Проектная деятельность на уроках
        • Методическая копилка
        • Анонс
        • Прошу слова!
        • Интервью
    • На уроках информатики
    • На других уроках
    • Начальное образование
      • Личный взгляд
      • Уроки
      • В центре внимания
  • Дополнительное образование
    • Техническое творчество
    • Водородный клуб
    • Художественное творчество
      • Декоративно-прикладное искусство
      • Изобразительное искусство
      • Шитье и вязание
      • Дизайн
    • Сборка роботов
    • Программы
    • Дневник педагога
    • Новости дополнительного образования
  • Инклюзивное образование
    • Реабилитационная робототехника
    • Дети с нарушением слуха (глухие, слабослышащие, позднооглохшие)
    • Дети с задержкой психического развития
    • Дети с нарушением речи (логопаты)
  • Соревновательная робототехника
    • РОБОФЕСТ
    • Всероссийская робототехническая олимпиада
    • Word Robot Olimpiad
    • ИКаР
    • ИКаРёнок
    • Документы в помощь педагогу-робототехнику
    • Документы к соревнованиям
    • «РОБОСПОРТ»
  • Дистанционные конкурсы

Российские команды завоевали два золота на Всемирной олимпиаде роботов

Внимание конкурс! До конца регистрации осталось две недели

Легопомощник для педагога. Рассказывают серебряные призеры Всемирной олимпиаде роботов

Всемирная Олимпиада роботов в Венгрии — лучшие моменты!

«Все профессии важны, все профессии нужны». Конспект урока по легоконструированию для дошкольников

Внимание конкурс! До конца регистрации осталось две недели

Российские команды завоевали два золота на Всемирной олимпиаде роботов

Опубликованы задания-сюрпризы Всемирной олимпиады роботов-2020

Робот-диджей и накал эмоций: фоторепортаж второго дня Всемирной олимпиады роботов

Первые итоги Всемирной олимпиады роботов: как выступили российские команды

Всемирная олимпиада роботов началась с вечера дружбы: 28 ярких моментов WRO

WRO-2020. День первый: знакомимся с Венгрией!

Важное объявление!

Знакомьтесь, Tinker Kit. Ответим на все вопросы в рамках обзорного семинара

Встретимся на УМСО!

Как открыть кружок робототехники? Расскажем на семинаре!

Битва роботов ждет только тебя!

ИКаР: Вы спрашивали, мы отвечаем!

Конструируем тележку из LEGO Duplo!

В мировой книге рекордов Гиннеса зафиксирован новый технический рекорд

Здравствуйте, дорогие читатели! Вновь я расскажу вам об одном из уроков по программированию и робототехнике, проведенных мной. Тема сегодняшнего занятия: «История языков программирования и робототехники».

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

Я начинаю с презентации «История языков программирования». Первым идёт слайд, на котором видна схема происхождения языков, то есть какой язык от какого произошел.

Далее я рассказываю о самых известных языках программирования: для чего они создавались, кто был создателем и применяются ли эти языки сегодня. Первым делом – это языки машинных команд, первые попытки автоматизации. Я объясняю, как ребятам повезло, ведь раньше писали огромные машинные коды, это было целое искусство, а теперь жизнь программиста невероятно упростилась.

Далее по лекции обзор языков, ориентированных на предметную область, такие как COBOL – язык программирования для бизнеса и Fortran – язык программирования для инженерных расчетов. Тут я слышу вопрос: «Какие задачи бизнеса может решать язык COBOL?». Этот вопрос достаточно емкий, но постараюсь ответить: «Говорить о том, что COBOL решает именно вопросы бизнеса – немного некорректно, т.к. этот язык служит для решения экономических задач, используется для обработки данных в банках, страховых компаниях, у него мощный аппарат работы с записями, но этот язык создавался более читаемым для людей, поэтому он достаточно громоздкий и сегодня почти не применяется».

Переходим дальше, Pascal этот язык был и остается учебным, его структурированность позволяет достаточно просто освоить программирование, поэтому достаточно логично начинать обучение именно с него.

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

Языки искусственного интеллекта. Один из представителей- это язык Prolog.

Создание объектно-ориентированного подхода и языков программирования с ООП.

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

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

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

По истории робототехники ребятам все было понятно, я быстро пробежался по материалу, в лекции были исторические примеры, а так же хроника 2000-х годов с яркими примерами. Такие как,

— 2002 год: создание первого серийного робота пылесоса.

— 2003 год: создание робота для развлечения QRIO.

— 2004 год: проект Роботы-помощники.

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

Цукерберг рекомендует:  Mac - PhpStorm интерпретатор на Mac
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих