Программирование на языках высокого уровня: различия между версиями
Patarakin (обсуждение | вклад) |
Patarakin (обсуждение | вклад) |
||
Строка 153: | Строка 153: | ||
; Языки функционального программирования | ; Языки функционального программирования | ||
{{#ask: [[Category:Язык программирования]] [[ | {{#ask: [[Category:Язык программирования]] [[Назначение языка::Язык общего назначения]] [[Programming paradigm::Функциональное программирование]] | ?Description }} | ||
==== Функции высшего порядка ==== | ==== Функции высшего порядка ==== |
Версия 07:35, 14 октября 2023
Планируемые результаты обучения (Знать, Уметь, Владеть) | Целью освоения дисциплины является формирование у студентов понимания общих принципов использования языков высокого уровня
Результаты обучения: обучающийся понимает и умеет использовать базовые конструкции языков программирования высокого уровня
|
---|---|
Содержание разделов курса |
|
Видео запись | |
Среды и средства, которые поддерживают учебный курс | Snap!, Python, PHP, Semantic MediaWiki, Lisp, Lua, R, JavaScript |
Книги, на которых основывается учебный курс | The Wiki Way: Quick Collaboration on the Web, Стили и методы программирования, Structure and Interpretation of Computer Programs, Simply Scheme: Introducing Computer Science |
Для магистрантов
- Категория:ИВО-231м - 2023
- Категория:ПБД221м и Категория:РМП221м - 2022
Содержание разделов дисциплины
Введение
Вычислительное мышление, как способность объединять свои способности с возможностями вычислительной техники и говорить с компьютерными агентами на различных языках. Зачем такое разнообразие языков программирования - они помогают думать и действовать лучше.
Особенности курса
Перечень языков визуально-блочного программирования, активных в настоящее время {{#ask: [[Category:Язык программирования]] [[Визуальная реализация::Блоки-Иконки]] [[Description::+]] [[ActiveNow::Project is active]] | ?Description | ?Адрес_сообщества }}
Description | Адрес сообщества | |
---|---|---|
AgentCubes | Учебный блочный язык программирования, ориентированный на создание трёхмерных игр, цифровых историй и симуляций | https://agentcubesonline.com/ |
Agentsheets | Первый язык блочного программирования для создания игр, симуляций и освоения вычислительного мышления. Разработан лабораторией масштабируемого дизайна | http://www.agentsheets.com/ |
AlgoBrix | Обучающий язык блочного программирования, поддерживающий программирование роботов и кубиков | http://www.algobrix.com |
Alice | Язык для создания трехмерных миров и обучения основам программирования. Alice представляет собой среду, в которой можно манипулировать 3D-объектами (двигать, вращать, менять цвет и т. д.) и создавать программы, генерирующие анимацию в виртуальных мирах. Она очень похожа на профессиональные современные IDE. Рабочая плоскость разбита на несколько окон: в одном в реальном времени отображается виртуальный мир; в другом присутствует дерево объектов, и для каждого из них предоставляется набор доступных свойств; центральной часть отведена, естественно, под редактор исходного кода; имеется и специальная область событий, позволяющая управлять всем происходящим. | http://www.alice.org/ |
App Inventor | App Inventor является бесплатным инструментом для программирования для создания мобильных приложений для Android. Он был разработан Массачусетским технологическим институтом и предоставляет простой интерфейс для создания мобильных приложений, который доступен для любого пользователя. Для программирования в App Inventor используется визуальный язык программирования, очень похожий на язык Scratch и StarLogo Nova.
| http://appinventor.mit.edu/ |
CreatiCode | Среда для создания 3х мерных игр средствами блочного программирования | https://www.creaticode.com/ |
DBSnap | Клон Snap! для работами с базами данных | https://ysilva.cs.luc.edu/dbsnap/app.html |
DRAKON | Дружелюбный русский алгоритмический язык, который обеспечивает наглядность (сокр. ДРАКОН) — визуальный алгоритмический язык программирования и моделирования | http://drakon.su/ |
GP | Блочный язык общего назначения, который может использоваться не только в образовательных целях | https://gpblocks.org/ |
Gamestar Mechanic | Среда и сообщество для создания игр. Gamestar Mechanic is an online game design platform built as a game about making games | https://gamestarmechanic.com/ |
MicroBlocks | Язык программирования - клон языка Scratch специально спроектированный для управления физическими объектами | https://microblocks.fun/ |
NetsBlox | Визуальный блочный язык программирования - производный от Scratch и Snap! - внимание уделено сетевым возможностям, интеграции с Google картами. Внутри среды NetsBlox участники проектов могут коллективно редактировать блоки программы так же как это происходит в Google-документах. | https://netsblox.org/ |
OctoStudio | Среда для разработки школьниками своих собственных игр на мобильных устройствах | https://www.media.mit.edu/projects/octostudio/overview/ |
Pocket Code | Мобильное приложение для создание детьми игр и цифровых историй | https://share.catrob.at/pocketcode |
SciSnap! | Расширения языка Snap! для использования в изучении математики | |
Scratch | Среда программирования, которая позволяет детям создавать собственные анимированные и интерактивные истории, игры и другие произведения. Этими произведениями можно обмениваться внутри международной среды, которая постепенно формируется в сети Интернет. Scratch — это учебный блочный язык программирования, позволяющий ученикам создавать игры, цифровые истории. Среда разработки дает возможность детям редактировать аудиофайлы и монтировать небольшие, но полноценные видеоролики. В новые версии языка создатели обещают добавить функционал для создания собственных мобильных приложений. | https://scratch.mit.edu |
ScratchJR | Scratch Junior – это визуальная среда программирования для детей от 5 до 7 лет. С ее помощью малыши могут создавать мультики, расставляя блоки действий в последовательном порядке. | https://scratchjr.org/ |
Snap! | Блочный язык программирования для преподавания алгоритмов и структур данных. Snap! - потомок языка Scratch. В отличие от Scratch Snap! поддерживает лямбда-исчисление, объекты первого класса, процедуры, рекурсия и множество других возможностей. С версии 4.0 Snap! получил современное название и был переписан на JavaScript. | http://snap.berkeley.edu/ |
Snap4arduino | Язык программирования для Arduino
| https://snap4arduino.rocks/ |
Squeak | Среда разработки живых интерактивных программ на основе SmallTalk | http://www.squeak.org/ |
StarLogo Nova |
| https://www.slnova.org |
Thunkable | Thunkable был создан в 2015 году на основе более известного конструктора приложений MIT App Inventor 2, как платформа для разработки на Android. Со временем инструмент обрел кросс-платформенность (iOS и Android) и стал платформой для разработки веб-приложений. Пользователи Thunkable могут добавлять кнопки, текст, изображения и даже карты, чтобы создать полнофункциональное приложение с такими функциями, как push-уведомления, датчики, геолокация, камера, Bluetooth, автономные возможности, и другое. Создание приложений в базовом аккаунте является бесплатным, но при этом можно создавать только общедоступные приложения. | https://thunkable.com/ |
ToonTalk | Мини-язык, в котором ученик может собирать алгоритмы из объектов (вещей) на рабочем поле. Полностью веб-приложение. | https://toontalk.github.io/ToonTalk/ |
ПервоЛого | ПервоЛого — универсальная проектная среда на базе языка Лого для начального и дошкольного образования. В ПервоЛого можно создавать проекты, даже не умея читать и считать — как очень простые, состоящие из картинки и текста или звука, так и весьма сложные, включающие в себя различные запрограммированные объекты, роль которых исполняет черепашка. |
Авторы и книги, которые оказали влияние на курс
Языки высокого уровня. Типология языков
- Используя WebGrid соберите поле своих собственных представлений о языках высокого уровня
Lisp | Prolog | C | Python | Snap!(Scratch) |
---|---|---|---|---|
(progn(setq x"Здравствуй, учебный курс!")x)
|
:-Print('Здравствуй, учебный курс!').
|
#include <stdio.h>
int main(void)
{printf("Здравствуй, учебный курс!");
return 0;}
|
print("Здравствуй, учебный курс!")
|
когда спрайт нажат сказать ["Здравствуй, учебный курс!"] |
Лента времени обучающих языков (от Lisp & Logo)
Паттерны поведения компьютерных агентов и их возможная реализация
Description of problem | Solution | |
---|---|---|
Генерировать новых агентов | Агент порождает поток других агентов - например, в экологических моделях рождение используется для создания потомков, в играх из пистолета вылетают пули, которые он порождает, в историях Scratch капли дождя клонируются и падают из тучи на землю. | Можно использовать породы или клоны. Например, в NetLogo:
|
Накапливать энергию | Агент живёт в среде, перемещается, выполняет задания и накапливает энергию или собирает очки |
|
Перевозить другого агента на себе | Транспортировка представляет собой ситуацию, когда один агент перевозит на себе другого агента. Например, черепаха в Frogger несёт лягушку, пересекая реку. В экологических симуляциях процесс транспортировки можно использовать, например, для перевозки пыльцы пчёлами. |
|
Перемещаться случайным образом | Агент или агенты перемещаются по экрану случайным образом - стандартная для многих игр и симуляций ситуация, которую надо уметь воспроизводить - термиты, птицы и рыбы при формировании стай изначально перемещаются случайным образом. | Агент поворачивается в направление, которое выбирается случайным образом и делает ход в этом направлении. |
Поглощать агентов |
| Прятать агентов или просто их убивать или умирать самому |
Подчиняться клавишам клавиатуры | Реагировать на клавиши клавиатуры Движение клавиатуры: нажатия кнопок клавиатуры управляют движением агента. И здесь могут быть паттерны типа Прыгать - как писал Пейперт в этой статье писал про Марио и как воспроизвести поведение Марио | Использовать блоки управления в сочетании с блоками движения |
Поиск восхождением к вершине | Поиск восхождением к вершине - алгоритм поиска в компьютерных науках, когда агент просматривает значения переменных на ближайших полях и на поле с максимальным значением переменной. Использование алгоритма поиск восхождением к вершине можно наблюдать в таких играх как Sims или Pac-Man, когда призраки преследуют Pacman, следуя наивысшему значению запаха Pac-man, который распространяется по всему полю см. http://ccl.northwestern.edu/netlogo/models/Pac-Man | Использовать встроенные команды NetLogo
|
Превращаться в другого агента | Превращение - один агент превращается в другого агента. Возможный вариант - агент одной породы превращается в агента другой породы. | В примере на Scratch - cпрайт клонируется и содержит в себе разные породы - демонов и драконов. При столкновении с агентом другой породы агент может изменять собственную породу и становиться другим. Например, из породы демонов переходить в породу драконов. В NetLogo можно просто поменять принадлежность к породе и соответственно свойства агента. |
Преследовать другого агента | Один агент преследует другого агента - поворачивается в его сторону или поворачивается в том же направлении, куда движется другой агент | Используются команды повернуться к другому агенту |
Распространяться | Диффузия: паттерн распространения, когда вы можете распространять определённое количество агента на других агентов, расположенных по близости за счёт процесса диффузии. Например, в модели муравьёв в NetLogo муравьи выделяют вещества феромоны, которые диффундируют на ближайшие поля игрового поля. | В некоторых средах конструирования возможность диффузии заложена изначально. Например, в NetLogo стандартная команда к точкам - пятнам на экране diffuse |
Сталкиваться |
| В ряде среде есть специальный блок Collision - что делать агенту в случае столкновения с другим агентом. Для Scratch решение собирается из блоков сенсоров - если я касаюсь другого агента (указать какого именно), то ... |
Тащить | Тащить - паттерн "тащить" противоположен по значению паттерну толкать - агент может тащить за собой другого агента или агентов. Например, поезд тащит за собой вагоны, лошадь тащит за собой сани, буксир тащит за собой баржи или плот. | |
Толкать | Паттерн "толкать" — это паттерн, который мы видим во многих играх. Агент должен толкать ящики или мешки с золотом. Когда игрок толкает коробку или мешок, эти объекты движутся в том направлении (вверх, вниз, вправо или влево), в котором их толкнули. | Объект или Агент, над которым совершается действие, получает сигнал от агента субъекта деятельности, поворачивается в ту же сторону, куда смотрит толкающий агент и двигается в эту сторону. |
Пример реализации простых паттернов поведения агентов в среде Scratch или в среде Snap!
Работа с изображением
https://snap.berkeley.edu/snap/snap.html#present:Username=patarakin&ProjectName=image_data
Загрузка CSV данных
Работа с изображением как с данными
Стандартные типы данных
Для Snap!
Концепции программирования. Распространённые языковые конструкции
Контейнеры для хранения данных
Функциональное программирование
- Языки функционального программирования
Description | |
---|---|
Clojure | Clojure является функциональным языком программирования с поддержкой функций в качестве объектов первого класса (first class objects) и неизменяемыми (за исключением специальных случаев) данными, включая поддержку "ленивых" коллекций данных. Современный диалект Лиспа, язык программирования общего назначения с поддержкой разработки в интерактивном режиме, поощряющий функциональное программирование и упрощающий поддержку многопоточности. Clojure работает на платформах JVM и CLR. Clojure отличает философия «код как данные» (гомоиконность) и развитая система лисп-макросов. |
Fennel | Fennel is a programming language that brings together the speed, simplicity, and reach of Lua with the flexibility of a lisp syntax and macro system. |
GP | Блочный язык общего назначения, который может использоваться не только в образовательных целях |
JavaScript | JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам. Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса. |
Lisp | LISP (от англ. LISt Processing language — «язык обработки списков», современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются в виде списков. |
Scala | Scala — мультипарадигмальный язык программирования, спроектированный кратким и типобезопасным для простого и быстрого создания компонентного программного обеспечения, сочетающий возможности функционального и объектно-ориентированного программирования. |
Scheme | Scheme — функциональный язык программирования, один из трёх наиболее популярных диалектов Лиспа. Обладает минималистичным дизайном, содержит минимум примитивных конструкций и позволяет выразить всё необходимое путём надстройки над ними. Например, использует всего два механизма организации циклов — хвостовую рекурсию и итеративный подход (в котором используются временные переменные для сохранения промежуточного результата). |
Swift | Язык программирования Swift используют, чтобы писать приложения и программы для устройств Apple: айфонов, айпадов, умных часов, телевизоров, макбуков и стационарных компьютеров с macOS. В iOS-разработке этот язык считается стандартом. |
РЕФАЛ | РЕФАЛ (Рекурсивных функций алгоритмический) — один из старейших функциональных языков программирования, ориентированный на символьные вычисления: обработку символьных строк (например, алгебраические выкладки); перевод с одного языка (искусственного или естественного) на другой; решение проблем, связанных с искусственным интеллектом. Соединяет в себе математическую простоту с практической направленностью на написание больших и сложных программ. |
Функции высшего порядка
Объектно-ориентированное программирование
- Организовать обмен сообщениями между агентами
- Генерировать новых агентов и другие паттерны вычислительного мышления
- Использовать диаграмму классов
Языки визуального программирования
Визуальная реализация :Блоки-Иконки
AgentCubes, Agentsheets, AlgoBlock, AlgoBrix, Alice, App Inventor, Beetle Blocks, Blockly, Boxer, CreatiCode, DBSnap, DRAKON, Etoys, GP, GameBlox, Gamefroot, Gamestar Mechanic, Hopscotch, Kodu, LogoBlocks, Looking Glass, MakeCode, Mama, MicroBlocks, Move the Turtle, NetsBlox, OctoStudio, Piktomir, Pocket Code, Robo Pro Light, SciSnap!, Scratch, ScratchJR, Snap!, Snap4arduino, Sophie, Squeak, Stagecast Creator, StarLogo Nova, Tangible Programming Bricks, The Incredible Machine, Thunkable, ToonTalk, Битва Големов, ПервоЛого
Примеры создания моделей в среде StarLogo Nova
Возможность встраивать модели StarLogo Nova + NetLogo Web
Алгоритмы поиска и сортировки в разных языках
Scratch
Description | |
---|---|
Сортировка пузырьком | Сортиро́вка простыми обменами, сортировка пузырько́м (англ. bubble sort) — простой алгоритм сортировки. Для понимания и реализации этот алгоритм — простейший, но эффективен он лишь для небольших массивов. Метод сортировки обменами лежит в основе некоторых более совершенных алгоритмов, таких как шейкерная сортировка, пирамидальная сортировка и быстрая сортировка. |
Модули и библиотеки
Описание | Диаграмма, в которой демонстрируются основные принципы модульного программирования |
---|---|
Область знаний | Информатика, Управление |
Среды для создания диаграммы: | Graphviz |
Как узнать какие модули (Extension) уже есть в системе
Где посмотреть всё разнообразие доступных расширений
- https://www.mediawiki.org/wiki/Category:All_extensions
- внешние, но родные расширения -Lhttps://www.mediawiki.org/wiki/Extension:Collaboration_Diagram
- как используется на площадке http://letopisi.org/
Пространство Модулей + Lua
- см. Модуль:Babanas
Модули в Scratch
- Цветные ящики являются модулями, из которых строится среда Scratch
- StarLogo Nova + Snap!
Собственные блоки и ящики блоков в Snap!
Работа с данными. Среды выращивания данных и анализа данных.
См. Семинары МГПУ о данных в образовании
Description | Examples | |
---|---|---|
GoogleSchool 01(dataset) | Датасет собран из лог-файла действий учителей внутри школы | В статье Патаракин Е.Д., Ярмахов Б.Б. Анализ связей между сотрудниками школы на основе их взаимодействия в домене Google Apps для образования // ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ И ОБЩЕСТВО. 2016. Vol. 19, № 2. P. 585–599. |
GoogleSchool 02(dataset) | Датасет собран из лог-файла действий учителей внутри школы в среде GoogleApps - совместные действия учителей над документами различного типа превращаются в социальный граф. | В статье Патаракин Е.Д., Ярмахов Б.Б. Анализ связей между сотрудниками школы на основе их взаимодействия в домене Google Apps для образования // ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ И ОБЩЕСТВО. 2016. Vol. 19, № 2. P. 585–599. |
Letopisi 2006 (dataset) | Лог-файл действий участников проекта Letopisi в 2006 году | Patarakin E.D. Wikigrams-Based Social Inquiry // Digital Tools and Solutions for Inquiry-Based STEM Learning. IGI Global, 2017. Vol. 1. P. 112–138. |
Preschool Digital Scopus | 1709 публикаций (стандартный набор полей Скопус) - Для выделения данных из базы Scopus использовалась следующая формула:
| В статье "Связь цифрового компонента обучения и развития детей дошкольного и школьного возраста: обзор исследований и международных образовательных практик" В вики тестируем анализ данных при помощи разных пакетов. |
Scopus Games (dataset) | Датасет по публикациям о компьютерных играх, собранный в Scopus | ВКР Райкова Александра Дмитриевна Развитие навыков вычислительного мышления у детей дошкольного и младшего школьного возраста при помощи видеоигр https://youtu.be/2-M1W-wnT-U |
Библиосет: публикационная активность ВВГУ | Данные о публикационной активности Владивостокского государственного университета https://vvsu.ru/ выгружены из Scopus в формате RIS. | Научная статья |
Взаимное копирование МЭШ (датасет) | При изучении записей действий над учебными сценариями в МЭШ из всей таблицы действий учителей над объектами-сценариями были выделены только действия взаимного копирования. В результате был выделен граф совместных копирований состоящий из 145 компонент. При этом узлы и связи распределены крайне неравномерно. Главный компонент содержит 1174 узлов и 17928 связей, а на остальные 144 компоненты приходится всего 378 узлов и 3421 связи. | Патаракин Е.Д., Буров В.В. Незримый колледж МЭШ // Вестник Мгпу. Серия: Информатика И Информатизация Образования. 2022. № 2 (60). 38-52 https://www.elibrary.ru/item.asp?id=49058657 |
Взаимное копирование МЭШ (датасет)
Описание датасета | При изучении записей действий над учебными сценариями в МЭШ из всей таблицы действий учителей над объектами-сценариями были выделены только действия взаимного копирования. В результате был выделен граф совместных копирований состоящий из 145 компонент. При этом узлы и связи распределены крайне неравномерно. Главный компонент содержит 1174 узлов и 17928 связей, а на остальные 144 компоненты приходится всего 378 узлов и 3421 связи. |
---|---|
Описание полей |
|
Форматы данных | CSV |
Область знаний | Математика, Педагогика, Психология, Управление |
Веб-сайт - ссылка на датасет | http://www.uic.unn.ru/pustyn/data-sets/mesh/giant recicrop component.csv |
Примеры использования датасета | Патаракин Е.Д., Буров В.В. Незримый колледж МЭШ // Вестник Мгпу. Серия: Информатика И Информатизация Образования. 2022. № 2 (60). 38-52 https://www.elibrary.ru/item.asp?id=49058657 |
Год создания датасета | 2022 |
Что делают в МЭШ учителя иностранного языка
Описание - в статье Незримый колледж МЭШ
- Главный компонент содержит 1174 узла и 17928 связей.
Датасет в вики
Копирующий | Копируемый | Предмет | Время |
---|---|---|---|
1106 | 901 | Химия | 2016-12-01T16:40:44Z |
1480 | 234 | Химия | 2017-06-23T09:55:48Z |
234 | 1480 | Химия | 2017-10-12T06:08:15Z |
650 | 927 | Химия | 2018-02-21T20:15:05Z |
1362 | 901 | Химия | 2018-06-27T20:39:01Z |
390 | 881 | Химия | 2018-08-29T22:36:47Z |
647 | 604 | Химия | 2019-02-01T16:04:44Z |
430 | 585 | Химия | 2019-03-28T06:24:56Z |
927 | 650 | Химия | 2020-05-15T05:37:58Z |
Представление агентов - учителей в Snap!
Snap! + данные
- Примеры проектов и отдельных скриптов
- Пример, как можно обратиться из Snap! к внешним датасетам и совершить действия над данными: выделить столбец, сложить данные в столбце, отсортировать данные по значению, построить гистограмму
- https://snap.berkeley.edu/project?username=patarakin&projectname=Snap_Libraries - использование библиотек для работы с данными
Работа с медиа. Программирование игр и программирование внутри игр
Описания игр
Критерии оценки по дисциплине
Образовательный результат | Тема | Задание | Пример
|
---|---|---|---|
Навыки совместной деятельности в среде Semantic MediaWiki | Введение в курс, Языки высокого уровня. | Зарегистрироваться на площадке, отметить странницу категориями, заполнить поля по форме | Категория:UserMGPU Категория:ПБД221м Категория:РМП221м |
Выбирать способы программирования | Языки высокого уровня. Типология языков | Создайте собственные концепты к статьям в категории Языки программирования | |
Использовать языки визуального программирования для моделирования базовых паттернов | Визуальное программирование | Разместить в вики проект, выполненный в среде Scratch или Snap! или StarLogo Nova | Flocking (model), Как Организовать обмен сообщениями между агентами, Генерировать новых агентов |
Создавать диаграммы классов | Объектно-ориентированное программирование | Разместите в вики собственную диаграмму класса см. Использование ИИ для создания диаграмм | Диаграмма класса, Языки (диаграмма класса), Robot |
Обращаться к объектам по их свойствам | Объектно-ориентированное программирование | Создайте примеры запросов к статьям вики с выводом результатов в виде географических карт, гистограмм и таблиц | Category:Diagrams, Языки программирования Time-line |
Обращаться к агентам на основе свойств | Объектно-ориентированное программирование | Разместите в вики пример проекта Snap!, в котором происходит обращение к клонам спрайта | Пример Flocking (model) |
Использовать готовые модули и библиотеки | Модули и библиотеки | Разместите в вики проект Scratch или Snap! в которых используются библиотеки | Периодическая система химических элементов |
Обрабатывать данные, загружать данные, сохранять данные | Работа с данными | Разместите в вики проект Scratch или Snap!, в которых происходит обработка данных | Периодическая система химических элементов |