SlideShare a Scribd company logo
Неотрефлексированный
сдвиг парадигмы:
от поколений языков программирования
высокого уровня к метапрограммированию
и высокопродуктивным DSL
Незнанов Алексей Андреевич,
доцент департамента анализа данных и искусственного интеллекта факультета
компьютерных наук НИУ ВШЭ,
старший научный сотрудник международной лаборатории интеллектуальных
систем и структурного анализа ФКН НИУ ВШЭ
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 1
Базовые понятия
✓ Система, интерфейс и протокол
✓ Алгоритм и его исполнитель, модель вычислений
✓ Программа и исходный код
✓ Язык программирования
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 2
О контринтуитивности
• Программирование часто контринтуитивно
• При обучении программированию многие концепции,
для которых мозг автоматом подбирает аналогии,
никак не связаны друг с другом
• Аналогия часто не просто лжива – она антисистемна!
• Очень помогает навык рационального мышления
• LessWrong на русском (http://lesswrong.ru)
• Особенно это помогает при тестировании ☺
• 97 вещей, которые должен знать каждый программист
(http://copist.ru/books/97things-dev)
• Себеста Р. Основные концепции языков программирования. – М. : Вильямс,
2001. – 672 с.
• Макконнелл С. Совершенный код. Практическое руководство по разработке
программного обеспечения. – Спб. : Питер, 2005. – 896 с.
• Хант Э., Томас Д. Программист-прагматик. – Лори, 2004. – 270 с.
• Фаулер М. Рефакторинг. Улучшение существующего кода. – М.: Символ-Плюс,
2005. – 432 с.
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 3
О системном подходе
Система [system] – такое объединение множества элементов
некоторыми связями, у которого появляются свойства, отсутствующие
у любого элемента по отдельности
• Системный подход – подход к моделированию, акцентирующий
внимание на выявлении систем и их взаимодействий
• Основа развития современных технологий!
• Иерархия систем
• Надсистемы и подсистемы
• Синергия и эмерджентность!
• Система → интегративные свойства и системные свойства
• Система → состав и структура
• Система → поведение и взаимодействие с другими системами
• Система → иерархия (стратификация и классификация подсистем и
надсистем)
• Система → антагонистические свойства (диалектика)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 4
Системы и принцип абстракции
• Абстракция [abstraction] –
• Разграничение внешних (существенных с точки зрения надсистем) свойств
системы и внутренних деталей её строения и функционирования
• Принцип моделирования, заключающийся в игнорировании аспектов
проблемы, не оказывающих существенного влияния на её решение
Иерархия систем => Иерархия абстракций
• Именно принцип абстракции позволяет использовать
специализацию и модуляризацию
• См. интерфейс (API – Application Programming Interface) и протокол
• Закон дырявых абстракций (Джоэл Сполски):
все нетривиальные абстракции дырявы
• Следствие – при ошибке в интерфейсе для её исправления может
потребоваться знание как минимум трёх смежных уровней абстракций
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 5
Интерфейс
Интерфейс [interface] (inter – внешнее, между + face – лицо,
фасад, если inter – между, то смысл хорошо передаёт юмористический
перевод – «междумордие»):
• В широком смысле – формальное или неформальное
определение связи в тройке «сущность1 – связь – сущность2»
[entity1 – relationship – entity2]
• Часть системы, открытая для других систем, внешнее
восприятие системы
• Система связей с унифицированными сигналами и/или
аппаратурой, предназначенная для обмена
материей/информацией между техническими устройствами
и/или людьми
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 6
Системы и интерфейсы (иллюстрация)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 7
Обычно из контекста ясно, о каком значении термина идёт речь
Система 2
Система 1
Интерфейс
системы 1
Интерфейс
системы 2
Внешняя часть
системы
(неотъемлемая! )
Система 2
Система 1
Интерфейс
взаимодействия
Система связей +
протокол
Случай 1: Случай 2:
Протокол
• Протокол (протокол взаимодействия) [protocol] – формально
описанный способ взаимодействия двух и более субъектов
(систем! посредством их интерфейсов!) для их совместной
деятельности с учётом контекста
• Естественно, протокол использует интерфейсы!
• Стек протоколов – иерархически организованный набор
протоколов взаимодействия определённых систем в
соответствии с выбранными уровнями абстракции
• Примеры: стек сетевых протоколов, стек протоколов доступа к данным во
внешней памяти, …
• Всегда можно говорить и о стеке соответствующих интерфейсов, это
просто не принято
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 8
Интерфейсы и протоколы (иллюстрация)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 9
Уровень k (низший)
…
Уровень 3
Уровень 2
Уровень 1 (высший)
Уровень k (низший)
…
Уровень 3
Уровень 2
Уровень 1 (высший)
Ik,1 Ik,2
Возрастаниеуровняабстракции→
ПротоколыСистема 1 Система 2
P2
P1
P3
Pk
…
Алгоритм как сущность.
Определения и основные свойства
• Алгоритм [algorithm] – чётко описанная последовательность
элементарных действий исполнителя над исходными данными для
достижения предварительно сформулированного результата
• В программировании:
• Исполнитель [executor, actor] – средства вычислительной техники (компьютер)
• Данные [data] – любая информация, представленная в форме, пригодной для
хранения, передачи и обработки средствами вычислительной техники
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 10
Алгоритм
Исполнитель
Исходные
данные
Результат
Описание на
некотором языке
О проблеме формализации алгоритма
• На самом деле вопрос «что такое алгоритм?» очень глубок:
• Что мы хотим от формального определения алгоритма
• Сравнение различных исполнителей алгоритмов и их классификация
• Модели вычислений и аксиоматический подход
• Формализация входа и выхода алгоритма
• Связь формализации алгоритма с теорией групп и теорией категорий
• Конечность алгоритма и алгоритмическая разрешимость
• Массовость алгоритмов
• Понятие корректности алгоритма
• Параллельные, распределённые, квантовые алгоритмы
• Yuri Gurevich – Introduction to Algorithms and Computational
Complexity, 2 of 3: What Is An Algorithm?
(http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Yuri-
Gurevich-Introduction-to-Algorithms-and-Computational-
Complexity-2-of-n)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 11
О модели вычислений – определение
• Модель вычислений [model of computation] – формальное
абстрактное описание исполнителя алгоритма
• Математическая модель, позволяющая исследовать, делать предсказания
и проводить верификацию работы исполнителя
• Один из основных объектов изучения теоретической информатики
[theoretical computer science]
• Wikipedia Category: Models of computation
(https://en.wikipedia.org/wiki/Category:Models_of_computation)
• Оцените разнообразие!
• Savage J.E. Models of Computation:
Exploring the Power of Computing. – Addison-Wesley, 1998. – 672 p.
• http://cs.brown.edu/people/jsavage/book/pdfs/ModelsOfComputation.pdf
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 12
О модели вычислений – примеры
• Машина Тьюринга
• Алгорифмы Маркова
• Продукции Поста
• Конечный автомат с магазинной памятью
• Равнодоступная адресная машина
[Random-Access Machine (Memory Design) – RAM]
• ...
• Модель взаимодействующих последовательных процессов
• Параллельная равнодоступная адресная машина
[Parallel Random Access Machines – PRAM]
• ...
• Вероятностные модели в ассортименте
• Квантовый компьютер в нескольких вариантах
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 13
Алгоритм и программа
• Программа [program] – формальная запись алгоритма и
обрабатываемых им данных на некотором формальном языке
для некоторого класса исполнителей
• Глубокое понимание программирования как создания
программы требует понимания теории формальных языков и
теории трансляции
• Но «на пальцах» можно объяснить это через рассмотрение
различных представлений «исходного кода» на языках
программирования различного уровня – от Ассемблера до
«СиПлюсПлюса» (CPP) и «ЯваСкрипта» (JS)
• Исходный код [source code] – текст компьютерной программы на языке
программирования, который может быть прочтён человеком
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 14
Системный взгляд на программирование
• Программа – подсистема некоторой информационной системы
с набором интерфейсов и соответствующих протоколов!
• Реализация интерфейса прикладного программирования
(API – Application Programming Interface)
• Протокол взаимодействия с API
• Архитектура программной системы, которая их определяет
Ссылки:
• Martin Fowler articles tagged by: API design
• (http://martinfowler.com/tags/API%20design.html)
• API Design for C++ (http://www.apibook.com/blog/archives/tag/design)
• An Introduction to APIs (https://zapier.com/learn/apis)
• API Design by Matt Gemmell (http://mattgemmell.com/api-design)
• Web API Design – Crafting Interfaces that Developers Love
• (https://pages.apigee.com/rs/apigee/images/api-design-ebook-2012-03.pdf)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 15
Язык программирования
• Язык программирования (алгоритмический язык) [programming
language] – формальная знаковая система, служащая для
формального описания и реализации на компьютере
алгоритмов обработки данных
• Машинный язык (машинный код) [machine language/code] –
запись команд процессора непосредственно в том виде, в
котором они поступают на ему для выполнения
•  Для современных цифровых компьютеров общего назначения
осуществляется в двоичном (бинарном) коде
• Язык ассемблера [assembler language] – это символьная форма
машинного языка с рядом возможностей, характерных для
языка высокого уровня
• С помощью языка ассемблера, как и с помощью машинного языка,
программист получает доступ ко всем ресурсам компьютера
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 16
Язык программирования
высокого уровня
• Язык программирования высокого уровня (ЯПВУ) [high-level
language] –
1. Язык программирования, понятия и структура которого
удобны для восприятия человеком (согласно ГОСТ 19781-90)
2. Аппаратно-независимый язык программирования
• Все ЯПВУ являются проблемно-ориентированными (в той или
иной мере ), то есть более подходящими для создания
программ для определённой предметной области
• Те из языков, которые не имеют явной привязки к предметной области,
принято называть универсальными
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 17
Поколения языков
программирования –
что это такое?
✓ Откуда есть пошли языки программирования
✓ Поколения без разночтений
✓ Поколения под вопросом
✓ Сравнение языков и их популярность
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 18
Сколько всего языков
программирования?
• Каталогизировано более 2500 языков программирования
• Отметим, что компьютерных языков более 8000!
• Каждый язык программирования – компьютерный язык
• Но не на каждом компьютерном языке можно писать программы
• Интересная история произошла с языком SQL:
ранее он был реляционно-полным языком запросов к БД,
но развился до полного по Тьюрингу языка программирования
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 19
Генеалогия и история
• Визуальная история развития 50-и наиболее популярных языков
(http://www.levenez.com/lang/) by Éric Lévénez
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 20
Генеалогия – как всё начиналось
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 21
Классические поколения ЯПВУ
№ Период Название Примеры языков
1 1954-1958 гг. Первое поколение FORTRAN I, ALGOL-58, IPL-V
2 1959-1961 гг. Второе поколение FORTRAN II, ALGOL-60, COBOL, LISP
3 1962-1970 гг. Третье поколение FORTRAN IV, PL/1, ALGOL-68, Simula,
Snobol, BASIC
4 1971-1984 гг. Четвёртое поколение FORTRAN-77, Pascal, MODULA-2, C,
Sheme, ML, Smalltalk, Ada-83, ICON,
Prolog
5 1985-1995 гг. Пятое поколение FORTRAN 90, Object Pascal, Oberon, C++,
Eiffel, Ada-95, Visual BASIC, Java, OCaml,
Haskell
6 1996 г. –
Настоящее время?
Шестое поколение? FORTRAN 2003, Delphi (язык), D, C#, F#,
Python, PHP, Ruby
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 22
Поколения – другой взгляд
(без привязки ко времени)
• Язык первого поколения (1GL) – изначально: способ программирования
цифровых компьютеров первого поколения (двоичный код), сейчас:
машинный язык конкретной аппаратной платформы
• Язык записи объектных модулей
• Язык второго поколения (2GL) – язык ассемблера, то есть аппаратно-
зависимый мнемокод, инструкции которого соответствуют конкретным
последовательностям машинного языка (с учётом операндов)
• Ассемблеры и макроассемблеры
• Язык третьего поколения (3GL) – тот самый язык программирования
высокого уровня – аппаратно-независимый язык, ориентированный на
программиста
• Fortran, ALGOL, COBOL, C, C++, C#, BASIC, Pascal, Java, JavaScript, ...
• Язык четвёртого поколения (4GL) – как минимум процедурный язык
повышенного уровня абстракции по сравнению с языками 3 поколения,
более проблемно-ориентированный и работающий со сложными моделями
данных
• Visual FoxPro, Clipper, DataFlex, SQL, ABAP, R, MATLAB, Wolfram Language, …
• Язык пятого поколения (5GL) – язык для принятия решений на основе
ограничений c учётом формализованного знания: «языки ИИ»
• Prolog, OPS5, Mercury, наследники LISP, …
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 23
Парадигмы
• Никакая/новая (важно!)
• Процедурная
• Структурная
• Объекто-ориентированная
• Функциональная
• Логическая
• Параллельная
• Потоков данных
• ...
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 24
DSL – повышаем специфичность
• Domain specific language (DSL) – язык программирования,
специализированный для решения некоторого класса задач в
конкретной предметной области
• Wikipedia – Предметно-ориентированный язык
(http://ru.wikipedia.org/wiki/Предметно-ориентированный_язык)
• Парадигма «метапрограммирования»
• Специализация универсального языка?
• Пример:
• Modelica → Modia (MODelica+julIA)
• by Hilding Elmqvist, 2014-2018
• Systems Modeling and Programming in a Unified Environment Based on Julia
(http://link.springer.com/chapter/10.1007/978-3-319-47169-3_15)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 25
Сравнение языков программирования
(1)
• Wikipedia – List of programming languages by type
(http://en.wikipedia.org/wiki/List_of_programming_languages_by_type)
• Wikipedia – Сравнение языков программирования
(http://ru.wikipedia.org/wiki/Сравнение_языков_программирования)
• Стейкхолдеры?
• Цель?
• Критерии?
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 26
Сравнение языков программирования
(2)
• Tomassetti F. The Best Programming Languages for Each Situation. 2017
(http://tomassetti.me/best-programming-languages/)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 27
Область Языки
«Кровавый энтерпрайз» Java, Kotlin, C++, ...
Академия Python, Julia, ...
Надёжный масштабируемый софт Erlang, Elixir, Go, ...
Системное программирование C, C++, Rust, ...
Разработка игр C++, C#, ...
Web-разработка Javascript, TypeScript, PHP, …
Странный мир Apple Swift, Objective-C
Написание разнообразного ПО на одном языке C#, JavaScript, ...
Специфические ниши
ADA (ОПК), Fortran (численные методы и
суперкомпьютеры),
COBOL (унаследованные финансы)
Вне конкурса Prolog, Haskell
Популярность языков (1)
• По обсуждениям в сети Интернет:
TIOBE Index (http://www.tiobe.com/tiobe-index/)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 28
Популярность языков (2)
• По поиску туториалов в Google:
PYPL PopularitY of Programming Language (http://pypl.github.io/PYPL.html)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 29
Популярность языков (3)
• Многокритериальный рейтинг
IEEE Spectrum – The 2018 Top Programming Languages
(http://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages)
• Далее пример для Web-разработки
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 30
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 31
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 32
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 33
Популярность языков (4)
• По опросу участников проекта Stack Overflow:
Stack Overflow's Developer Survey Results – Technologies
(http://insights.stackoverflow.com/survey/2018/#technology)
• Далее наиболее используемые
Programming, Scripting, and Markup Languages
по мнению профессиональных программистов
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 34
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 35
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 36
Продуктивность
языка программирования
✓ Продуктивность как комплексная характеристика
✓ Исследования продуктивности
✓ Платформы и «фреймворки»
✓ Удобство создания DSL как один из критериев
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 37
Продуктивность
• Продуктивность [productivity] – комплексная характеристика
эффективности работы программиста
• Краткость
• Идиоматичность
• Удобочитаемость
• Удобство рефакторинга
• Надёжность и безопасность
• Модуляризация, адаптированная для решения архитектурных вопросов
• Возможность создания и проверки корректности DSL (Domain-Specific
Language)
• …
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 38
Продуктивность – обсуждение (1)
• What are the best (productivity-enhancing, well-designed, and
concise, rather than just popular or time-tested) programming
languages? (http://www.slant.co/topics/5984/~productivity-enhancing-well-
designed-and-concise-rather-than-just-popular-or-time-tested-programming-
lang)
• Рейтинг:
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 39
Elixir Python Nim Smalltalk Scheme
Elm Rust Clojure Haskell Kotlin
Racket Go
Common
Lisp
C# F#
Scala Julia D OCaml Ruby
Продуктивность – обсуждение (2)
• Dr.Dobb – The Comparative Productivity of Programming Languages
(http://www.drdobbs.com/jvm/the-comparative-productivity-of-programm/240005881)
• 2011 год
• Данные ISBSG (http://isbsg.org)
• Более 6000 проектов
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 40
Язык Часов на функцию
ASP 06.1
Visual Basic 08.5
Java 10.6
SQL 10.8
C++ 12.4
C 13.0
C# 15.5
PL/1 14.2
COBOL 16.8
ABAP 19.9
Продуктивность – обсуждение (3)
• Prechelt L. An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for
a search/string-processing program. 2000
(http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprtTR.pdf)
• Gat E. Lisp as an Alternative to Java. 2000 (http://www.flownet.com/gat/papers/lisp-
java.pdf)
• Barnes C.:
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 41
Среднее время
решения задачи, часов
Платформы и «фреймворки»
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 42
ПриложенияПриложения
Операционная система
Библиотеки
Приложение
Платформа разработки
Технологии хранения данных
Технологии коммуникации
Технологии идентификации
Платформа развёртывания
Инфраструктурная платформа
Прикладная платформа
Приложения
…
Революция платформ разработки
• «Фреймворк» [framework] – то что позволяет непосредственно
в момент начала над программным проектом получить
программу, умеющую «всё, кроме того, что нужно»
• Управление пользователями
• Сессии и персистентность
• Сервер среднего слоя и управление масштабированием
• Доступ к источникам данных
• Средства организации интерфейса с пользователем и создания отчётов
• Кросплатформенность
• ...
• Вопрос:
• Какой объём занимает новая программа, основанная на популярных
фремворках, даже если программист не написал ещё ни одной строки
собственного кода?
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 43
Наиболее популярный язык склейки,
прототипирования и анализа данных
• Python (http://www.python.org)
• Текущая версия 3.7
• Активно идёт подготовка к версии 4
• Именно его мы изучаем
• Некоторые web-фреймворки
• Django: the Web framework for perfectionists with deadlines
(http://www.djangoproject.com)
• TurboGears: the Web framework that scales with you
(http://www.turbogears.org)
• Flask: microframework for Web (http://flask.pocoo.org)
• Tornado: a Python web framework and asynchronous networking library
(http://www.tornadoweb.org)
• CherryPy: a minimalist Python Web framework (http://cherrypy.org)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 44
Новые высокопродуктивные языки
• Rust (http://www.rust-lang.org)
• Язык надёжного системного программирования
• Текущая версия 1.30
• Julia (http://julialang.org)
• Язык вычислительной математики и ИИ
• Текущая версия 1.1
• NIM (http://nim-lang.org)
• Универсальный высокопродуктивный язык
• Компилируется в С
• Текущая версия 0.19
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 45
Другие примеры и обсуждение
• Пять перспективных языков программирования со светлым
будущим (http://habr.com/post/310252/)
• 2016 год
• Особенно интересны комментарии!
• Языки
• Rust – уже упоминался
• Elm (http://elixir-lang.org)
• Kotlin (http://kotlinlang.org)
• Crystal (http://crystal-lang.org)
• Elixir (http://elixir-lang.org)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 46
А специально для обучения?
• Racket (http://racket-lang.org)
• Текущая версия 7.1
• Функциональный, дальний потомок Lisp и Scheme
• Удобен и оптимизирован для создания DSL!
(http://beautifulracket.com/appendix/domain-specific-languages.html)
• Flatt M. Creating Languages in Racket. Communications of the ACM, 55(1), 2012. pp. 48-56.
(http://queue.acm.org/detail.cfm?id=2068896)
• Примеры DSL:
• brag: a better Racket AST generator (http://docs.racket-lang.org/brag/)
• Для создания парсеров по BNF-нотации
• Datalog: Deductive Database Programming (http://docs.racket-lang.org/datalog/)
• Язык дедуктивного (логического) программирования
• Scribble: The Racket Documentation Tool (http://docs.racket-lang.org/scribble/)
• Язык создания документации (в том числе документации языка Racket)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 47
Языки для высокопродуктивной
математики
• R – The R Project for Statistical Computing
(http://www.r-project.org)
• CRAN – The Comprehensive R Archive Network
(http://cran.r-project.org)
• Wolfram language
(http://www.wolfram.com/language/)
• MathWorks Matlab
(http://www.mathworks.com/help/matlab/language-fundamentals.html)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 48
Но это ещё не конец?!
Спасибо за внимание к тёмным углам
в обучении программированию!
Контакты:
•Алексей Незнанов
• International Laboratory for Intelligent System and Structural Analysis,
NRU HSE, Moscow, Russia
• School of Data Analysis and Artificial Intelligence,
Faculty of Computer Science, NRU HSE, Moscow, Russia
• E-mail: aneznanov@hse.ru
• Web-site: http://hse.ru/staff/aneznanov
• Blog: http://siberianshamanssongs.blogspot.ru (RU)
© 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 49

More Related Content

What's hot

Uml for students
Uml for studentsUml for students
Uml for students
hrcustis
 
Разработка ПО с помощью UML
Разработка ПО с помощью UMLРазработка ПО с помощью UML
Разработка ПО с помощью UML
CUSTIS
 
М.Бухарин -- DSM в архитектурном проектировании
М.Бухарин -- DSM в архитектурном проектированииМ.Бухарин -- DSM в архитектурном проектировании
М.Бухарин -- DSM в архитектурном проектировании
Anatoly Levenchuk
 
А.Левенчук -- Essence в варианте для системной инженерии
А.Левенчук -- Essence в варианте для системной инженерииА.Левенчук -- Essence в варианте для системной инженерии
А.Левенчук -- Essence в варианте для системной инженерии
Anatoly Levenchuk
 
Составные части объектного подхода
Составные части объектного подходаСоставные части объектного подхода
Составные части объектного подхода
Ural Federal University named after First President of Russia B.N. Yeltsin
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерии
Anatoly Levenchuk
 
Системы систем
Системы системСистемы систем
Системы систем
Anatoly Levenchuk
 
Почему UML — плохой выбор для обучения аналитиков
Почему UML — плохой выбор для обучения аналитиковПочему UML — плохой выбор для обучения аналитиков
Почему UML — плохой выбор для обучения аналитиков
SQALab
 
IThink Shakbasarov Rinat
IThink Shakbasarov RinatIThink Shakbasarov Rinat
IThink Shakbasarov Rinat
Ринат Шакбасаров
 
А.Ефремов -- встречи Русского отделения INCOSE
А.Ефремов -- встречи Русского отделения INCOSEА.Ефремов -- встречи Русского отделения INCOSE
А.Ефремов -- встречи Русского отделения INCOSE
Anatoly Levenchuk
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
Nikolai Kireev
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
ITCP Community
 
А.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерииА.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерии
Anatoly Levenchuk
 
А.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом активаА.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом актива
Anatoly Levenchuk
 
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ITMO University
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
Unguryan Vitaliy
 
Тренды в инженерии требований и управлении требованиями
Тренды в инженерии требований и управлении требованиямиТренды в инженерии требований и управлении требованиями
Тренды в инженерии требований и управлении требованиями
Anatoly Levenchuk
 
А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.
Anatoly Levenchuk
 
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"Rostislav Shorgin
 

What's hot (20)

Uml for students
Uml for studentsUml for students
Uml for students
 
Разработка ПО с помощью UML
Разработка ПО с помощью UMLРазработка ПО с помощью UML
Разработка ПО с помощью UML
 
М.Бухарин -- DSM в архитектурном проектировании
М.Бухарин -- DSM в архитектурном проектированииМ.Бухарин -- DSM в архитектурном проектировании
М.Бухарин -- DSM в архитектурном проектировании
 
А.Левенчук -- Essence в варианте для системной инженерии
А.Левенчук -- Essence в варианте для системной инженерииА.Левенчук -- Essence в варианте для системной инженерии
А.Левенчук -- Essence в варианте для системной инженерии
 
Составные части объектного подхода
Составные части объектного подходаСоставные части объектного подхода
Составные части объектного подхода
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерии
 
Системы систем
Системы системСистемы систем
Системы систем
 
Почему UML — плохой выбор для обучения аналитиков
Почему UML — плохой выбор для обучения аналитиковПочему UML — плохой выбор для обучения аналитиков
Почему UML — плохой выбор для обучения аналитиков
 
IThink Shakbasarov Rinat
IThink Shakbasarov RinatIThink Shakbasarov Rinat
IThink Shakbasarov Rinat
 
А.Ефремов -- встречи Русского отделения INCOSE
А.Ефремов -- встречи Русского отделения INCOSEА.Ефремов -- встречи Русского отделения INCOSE
А.Ефремов -- встречи Русского отделения INCOSE
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
UML: Kinds of Diagram
UML:  Kinds of DiagramUML:  Kinds of Diagram
UML: Kinds of Diagram
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
А.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерииА.Левенчук -- Понятие системы в системной инженерии
А.Левенчук -- Понятие системы в системной инженерии
 
А.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом активаА.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом актива
 
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
ОСНОВНЫЕ ПРИНЦИПЫ РЕШЕНИЯ ЗАДАЧИ ПРЕОБРАЗОВАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО КОД...
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Тренды в инженерии требований и управлении требованиями
Тренды в инженерии требований и управлении требованиямиТренды в инженерии требований и управлении требованиями
Тренды в инженерии требований и управлении требованиями
 
А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.
 
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"
Федор Романенко - "Ранжирование: от строчки кода до Матрикснета"
 

Similar to Неотрефлексированный сдвиг парадигмы: от поколений языков программирования высокого уровня к метапрограммированию и высокопродуктивным DSL

Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Technopark
 
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
Alex V. Petrov
 
А.Левенчук -- декомпозиция системы
А.Левенчук -- декомпозиция системыА.Левенчук -- декомпозиция системы
А.Левенчук -- декомпозиция системы
Anatoly Levenchuk
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворкиEdward Galiaskarov
 
А.Левенчук -- SysArchi
А.Левенчук -- SysArchiА.Левенчук -- SysArchi
А.Левенчук -- SysArchi
Anatoly Levenchuk
 
1 общие понятия о проектировании мехатронных систем
1 общие понятия о проектировании мехатронных систем1 общие понятия о проектировании мехатронных систем
1 общие понятия о проектировании мехатронных систем
Makhabbat Kalenova
 
Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...
Aimurat Adilbekov
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
Sergey Nemchinsky
 
Симуляционное моделирование и семантические технологии
Симуляционное моделирование и семантические технологииСимуляционное моделирование и семантические технологии
Симуляционное моделирование и семантические технологии
Sergey Gorshkov
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыPavel Shalagin
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.ppt
dinarium2016
 
Стандартизация предмета системной инженерии
Стандартизация предмета системной инженерииСтандартизация предмета системной инженерии
Стандартизация предмета системной инженерии
Anatoly Levenchuk
 
оп.05 основы программирования
оп.05 основы программированияоп.05 основы программирования
оп.05 основы программирования
Stepan1234
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияMarcus Akoev
 
Оценка эффективности работы аналитика
Оценка эффективности работы аналитикаОценка эффективности работы аналитика
Оценка эффективности работы аналитика
SQALab
 
Analyst Days 2014
Analyst Days 2014Analyst Days 2014
Analyst Days 2014
Natalia Zhelnova
 
Системное мышление -- материалы курса (2016)
Системное мышление -- материалы курса (2016)Системное мышление -- материалы курса (2016)
Системное мышление -- материалы курса (2016)
Anatoly Levenchuk
 
Системное мышление -- непопсовый обзор курса
Системное мышление -- непопсовый обзор курсаСистемное мышление -- непопсовый обзор курса
Системное мышление -- непопсовый обзор курса
Anatoly Levenchuk
 

Similar to Неотрефлексированный сдвиг парадигмы: от поколений языков программирования высокого уровня к метапрограммированию и высокопродуктивным DSL (20)

Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7Бизнес и системный анализ весна 2013 лекция 7
Бизнес и системный анализ весна 2013 лекция 7
 
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
ITGM #5. System Duality and Its Practical Effect on Business Analysis [1.0, RUS]
 
А.Левенчук -- декомпозиция системы
А.Левенчук -- декомпозиция системыА.Левенчук -- декомпозиция системы
А.Левенчук -- декомпозиция системы
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки
 
А.Левенчук -- SysArchi
А.Левенчук -- SysArchiА.Левенчук -- SysArchi
А.Левенчук -- SysArchi
 
1 общие понятия о проектировании мехатронных систем
1 общие понятия о проектировании мехатронных систем1 общие понятия о проектировании мехатронных систем
1 общие понятия о проектировании мехатронных систем
 
Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...Понятия технологии разработки объектно-ориентированных информационных систем ...
Понятия технологии разработки объектно-ориентированных информационных систем ...
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Симуляционное моделирование и семантические технологии
Симуляционное моделирование и семантические технологииСимуляционное моделирование и семантические технологии
Симуляционное моделирование и семантические технологии
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектуры
 
Проектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.pptПроектирование_и_архитектура_ПС_2022_L06.ppt
Проектирование_и_архитектура_ПС_2022_L06.ppt
 
Стандартизация предмета системной инженерии
Стандартизация предмета системной инженерииСтандартизация предмета системной инженерии
Стандартизация предмета системной инженерии
 
оп.05 основы программирования
оп.05 основы программированияоп.05 основы программирования
оп.05 основы программирования
 
IT Project Life cycle
IT Project Life cycleIT Project Life cycle
IT Project Life cycle
 
тема 6
тема 6тема 6
тема 6
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерия
 
Оценка эффективности работы аналитика
Оценка эффективности работы аналитикаОценка эффективности работы аналитика
Оценка эффективности работы аналитика
 
Analyst Days 2014
Analyst Days 2014Analyst Days 2014
Analyst Days 2014
 
Системное мышление -- материалы курса (2016)
Системное мышление -- материалы курса (2016)Системное мышление -- материалы курса (2016)
Системное мышление -- материалы курса (2016)
 
Системное мышление -- непопсовый обзор курса
Системное мышление -- непопсовый обзор курсаСистемное мышление -- непопсовый обзор курса
Системное мышление -- непопсовый обзор курса
 

More from Alexey Neznanov

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
Alexey Neznanov
 
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовыИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
Alexey Neznanov
 
Фрактальная геометрия и программирование на Python
Фрактальная геометрия и программирование на PythonФрактальная геометрия и программирование на Python
Фрактальная геометрия и программирование на Python
Alexey Neznanov
 
Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...
Alexey Neznanov
 
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
Alexey Neznanov
 
Онтологически-контролируемое обучение: имплицитное и эксплицитное знание
Онтологически-контролируемое обучение: имплицитное и эксплицитное знаниеОнтологически-контролируемое обучение: имплицитное и эксплицитное знание
Онтологически-контролируемое обучение: имплицитное и эксплицитное знание
Alexey Neznanov
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Alexey Neznanov
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Alexey Neznanov
 
Рекурсия (2017)
Рекурсия (2017)Рекурсия (2017)
Рекурсия (2017)
Alexey Neznanov
 
Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...
Alexey Neznanov
 
Где и как хранить данные в процессе их анализа:  SQL и не только…
Где и как хранить данные в процессе их анализа: SQL и не только… Где и как хранить данные в процессе их анализа: SQL и не только…
Где и как хранить данные в процессе их анализа:  SQL и не только…
Alexey Neznanov
 
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
Alexey Neznanov
 
Современные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедренияСовременные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедрения
Alexey Neznanov
 
Современные математические модели медицинской информатики: от статистики до...
Современные математические модели медицинской информатики: от статистики до...Современные математические модели медицинской информатики: от статистики до...
Современные математические модели медицинской информатики: от статистики до...
Alexey Neznanov
 
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
Alexey Neznanov
 
Доказательная медицина, клинические исследования и медицинская информатика: ...
Доказательная медицина, клинические исследования и медицинская информатика: ...Доказательная медицина, клинические исследования и медицинская информатика: ...
Доказательная медицина, клинические исследования и медицинская информатика: ...
Alexey Neznanov
 
Blended learning in Software Engineering Education: the Application Lifecycle...
Blended learning in Software Engineering Education: the Application Lifecycle...Blended learning in Software Engineering Education: the Application Lifecycle...
Blended learning in Software Engineering Education: the Application Lifecycle...
Alexey Neznanov
 
Коллаборативные технологии и инструменты в учебном процессе
Коллаборативные технологии и инструменты в учебном процессеКоллаборативные технологии и инструменты в учебном процессе
Коллаборативные технологии и инструменты в учебном процессе
Alexey Neznanov
 
Modern arch neznanov_2015_05_14
Modern arch neznanov_2015_05_14Modern arch neznanov_2015_05_14
Modern arch neznanov_2015_05_14
Alexey Neznanov
 

More from Alexey Neznanov (19)

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: исследования и игры, креативность и артистизм, генер...
 
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовыИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ: тренды, достижения и вызовы
 
Фрактальная геометрия и программирование на Python
Фрактальная геометрия и программирование на PythonФрактальная геометрия и программирование на Python
Фрактальная геометрия и программирование на Python
 
Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...Современные коллаборативные технологии: технологический базис сообществ откры...
Современные коллаборативные технологии: технологический базис сообществ откры...
 
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
Achievements in Games (CS, 2018-08-27) - Игровые «ачивки», поддельные ёлочные...
 
Онтологически-контролируемое обучение: имплицитное и эксплицитное знание
Онтологически-контролируемое обучение: имплицитное и эксплицитное знаниеОнтологически-контролируемое обучение: имплицитное и эксплицитное знание
Онтологически-контролируемое обучение: имплицитное и эксплицитное знание
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...
 
Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...Современные коллаборативные технологии в учебном процессе: возможности и проб...
Современные коллаборативные технологии в учебном процессе: возможности и проб...
 
Рекурсия (2017)
Рекурсия (2017)Рекурсия (2017)
Рекурсия (2017)
 
Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...Современные коллаборативные технологии в учебном процессе: теория и практика ...
Современные коллаборативные технологии в учебном процессе: теория и практика ...
 
Где и как хранить данные в процессе их анализа:  SQL и не только…
Где и как хранить данные в процессе их анализа: SQL и не только… Где и как хранить данные в процессе их анализа: SQL и не только…
Где и как хранить данные в процессе их анализа:  SQL и не только…
 
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
Взаимное оценивание студентов: от идеи к реализации (Семинар 2016-11-21)
 
Современные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедренияСовременные коллаборативные технологии в учебном процессе: практика внедрения
Современные коллаборативные технологии в учебном процессе: практика внедрения
 
Современные математические модели медицинской информатики: от статистики до...
Современные математические модели медицинской информатики: от статистики до...Современные математические модели медицинской информатики: от статистики до...
Современные математические модели медицинской информатики: от статистики до...
 
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
Интеллектуальный анализ данных и откртытые данные в клинической информатике: ...
 
Доказательная медицина, клинические исследования и медицинская информатика: ...
Доказательная медицина, клинические исследования и медицинская информатика: ...Доказательная медицина, клинические исследования и медицинская информатика: ...
Доказательная медицина, клинические исследования и медицинская информатика: ...
 
Blended learning in Software Engineering Education: the Application Lifecycle...
Blended learning in Software Engineering Education: the Application Lifecycle...Blended learning in Software Engineering Education: the Application Lifecycle...
Blended learning in Software Engineering Education: the Application Lifecycle...
 
Коллаборативные технологии и инструменты в учебном процессе
Коллаборативные технологии и инструменты в учебном процессеКоллаборативные технологии и инструменты в учебном процессе
Коллаборативные технологии и инструменты в учебном процессе
 
Modern arch neznanov_2015_05_14
Modern arch neznanov_2015_05_14Modern arch neznanov_2015_05_14
Modern arch neznanov_2015_05_14
 

Неотрефлексированный сдвиг парадигмы: от поколений языков программирования высокого уровня к метапрограммированию и высокопродуктивным DSL

  • 1. Неотрефлексированный сдвиг парадигмы: от поколений языков программирования высокого уровня к метапрограммированию и высокопродуктивным DSL Незнанов Алексей Андреевич, доцент департамента анализа данных и искусственного интеллекта факультета компьютерных наук НИУ ВШЭ, старший научный сотрудник международной лаборатории интеллектуальных систем и структурного анализа ФКН НИУ ВШЭ © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 1
  • 2. Базовые понятия ✓ Система, интерфейс и протокол ✓ Алгоритм и его исполнитель, модель вычислений ✓ Программа и исходный код ✓ Язык программирования © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 2
  • 3. О контринтуитивности • Программирование часто контринтуитивно • При обучении программированию многие концепции, для которых мозг автоматом подбирает аналогии, никак не связаны друг с другом • Аналогия часто не просто лжива – она антисистемна! • Очень помогает навык рационального мышления • LessWrong на русском (http://lesswrong.ru) • Особенно это помогает при тестировании ☺ • 97 вещей, которые должен знать каждый программист (http://copist.ru/books/97things-dev) • Себеста Р. Основные концепции языков программирования. – М. : Вильямс, 2001. – 672 с. • Макконнелл С. Совершенный код. Практическое руководство по разработке программного обеспечения. – Спб. : Питер, 2005. – 896 с. • Хант Э., Томас Д. Программист-прагматик. – Лори, 2004. – 270 с. • Фаулер М. Рефакторинг. Улучшение существующего кода. – М.: Символ-Плюс, 2005. – 432 с. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 3
  • 4. О системном подходе Система [system] – такое объединение множества элементов некоторыми связями, у которого появляются свойства, отсутствующие у любого элемента по отдельности • Системный подход – подход к моделированию, акцентирующий внимание на выявлении систем и их взаимодействий • Основа развития современных технологий! • Иерархия систем • Надсистемы и подсистемы • Синергия и эмерджентность! • Система → интегративные свойства и системные свойства • Система → состав и структура • Система → поведение и взаимодействие с другими системами • Система → иерархия (стратификация и классификация подсистем и надсистем) • Система → антагонистические свойства (диалектика) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 4
  • 5. Системы и принцип абстракции • Абстракция [abstraction] – • Разграничение внешних (существенных с точки зрения надсистем) свойств системы и внутренних деталей её строения и функционирования • Принцип моделирования, заключающийся в игнорировании аспектов проблемы, не оказывающих существенного влияния на её решение Иерархия систем => Иерархия абстракций • Именно принцип абстракции позволяет использовать специализацию и модуляризацию • См. интерфейс (API – Application Programming Interface) и протокол • Закон дырявых абстракций (Джоэл Сполски): все нетривиальные абстракции дырявы • Следствие – при ошибке в интерфейсе для её исправления может потребоваться знание как минимум трёх смежных уровней абстракций © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 5
  • 6. Интерфейс Интерфейс [interface] (inter – внешнее, между + face – лицо, фасад, если inter – между, то смысл хорошо передаёт юмористический перевод – «междумордие»): • В широком смысле – формальное или неформальное определение связи в тройке «сущность1 – связь – сущность2» [entity1 – relationship – entity2] • Часть системы, открытая для других систем, внешнее восприятие системы • Система связей с унифицированными сигналами и/или аппаратурой, предназначенная для обмена материей/информацией между техническими устройствами и/или людьми © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 6
  • 7. Системы и интерфейсы (иллюстрация) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 7 Обычно из контекста ясно, о каком значении термина идёт речь Система 2 Система 1 Интерфейс системы 1 Интерфейс системы 2 Внешняя часть системы (неотъемлемая! ) Система 2 Система 1 Интерфейс взаимодействия Система связей + протокол Случай 1: Случай 2:
  • 8. Протокол • Протокол (протокол взаимодействия) [protocol] – формально описанный способ взаимодействия двух и более субъектов (систем! посредством их интерфейсов!) для их совместной деятельности с учётом контекста • Естественно, протокол использует интерфейсы! • Стек протоколов – иерархически организованный набор протоколов взаимодействия определённых систем в соответствии с выбранными уровнями абстракции • Примеры: стек сетевых протоколов, стек протоколов доступа к данным во внешней памяти, … • Всегда можно говорить и о стеке соответствующих интерфейсов, это просто не принято © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 8
  • 9. Интерфейсы и протоколы (иллюстрация) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 9 Уровень k (низший) … Уровень 3 Уровень 2 Уровень 1 (высший) Уровень k (низший) … Уровень 3 Уровень 2 Уровень 1 (высший) Ik,1 Ik,2 Возрастаниеуровняабстракции→ ПротоколыСистема 1 Система 2 P2 P1 P3 Pk …
  • 10. Алгоритм как сущность. Определения и основные свойства • Алгоритм [algorithm] – чётко описанная последовательность элементарных действий исполнителя над исходными данными для достижения предварительно сформулированного результата • В программировании: • Исполнитель [executor, actor] – средства вычислительной техники (компьютер) • Данные [data] – любая информация, представленная в форме, пригодной для хранения, передачи и обработки средствами вычислительной техники © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 10 Алгоритм Исполнитель Исходные данные Результат Описание на некотором языке
  • 11. О проблеме формализации алгоритма • На самом деле вопрос «что такое алгоритм?» очень глубок: • Что мы хотим от формального определения алгоритма • Сравнение различных исполнителей алгоритмов и их классификация • Модели вычислений и аксиоматический подход • Формализация входа и выхода алгоритма • Связь формализации алгоритма с теорией групп и теорией категорий • Конечность алгоритма и алгоритмическая разрешимость • Массовость алгоритмов • Понятие корректности алгоритма • Параллельные, распределённые, квантовые алгоритмы • Yuri Gurevich – Introduction to Algorithms and Computational Complexity, 2 of 3: What Is An Algorithm? (http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Yuri- Gurevich-Introduction-to-Algorithms-and-Computational- Complexity-2-of-n) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 11
  • 12. О модели вычислений – определение • Модель вычислений [model of computation] – формальное абстрактное описание исполнителя алгоритма • Математическая модель, позволяющая исследовать, делать предсказания и проводить верификацию работы исполнителя • Один из основных объектов изучения теоретической информатики [theoretical computer science] • Wikipedia Category: Models of computation (https://en.wikipedia.org/wiki/Category:Models_of_computation) • Оцените разнообразие! • Savage J.E. Models of Computation: Exploring the Power of Computing. – Addison-Wesley, 1998. – 672 p. • http://cs.brown.edu/people/jsavage/book/pdfs/ModelsOfComputation.pdf © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 12
  • 13. О модели вычислений – примеры • Машина Тьюринга • Алгорифмы Маркова • Продукции Поста • Конечный автомат с магазинной памятью • Равнодоступная адресная машина [Random-Access Machine (Memory Design) – RAM] • ... • Модель взаимодействующих последовательных процессов • Параллельная равнодоступная адресная машина [Parallel Random Access Machines – PRAM] • ... • Вероятностные модели в ассортименте • Квантовый компьютер в нескольких вариантах © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 13
  • 14. Алгоритм и программа • Программа [program] – формальная запись алгоритма и обрабатываемых им данных на некотором формальном языке для некоторого класса исполнителей • Глубокое понимание программирования как создания программы требует понимания теории формальных языков и теории трансляции • Но «на пальцах» можно объяснить это через рассмотрение различных представлений «исходного кода» на языках программирования различного уровня – от Ассемблера до «СиПлюсПлюса» (CPP) и «ЯваСкрипта» (JS) • Исходный код [source code] – текст компьютерной программы на языке программирования, который может быть прочтён человеком © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 14
  • 15. Системный взгляд на программирование • Программа – подсистема некоторой информационной системы с набором интерфейсов и соответствующих протоколов! • Реализация интерфейса прикладного программирования (API – Application Programming Interface) • Протокол взаимодействия с API • Архитектура программной системы, которая их определяет Ссылки: • Martin Fowler articles tagged by: API design • (http://martinfowler.com/tags/API%20design.html) • API Design for C++ (http://www.apibook.com/blog/archives/tag/design) • An Introduction to APIs (https://zapier.com/learn/apis) • API Design by Matt Gemmell (http://mattgemmell.com/api-design) • Web API Design – Crafting Interfaces that Developers Love • (https://pages.apigee.com/rs/apigee/images/api-design-ebook-2012-03.pdf) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 15
  • 16. Язык программирования • Язык программирования (алгоритмический язык) [programming language] – формальная знаковая система, служащая для формального описания и реализации на компьютере алгоритмов обработки данных • Машинный язык (машинный код) [machine language/code] – запись команд процессора непосредственно в том виде, в котором они поступают на ему для выполнения •  Для современных цифровых компьютеров общего назначения осуществляется в двоичном (бинарном) коде • Язык ассемблера [assembler language] – это символьная форма машинного языка с рядом возможностей, характерных для языка высокого уровня • С помощью языка ассемблера, как и с помощью машинного языка, программист получает доступ ко всем ресурсам компьютера © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 16
  • 17. Язык программирования высокого уровня • Язык программирования высокого уровня (ЯПВУ) [high-level language] – 1. Язык программирования, понятия и структура которого удобны для восприятия человеком (согласно ГОСТ 19781-90) 2. Аппаратно-независимый язык программирования • Все ЯПВУ являются проблемно-ориентированными (в той или иной мере ), то есть более подходящими для создания программ для определённой предметной области • Те из языков, которые не имеют явной привязки к предметной области, принято называть универсальными © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 17
  • 18. Поколения языков программирования – что это такое? ✓ Откуда есть пошли языки программирования ✓ Поколения без разночтений ✓ Поколения под вопросом ✓ Сравнение языков и их популярность © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 18
  • 19. Сколько всего языков программирования? • Каталогизировано более 2500 языков программирования • Отметим, что компьютерных языков более 8000! • Каждый язык программирования – компьютерный язык • Но не на каждом компьютерном языке можно писать программы • Интересная история произошла с языком SQL: ранее он был реляционно-полным языком запросов к БД, но развился до полного по Тьюрингу языка программирования © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 19
  • 20. Генеалогия и история • Визуальная история развития 50-и наиболее популярных языков (http://www.levenez.com/lang/) by Éric Lévénez © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 20
  • 21. Генеалогия – как всё начиналось © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 21
  • 22. Классические поколения ЯПВУ № Период Название Примеры языков 1 1954-1958 гг. Первое поколение FORTRAN I, ALGOL-58, IPL-V 2 1959-1961 гг. Второе поколение FORTRAN II, ALGOL-60, COBOL, LISP 3 1962-1970 гг. Третье поколение FORTRAN IV, PL/1, ALGOL-68, Simula, Snobol, BASIC 4 1971-1984 гг. Четвёртое поколение FORTRAN-77, Pascal, MODULA-2, C, Sheme, ML, Smalltalk, Ada-83, ICON, Prolog 5 1985-1995 гг. Пятое поколение FORTRAN 90, Object Pascal, Oberon, C++, Eiffel, Ada-95, Visual BASIC, Java, OCaml, Haskell 6 1996 г. – Настоящее время? Шестое поколение? FORTRAN 2003, Delphi (язык), D, C#, F#, Python, PHP, Ruby © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 22
  • 23. Поколения – другой взгляд (без привязки ко времени) • Язык первого поколения (1GL) – изначально: способ программирования цифровых компьютеров первого поколения (двоичный код), сейчас: машинный язык конкретной аппаратной платформы • Язык записи объектных модулей • Язык второго поколения (2GL) – язык ассемблера, то есть аппаратно- зависимый мнемокод, инструкции которого соответствуют конкретным последовательностям машинного языка (с учётом операндов) • Ассемблеры и макроассемблеры • Язык третьего поколения (3GL) – тот самый язык программирования высокого уровня – аппаратно-независимый язык, ориентированный на программиста • Fortran, ALGOL, COBOL, C, C++, C#, BASIC, Pascal, Java, JavaScript, ... • Язык четвёртого поколения (4GL) – как минимум процедурный язык повышенного уровня абстракции по сравнению с языками 3 поколения, более проблемно-ориентированный и работающий со сложными моделями данных • Visual FoxPro, Clipper, DataFlex, SQL, ABAP, R, MATLAB, Wolfram Language, … • Язык пятого поколения (5GL) – язык для принятия решений на основе ограничений c учётом формализованного знания: «языки ИИ» • Prolog, OPS5, Mercury, наследники LISP, … © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 23
  • 24. Парадигмы • Никакая/новая (важно!) • Процедурная • Структурная • Объекто-ориентированная • Функциональная • Логическая • Параллельная • Потоков данных • ... © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 24
  • 25. DSL – повышаем специфичность • Domain specific language (DSL) – язык программирования, специализированный для решения некоторого класса задач в конкретной предметной области • Wikipedia – Предметно-ориентированный язык (http://ru.wikipedia.org/wiki/Предметно-ориентированный_язык) • Парадигма «метапрограммирования» • Специализация универсального языка? • Пример: • Modelica → Modia (MODelica+julIA) • by Hilding Elmqvist, 2014-2018 • Systems Modeling and Programming in a Unified Environment Based on Julia (http://link.springer.com/chapter/10.1007/978-3-319-47169-3_15) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 25
  • 26. Сравнение языков программирования (1) • Wikipedia – List of programming languages by type (http://en.wikipedia.org/wiki/List_of_programming_languages_by_type) • Wikipedia – Сравнение языков программирования (http://ru.wikipedia.org/wiki/Сравнение_языков_программирования) • Стейкхолдеры? • Цель? • Критерии? © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 26
  • 27. Сравнение языков программирования (2) • Tomassetti F. The Best Programming Languages for Each Situation. 2017 (http://tomassetti.me/best-programming-languages/) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 27 Область Языки «Кровавый энтерпрайз» Java, Kotlin, C++, ... Академия Python, Julia, ... Надёжный масштабируемый софт Erlang, Elixir, Go, ... Системное программирование C, C++, Rust, ... Разработка игр C++, C#, ... Web-разработка Javascript, TypeScript, PHP, … Странный мир Apple Swift, Objective-C Написание разнообразного ПО на одном языке C#, JavaScript, ... Специфические ниши ADA (ОПК), Fortran (численные методы и суперкомпьютеры), COBOL (унаследованные финансы) Вне конкурса Prolog, Haskell
  • 28. Популярность языков (1) • По обсуждениям в сети Интернет: TIOBE Index (http://www.tiobe.com/tiobe-index/) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 28
  • 29. Популярность языков (2) • По поиску туториалов в Google: PYPL PopularitY of Programming Language (http://pypl.github.io/PYPL.html) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 29
  • 30. Популярность языков (3) • Многокритериальный рейтинг IEEE Spectrum – The 2018 Top Programming Languages (http://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages) • Далее пример для Web-разработки © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 30
  • 31. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 31
  • 32. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 32
  • 33. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 33
  • 34. Популярность языков (4) • По опросу участников проекта Stack Overflow: Stack Overflow's Developer Survey Results – Technologies (http://insights.stackoverflow.com/survey/2018/#technology) • Далее наиболее используемые Programming, Scripting, and Markup Languages по мнению профессиональных программистов © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 34
  • 35. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 35
  • 36. © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 36
  • 37. Продуктивность языка программирования ✓ Продуктивность как комплексная характеристика ✓ Исследования продуктивности ✓ Платформы и «фреймворки» ✓ Удобство создания DSL как один из критериев © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 37
  • 38. Продуктивность • Продуктивность [productivity] – комплексная характеристика эффективности работы программиста • Краткость • Идиоматичность • Удобочитаемость • Удобство рефакторинга • Надёжность и безопасность • Модуляризация, адаптированная для решения архитектурных вопросов • Возможность создания и проверки корректности DSL (Domain-Specific Language) • … © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 38
  • 39. Продуктивность – обсуждение (1) • What are the best (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages? (http://www.slant.co/topics/5984/~productivity-enhancing-well- designed-and-concise-rather-than-just-popular-or-time-tested-programming- lang) • Рейтинг: © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 39 Elixir Python Nim Smalltalk Scheme Elm Rust Clojure Haskell Kotlin Racket Go Common Lisp C# F# Scala Julia D OCaml Ruby
  • 40. Продуктивность – обсуждение (2) • Dr.Dobb – The Comparative Productivity of Programming Languages (http://www.drdobbs.com/jvm/the-comparative-productivity-of-programm/240005881) • 2011 год • Данные ISBSG (http://isbsg.org) • Более 6000 проектов © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 40 Язык Часов на функцию ASP 06.1 Visual Basic 08.5 Java 10.6 SQL 10.8 C++ 12.4 C 13.0 C# 15.5 PL/1 14.2 COBOL 16.8 ABAP 19.9
  • 41. Продуктивность – обсуждение (3) • Prechelt L. An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for a search/string-processing program. 2000 (http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprtTR.pdf) • Gat E. Lisp as an Alternative to Java. 2000 (http://www.flownet.com/gat/papers/lisp- java.pdf) • Barnes C.: © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 41 Среднее время решения задачи, часов
  • 42. Платформы и «фреймворки» © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 42 ПриложенияПриложения Операционная система Библиотеки Приложение Платформа разработки Технологии хранения данных Технологии коммуникации Технологии идентификации Платформа развёртывания Инфраструктурная платформа Прикладная платформа Приложения …
  • 43. Революция платформ разработки • «Фреймворк» [framework] – то что позволяет непосредственно в момент начала над программным проектом получить программу, умеющую «всё, кроме того, что нужно» • Управление пользователями • Сессии и персистентность • Сервер среднего слоя и управление масштабированием • Доступ к источникам данных • Средства организации интерфейса с пользователем и создания отчётов • Кросплатформенность • ... • Вопрос: • Какой объём занимает новая программа, основанная на популярных фремворках, даже если программист не написал ещё ни одной строки собственного кода? © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 43
  • 44. Наиболее популярный язык склейки, прототипирования и анализа данных • Python (http://www.python.org) • Текущая версия 3.7 • Активно идёт подготовка к версии 4 • Именно его мы изучаем • Некоторые web-фреймворки • Django: the Web framework for perfectionists with deadlines (http://www.djangoproject.com) • TurboGears: the Web framework that scales with you (http://www.turbogears.org) • Flask: microframework for Web (http://flask.pocoo.org) • Tornado: a Python web framework and asynchronous networking library (http://www.tornadoweb.org) • CherryPy: a minimalist Python Web framework (http://cherrypy.org) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 44
  • 45. Новые высокопродуктивные языки • Rust (http://www.rust-lang.org) • Язык надёжного системного программирования • Текущая версия 1.30 • Julia (http://julialang.org) • Язык вычислительной математики и ИИ • Текущая версия 1.1 • NIM (http://nim-lang.org) • Универсальный высокопродуктивный язык • Компилируется в С • Текущая версия 0.19 © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 45
  • 46. Другие примеры и обсуждение • Пять перспективных языков программирования со светлым будущим (http://habr.com/post/310252/) • 2016 год • Особенно интересны комментарии! • Языки • Rust – уже упоминался • Elm (http://elixir-lang.org) • Kotlin (http://kotlinlang.org) • Crystal (http://crystal-lang.org) • Elixir (http://elixir-lang.org) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 46
  • 47. А специально для обучения? • Racket (http://racket-lang.org) • Текущая версия 7.1 • Функциональный, дальний потомок Lisp и Scheme • Удобен и оптимизирован для создания DSL! (http://beautifulracket.com/appendix/domain-specific-languages.html) • Flatt M. Creating Languages in Racket. Communications of the ACM, 55(1), 2012. pp. 48-56. (http://queue.acm.org/detail.cfm?id=2068896) • Примеры DSL: • brag: a better Racket AST generator (http://docs.racket-lang.org/brag/) • Для создания парсеров по BNF-нотации • Datalog: Deductive Database Programming (http://docs.racket-lang.org/datalog/) • Язык дедуктивного (логического) программирования • Scribble: The Racket Documentation Tool (http://docs.racket-lang.org/scribble/) • Язык создания документации (в том числе документации языка Racket) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 47
  • 48. Языки для высокопродуктивной математики • R – The R Project for Statistical Computing (http://www.r-project.org) • CRAN – The Comprehensive R Archive Network (http://cran.r-project.org) • Wolfram language (http://www.wolfram.com/language/) • MathWorks Matlab (http://www.mathworks.com/help/matlab/language-fundamentals.html) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 48
  • 49. Но это ещё не конец?! Спасибо за внимание к тёмным углам в обучении программированию! Контакты: •Алексей Незнанов • International Laboratory for Intelligent System and Structural Analysis, NRU HSE, Moscow, Russia • School of Data Analysis and Artificial Intelligence, Faculty of Computer Science, NRU HSE, Moscow, Russia • E-mail: aneznanov@hse.ru • Web-site: http://hse.ru/staff/aneznanov • Blog: http://siberianshamanssongs.blogspot.ru (RU) © 2018, Незнанов А.А., МНУЛ ИССА ФКН НИУ ВШЭ 49