Виды программирования: Какой язык программирования учить прямо сейчас: 9 самых востребованных

какие бывают, их навыки, зарплата и время обучения

Программист Данил Головин работал в больших и маленьких командах, на фрилансе и в штате, совмещал разные функции. На его счету — работа над проектами Panasonic, Yves Rocher, «Билайн». Вместе с ним мы составили краткий гид по IT-специальностям.

Программист C++, Java, C Sharp, Go

Сложность задач: высокая, нужно постоянно дополнительно обучаться

Зарплата: от 25 000 ₽ до 580 000 ₽

Сколько в среднем учиться: 8,5–24 месяца

Программирует сайты, мобильные приложения, утилиты, микроконтроллеры, серверы. На С++, например, могут делать нейросети, а на Go — работать с большими данными.

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

Программист JavaScript и PHP

Сложность задач: средняя, много типовых проектов

Зарплата: средняя — 158 000 ₽

Сколько в среднем учиться: 7–14 месяцев

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

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

Frontend-разработчик

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

Зарплата: от 25 000 ₽ до 350 000 ₽

Сколько в среднем учиться: 5–12 месяцев

Фронтендер создает визуальную часть сайта — ту, что видит пользователь. Верстает, анимирует страницы плавно появляющимися элементами, всплывающими формами, встраивает системы контроля. В работе использует JavaScript-библиотеку React.

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

Backend-разработчик

Сложность задач: высокая, как и уровень ответственности

Зарплата: от 40 000 ₽ до 500 000 ₽

Сколько в среднем учиться: 8–16 месяцев

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

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

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

Программист fullstack

Сложность задач: высокая, отвечает за весь продукт

Зарплата: от 25 000 ₽ до 550 000 ₽

Сколько в среднем учиться: 12–15 месяцев

Такой специалист может сам собрать сайт с нуля: создать его визуальную часть и написать код для внутренней. Работает в небольших компаниях на маленьких проектах. В среднем зарабатывает 120 000 ₽. Может заработать больше, если берет проекты на фрилансе. Чем больше взял, тем больше заработал.

Тестировщик

Сложность задач: простая работа, но нужно быть внимательным

Зарплата: от 20 000 ₽ до 180 000 ₽

Сколько в среднем учиться: 4–15 месяцев

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

Хорошо, если тестировщик умеет базово программировать, тогда ему будет легче найти и описать ошибку.

Менеджер проекта

Сложность задач: нужно много общаться внутри команды и с внешними заказчиками

Зарплата: от 150 000 ₽ до 350 000 ₽

Сколько в среднем учиться: 12 месяцев

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

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

 

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

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

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

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

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

Рисунок 1. Классификация программ-трансляторов языков программирования.

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

  1. языки программирования «высокого» уровня
  2. языки программирования «низкого» уровня.

К языкам программирования «низкого» уровня относятся языки программирования в которых каждому оператору соответствует не более одной машинной команды.

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

Языки программирования «высокого» уровня позволяют заменять один оператор несколькими машинными командами. Это позволяет увеличивать производительность труда программистов. Кроме того, языки «высокого» уровня позволяют писать программы, которые могут выполняться на различных микропроцессорах. (Естественно, что при этом необходимо использовать программы — трасляторы для соответствующего процессора.)

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

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

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

  1. Язык программирования расчитывается на все случаи жизни, поэтому в большинстве случаев человек мог бы написать программу короче (исключив не нужные в данном конкретном случае проверки или защиты).
  2. Программист не видит к чему приводит использование тех или других операторов языка программирования, поэтому может выбирать операторы, не оптимальные как с точки зрения длины машинного кода программы, так и с точки зрения быстродействия программы.
  3. Программист не использует подпрограммы там, где они могли бы сократить объЈм программы, так как на языке программирования высокого уровня это всего один или несколько операторов.

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

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

Компиляторы бывают оценочные и профессиональные.

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

компиляторы с единой трансляцией.

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

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

Оценочные компиляторы обычно предлагаются бесплатно фирмами — производителями микроконтроллеров. Только фирма Intel предложила в своЈ время профессиональный пакет разработки программ — язык программирования PLM-51 в состав которого входит профессиональный язык программирования ASM-51.

Профессиональные компиляторы разрабатываются и продаются отдельными фирмами. Для микроконтроллеров семейства MCS-51 получили известность продукты таких фирм как FRANCLIN, IAR, KEIL. В состав современных средств написания и отладки программ для микроконтроллеров обычно входят эмуляторы процессоров или отладочные платы, текстовый редактор, компиляторы языка высокого уровня (чаще всего «C») и ассемблера, редактор связей и загрузчик программы в отладочную плату.

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


[Назад] [Содержание] [Вперёд]

Какие существуют типы языков программирования?

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

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

Что такое перевод?

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

Итак, переводчик преобразует высокоуровневый код, который вы создаете на языке программирования, в машинный код.

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

Что такое компилятор?

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

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

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

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

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

  • C
  • C++
  • Go
  • Ada
  • Fortran
  • COBOL
  • Lisp
  • Objective-C
  • Swift

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

Компилируемые языки также очень быстро выполняются после компиляции.

Кто такой переводчик?

Интерпретатор — это программа, которая транслирует и выполняет по одной строке кода за раз. Этот процесс повторяется до тех пор, пока интерпретатор не достигнет последней строки кода в данной программе или сценарии.

Как видно из диаграммы выше, интерпретатор получает два входа. Во-первых, он занимает весь исходный код (программу). Затем он читает первую строку программы (в качестве входных данных), переводит и выполняет ее. Если эта строка выполняется правильно, она переходит к следующей строке в программе или сценарии.

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

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

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

  • Python
  • JavaScript
  • Perl
  • MATLAB
  • BASIC

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

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

Что такое гибридный перевод?

Гибридный перевод использует компилятор и интерпретатор. Гибридный перевод компилирует исходный код высокого уровня в форму более низкого уровня, такую ​​как байт-код. Затем он использует интерпретатор для запуска этого байт-кода.

Гибридный перевод может отличаться от одного языка программирования к другому, но будет использовать эту общую структуру. Одним из наиболее популярных языков программирования, использующих гибридный перевод, является Java. Компилятор Java переводит исходный код в байт-код виртуальной машины Java (JVM). Затем интерпретатор переводит байт-код JVM в машинный код.

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

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

  • Java
  • C#
  • Visual Basic
  • ERLANG
  • F#

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

Ценность знания различных методов перевода

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

Каждый подход к переводу имеет свои достоинства. Все ведущие языки программирования, такие как C++, Python и Java, используют разные методы перевода. Наряду с парадигмой языка его метод перевода является одной из самых важных черт, о которых вам следует знать.

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

«ВИДЫ ПРОГРАММИРОВАНИЯ

Компьютеры в школе

Школа компьютерных наук — Бирмингемский университет


Этот файл http://www.cs.bham.ac.uk/research/projects/poplog/examples/kinds-of-programming.html

В течение некоторого времени я был обеспокоен тем, что дискуссии о «Вычисления в Школа» список рассылки, а также в прессе, в блогах, на радио и телевидении передачи о том, чему следует учить в школах, основаны на представление о вычислениях слишком узкое, даже если все разные регулярно высказанные мнения объединяются!

Эта веб-страница предлагает список важных типов программирования, которые следует преподавали в школах, но не давали конкретных рекомендаций относительно того, какие обучаться в каком возрасте кому, или кем, или почему. Это модифицированная версия список задач по программированию на веб-странице «Thinkyprogramming and other» виды», который включает в себя растущую коллекцию примеров, особенно «думающих» примеры, доступные здесь:
http://www. cs.bham.ac.uk/research/projects/poplog/examples/

Задачи программирования

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

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

Типы задач по программированию

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

  • Числовое программирование:
  • Ухабистое программирование:
  • Программирование гаджетов
  • Художественное программирование
  • Программирование презентаций
  • Lifey Программирование
  • Моделирование Программирование
  • Исследовательское программирование
  • Утилита (или «Appy») Программирование:
  • Игровое программирование:
  • Teachy (учебник) Программирование:
  • Thinky Программирование:

  • Числовое программирование:
    Самый старый тип компьютерной программы — сложение, умножение, усреднение и выполнение статистических операций над одним или несколькими числа, или выполнение матричных и векторных операций, или решение уравнений операции, а также рисование графиков числовых функций.
  • Ухабистое программирование:
    В эту категорию попадают многие задания, предназначенные для очень маленьких учащихся. Они связаны с контролем движений и изменением внешний вид реальных или смоделированных мобильных устройств, таких как LOGO физическая или графическая черепаха или интерактивная видеоигра программы, включающие удары, стрельбу, поедание, избегание и т. д., часто с сопровождающими их свистами, хлопками, ударами и прочими развлекательными шумы. Задачи и среды программирования, поддерживающие их может варьироваться от очень элементарного до профессионального.
    Фраза «неровная программа» слишком специфична для этого общего категории, так как я не хочу подразумевать, что все экземпляры включают объекты, движущиеся вокруг и соприкасающиеся с другими объектами. Альтернативами могут быть «веселая программа», «веселая программа», «развлекательная программа». программа». Предложения приветствуются.
  • Программирование гаджетов
    Это задачи программирования, связанные с управлением устройствами вне компьютера (например, Arduino). Некоторые гаджеты просто реагируют для вывода с компьютера, например. гаджет, который мигает огнями или шумит под управлением компьютера. Другие посылают сигналы к компьютеру от датчиков в гаджете или кнопок, или ручек, или рычаги на гаджете, которыми пользователь может манипулировать. Некоторые гаджеты могут быть используется для управления другими машинами, т.е. цифровой термостат, который управляет нагревателем и управляется компьютером.

    Веб-сайт, иллюстрирующий эту категорию: http://www.netmf.com/gadgeteer/

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

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

    Художественные программы могут пересекаться с некоторыми типами программ Thinky, см. ниже. в зависимости от того, какая часть дизайна или создания выполняется программу, а не пользователя программы (как при создании презентация PowerPoint). Ричард Докинз и другие показали, как эволюционные вычисления, управляемые пользовательскими предпочтениями, могут создать интересные «художественные» результаты, например. картинки или музыка.

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

    Некоторые из них просто принимают очень четкие инструкции и подчиняются им. инструкции, например средство форматирования текста WYSIWYG, где пользователь постоянно собирая текст, указывая интервалы, отступы, шрифт стиль и размер, где должны быть разрывы строк, а также фактическое содержание. Другие позволяют пользователю указать на языке «разметки», что ему нужно. сделать на каком-то уровне абстракции, оставив это на усмотрение программы чтобы решить, как этого добиться, например. куда разрывать строки производить текст, выровненный по левому и правому краю, или какие числа присваивать пронумерованные абзацы или рисунки. Простые примеры включают html, nroff, и другие, которые широко использовались в прошлые десятилетия, в то время как более сложные примеры, некоторые из которых могут быть расширены с помощью сложных определяемых пользователем макросы, включая Troff, LaTeX, PHP, JavaScript и другие используемые системы в веб-дизайне.

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

  • Lifey Программирование
    Это программы, написанные с использованием двумерных шаблонов в двумерной сетке, которые при запуске генерировать новые шаблоны. Самый известный пример такого рода вещью является ‘Игра Жизни’ Конвея. есть отличный обзор, а также превосходный интерактивный Java-апплет здесь http://www.bitstorm.org/gameoflife/
    Другое (запустить апплет с помощью кнопки вверху слева с надписью «Наслаждайтесь жизнью») это: http://www.ibiblio.org/lifepatterns предоставляет несколько дополнительных ссылок.
    См. также: Некоторые заметки о программе «Программирование жизни». язык’
  • Моделирование Программирование
    Это попытки смоделировать структуру или поведение некоторых ранее существовавшая система — т.е. Солнечная система, поиск пищи муравьями, рой насекомых, вода выливается из кувшина, рушатся замки из песка, «волны давления» трафика на автомагистрали, транспортный поток в оживленном городе, финансовые операции и многое другое. Некоторые из заданий для учащиеся могут быть довольно элементарными, особенно если они основаны на хорошо продуманные библиотеки. Другие могут облагать налогом даже продвинутых исследователей, например моделирование погодных условий.
    Большая часть современной науки в различных дисциплинах интенсивно использует программ моделирования, поэтому научиться строить различные типы программы моделирования могут быть полезны для многих профессий в науке, инжиниринг и управление.

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

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

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

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

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

    Чтобы исследовать идеи о числах, вы можете попробовать представить, что компьютер может манипулировать списками символов, например. [a a a], но имеет нет арифметических возможностей, а затем попробуйте запрограммировать его на понимать числа и арифметические действия. Это может помочь учащиеся приобретут новое глубокое понимание природы числа. Смотрите также http://www.cs.bham.ac.uk/research/projects/poplog/teach/teachnums

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

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

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

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

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

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

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

  • Игровое программирование:
    Это программы, которые либо играют в игру с пользователем (например, в шахматы, Го-Моку, Ним) или поддерживать игру, в которую играют два или более игроков. (например, управление игрой в шахматы или монополией) или предоставлять пользователям какое-то задание по решению головоломок или проверка какого-либо навыка, например. Пасьянс или тетрис. Эта категория может пересекаться с другими, особенно «думающее» программирование, где компьютеру приходится конкурировать с пользователем, строя планы, выбирая ходы, решая задачи.
  • Teachy (учебник) Программирование:
    Это программы, которые учат пользователя чему-то, что может быть фактический, напр. о географическом регионе или периоде истории, или какую-либо отрасль химии или биологии, или которые развивают практическое или интеллектуальные навыки, такие как набор текста, правописание, арифметические действия, заниматься логикой, говорить грамматически, понимать геометрию и т. д. Это также может пересекаться с другими категориями, особенно игровыми. программирование (поскольку многие игры образовательные) и «думающие» программирование с 9 лет0160 интеллектуальная обучающая программа не просто идет через список задач, представленных учащемуся, но может также потребоваться отвечать на вопросы учащегося или выбирать или конструировать задачи, предназначенные для соответствия достижениям и недоразумениям обнаруживаются у учащегося. Например, шахматная программа, которая автоматически регулирует свой уровень игры, чтобы бросить вызов соперника и обучать оппонента (чего не может сделать ни одна текущая программа, насколько я знаю) была бы думающая программа!
  • Thinky Программирование:
    Цель программы Thinkky обычно не состоит в том, чтобы создать рабочий система, поведение которой полезно или интересно, или помогает программист понимает какую-то науку или математику, но научить учащихся способам заставить машины выполнять некоторые из вещи, которые делают люди и другие животные, когда они воспринимают вещи, учатся вещи, решать проблемы, достигать целей, строить и выполнять планы, решать головоломки, общаться предложениями, сочинять стихи или музыку или заниматься в соревновательных играх, где победа не зависит от того, быстрым или физически квалифицированным, но требует использования интеллектуальных силы.

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

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

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

    Примеры «мыслительных» задач программирования разной сложности: доступно на http://tinyurl.com/thinky-ex. Некоторые особенно просты, потому что они предназначены для абсолютные новички. Другие примеры когда-то считались подходящими для докторских проектов на заре ИИ, хотя и с современным ИИ инструменты программирования программы гораздо проще создавать, чем они были изначально.

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


Комментарий

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

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

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

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


Предложения по улучшению приветствуются.

Я благодарен за дискуссии со Стюартом Рэем по этим темам. См. его связанную статью http://www.stuartwray.net/philosophy-of-knowledge.pdf

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

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *