SlideShare a Scribd company logo
1 of 39
Download to read offline
Карта знаний
инженера-программиста
Тимур Шемсединов
2018
#1 Проблемы отрасли
Инженерное образование
- курсы ВУЗов
- общепринятая терминология
- статьи и видео в интернетах
- накопление опыта
#2 Проблемы отрасли
В современном мире делать хорошо невыгодно
- писать хорошо - сложно, долго и дорого
- все уже можно найти и склеить
- все вроде есть, пока чего не хватишься...
- программируем на мусорку
#3 Проблемаы отрасли
Программная инженерия оторвалась от науки
- не отвечает на вопрос почему так, а не иначе
- программируем на фреймворках
- нет научного осмысления паттернов и приемов
- маркетологи уничтожат цивилизацию...
#4 Проблемаы отрасли
Сложность интеграции
- по частям есть, но не вместе
- связать сложнее, чем разработать часть
- стыки должны совпадать
- как устроено внутри
#5 Понимание инженерии ПО
Это наука?
Да, мы должны использовать научный метод,
измерения, анализ, эксперименты, логические
выводы
Это технологии?
Да, мы используем знания для получения
конкретной пользы от программного
обеспечения
#6 Понимание инженерии ПО
Это бизнес?
Да, ИТ компании используют зависимость
заказчиков для конвертации кода, времени и
прав в деньги
Это искусство?
Да, мы все же применяем наш вкус и интуицию,
чтобы сделать лучше
#7 Определения
Программирование это решение задач при
помощи вычислительной техники, управляемой
программным обеспечением.
Программная инженерия включает в себя
исследования, архитектуру, проектирование,
разработку, тестирование, внедрение и поддержку
программных систем.
#8 Основы
Математика
Алгебры, логика, топология, матанализ,
дискретная и компьютерная математика, теория
множеств, графов, категорий, вероятностей...
Электроника
Аналоговая и цифровая полупроводниковая
электроника, микроконтроллеры,
микропроцессоры, сети, память, накопители
#9 Основы
Алгоритмы
Теория алгоритмов, конечные автоматы, машина
Тьюринга, архитектура фон Неймана, теория
компиляторов
Абстрактное мышление
Моделирование, системный анализ, построение
абстракций данных и управления
#10 Моделирование
Модель это упрощенная система которая
воспроизводит поведение и структуру реальной
системы в одном или нескольких аспектах.
Мы применяем компьютерное моделирование
для исследования, экспериментов,
построения ПО и ИС.
#11 Классификация моделей
Модели процесса решения задачи
Модель результата
Модель предметной области
#12 Классификация моделей
Модели процесса решения задачи
- императивные пошаговые алгоритмы
- ветвление
- деревья решений
- логическое программирование
#13 Классификация моделей
Модель результата
- Декларативное программирование
(описывает результат)
- Функциональное программирование
(результат как функция)
#14 Классификация моделей
Модель предметной области
- ООП и прототипное программирование
- автоматное программирование,
- реактивное программирование,
- DSL (формальный синтаксис описания
предметной области)
#15 Парадигмы
Парадигма программирования это
непротиворечивый набор концепций и
фундаментальных идей для моделирования
(как аксиомы для математики)
• утверждения и допущения
• структуры и ограничени
• подход, стиль и методика
#16 Дерево парадигм
┣━ Imperative
┃ ┣━ Non-structured
┃ ┗━ Structured
┃ ┗━ Procedural
┃ ┗━ Object-oriented and Prototype
┣━ Declarative
┃ ┣━ Functional
┃ ┗━ Logical
┣━ Data-driven
┗━ Generic
#17 Технологии и техники
Асинхронное программирование
(reactor, event loop)
Параллельное и распределенное
программирование, исполнение на
многопроцессорных системах
Объектно-ориентированный подход:
анализ, проектирование и программирование
Визуальное программирование (ER, RUP, CAD/CAM)
#18 Разница парадигм
Императивная
• Алгоритмический подход и пошаговое исполнение
• Изменение значений переменных
• Условные переходы и циклы
Функциональная
• Функции, выражения и суперпозиция
• Возможно параллельное исполнение
• Не меняем аргументы, нет переменных
• Рекурсивные вызовы вместо циклов
#19 Что общего в парадигмах
Императивная
• Построение абстракций, композиция
• Наследование (ООП, прототипы)
• Полиморфизм и инкапсуляция
Функциональная
• Построение абстракций, композиция
• Частичное применение и каррирование
• Замыкания, функторы, монады
#20 Прочие парадигмы и техники
• Реактивное программирование
• Событийно-ориентированное
• Функционально-реактивное
• Модель акторов
• Мультипарадигменное программирование
• Метапрограммирование
#21 Два основных направления
Системное программирование
Прикладное программирование
#22 Задачи прог. инженерии
Справиться со сложностью
Управление состоянием
Структура и архитектура
#23 Задачи прог. инженерии
Справиться со сложностью
• Сложность задачи
(декомпозиция и модель)
• Спрятать сложность
(модули, слои, черный ящик)
#24 Задачи прог. инженерии
Управление состоянием
• Предотвращение скрытого состояния
• Минимизация глобального состояния
• Предотвращение комбинаторного взрыва
#25 Задачи прог. инженерии
Структура и архитектура
• декомпозиция
• именование
• связывание
#26 Преодоление сложности
Принцип одной ответственности
Запрет перемешивания абстракций слоев
(доступ к данным, бизнес-логика, сеть, UI)
#27 Преодоление сложности
Компонентный подход
увеличение переиспользования
кода и надежности
Отделение прикладного кода от системного.
Выделение и вынесение наружу
системных библиотек, инструментов,
DSL из проектов
#28 Связывание данных и логики
Максимальное разделение
• API or lib + data structures
• Анемичная модель предметной области
• MVC, MVP, MVVP patterns
#29 Связывание данных и логики
Комбинирование
• Часто в императивном, процедурном и
обобщенном программировании
• Иногда в функциональном (функуторы, монады)
• Почти всегда в ООП и компонентном подходе
#30 С чего начинать
Data- со структур данных или классов
centric начинаем с ERD и схем БД
Process- начинаем с моделей бизнес процессов
сentric начинаем с модели процессов обработки
UI- начинаем с UI/UX и набросков дизайна
сentric пользователь нарисовал мне тут...
#31 С чего начинать
Инженер все вместе держит в голове
Нет другого решения
#32 Системная интеграция
Оказалось, что все вместе собрать можно, только если
все по частям было так спроектировано, что
предполагалась сборка.
Определение интерфейсов и контрактов
• Спецификация API
• Выбор коммуникационных шаблонов
req/rep, pub/sub
• Выбор протоколов: RPC, Bus, Queue...
#33 Системная интеграция
Определение структур данных
Внешние и внутренние стандарты, спецификации
#34 Data types and structures
Scalar data types, Composite data types, Array, List,
ArrayList, Set, Map, WeakSet, WeakMap, Hash table,
Queue, Stack and Deque, Trees: binary tree, 3-linked
and 5-linked trees, BTree, K-d tree, Graphs, Buffer,
Circular buffer, Struct/Record, Anemic objects, Boxing,
Monad, Heap, Associative array, Iterable, Enumerable,
BLOB, Priority Queue, Async Queue, Unrolled list,
Bitmap, AVL Tree, Red-black Tree, Fibonacci heap,
Decision diagram, Directed acyclic graph, etc.
#35 Abstractions and more...
Pure function, side effects, Curry, Higher-order
functions, Partial application, Prototype, Mixin, Class,
Lambda and Arrow-function, Lambda mixin, Callback,
Factory, Pool, Poolified factory, Async Pool, Flag,
Mutex, Lazy evaluation, Chaining, Closure, Inheritance,
Generator, Decorator, Functor, Functional object,
Monad, Socket, Iterator, async iterator, Deferred,
Promise, Future, async/await, Async composition,
Descriptor, Listener, Event, Singleton, Wrapper,
#36 More and more...
Scaffolding and Reflection, Inversion of Control and
Dependency Injection, Proxy, Symbol, Sandboxing, IPC,
ORM, Transaction, Metadata, Protocol, Interface,
Garbage Collection, Pipe, Stream, Binding, Cluster,
Query Cursor, Continuous Integration, Mutable and
Immutable data structures, Conflict-free data
structures, State, Hashing, Memoization,
Table-function, Promisify/Callbackify, Indirect
inheritance, Composition, Lense, Atomix, Projection...
github.com/tshemsedinov
github.com/HowProgrammingWorks/Dictionary
meetup.com/HowProgrammingWorks
t.me/HowProgrammingWorks
t.me/NodeUA
meetup.com/NodeUA

More Related Content

Similar to Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018

3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложенийKewpaN
 
А.Левенчук -- Образование по машинному обучению
А.Левенчук -- Образование по машинному обучениюА.Левенчук -- Образование по машинному обучению
А.Левенчук -- Образование по машинному обучениюAnatoly Levenchuk
 
How to get knowledge and improve it all your professional life long
How to get knowledge and improve it all your professional life longHow to get knowledge and improve it all your professional life long
How to get knowledge and improve it all your professional life longTimur Shemsedinov
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодCUSTIS
 
Практики жизненного цикла систем машинного обучения
Практики жизненного цикла систем машинного обученияПрактики жизненного цикла систем машинного обучения
Практики жизненного цикла систем машинного обученияCEE-SEC(R)
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovMaxim Tsepkov
 
Представление знаний в технических системах
Представление знаний в технических системахПредставление знаний в технических системах
Представление знаний в технических системахAnatoly Levenchuk
 
А.Левенчук -- Практики системной инженерии
А.Левенчук -- Практики системной инженерииА.Левенчук -- Практики системной инженерии
А.Левенчук -- Практики системной инженерииAnatoly Levenchuk
 
D2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designD2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designDev2Dev
 
Проектирование интерфейсов
Проектирование интерфейсовПроектирование интерфейсов
Проектирование интерфейсовVladimir Zimin
 
Системная инженерия в России и мире
Системная инженерия в России и миреСистемная инженерия в России и мире
Системная инженерия в России и миреAnatoly Levenchuk
 
Продюссирование, проект-менеджмент
Продюссирование, проект-менеджментПродюссирование, проект-менеджмент
Продюссирование, проект-менеджментNimax
 
Управление проектами
Управление проектами Управление проектами
Управление проектами Nimax
 
В.Мизгулин -- программа магистратуры по системной инженерии
В.Мизгулин -- программа магистратуры по системной инженерииВ.Мизгулин -- программа магистратуры по системной инженерии
В.Мизгулин -- программа магистратуры по системной инженерииAnatoly Levenchuk
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийAlexander Kalouguine
 
МАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыМАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыОлег Гудаев
 
Основы концептуального проектирования
Основы концептуального проектированияОсновы концептуального проектирования
Основы концептуального проектированияAnton Tyukov
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыPavel Shalagin
 

Similar to Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018 (20)

3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений3 средства автоматизации проектирования корпоративных приложений
3 средства автоматизации проектирования корпоративных приложений
 
А.Левенчук -- Образование по машинному обучению
А.Левенчук -- Образование по машинному обучениюА.Левенчук -- Образование по машинному обучению
А.Левенчук -- Образование по машинному обучению
 
How to get knowledge and improve it all your professional life long
How to get knowledge and improve it all your professional life longHow to get knowledge and improve it all your professional life long
How to get knowledge and improve it all your professional life long
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
Практики жизненного цикла систем машинного обучения
Практики жизненного цикла систем машинного обученияПрактики жизненного цикла систем машинного обучения
Практики жизненного цикла систем машинного обучения
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
 
Представление знаний в технических системах
Представление знаний в технических системахПредставление знаний в технических системах
Представление знаний в технических системах
 
А.Левенчук -- Практики системной инженерии
А.Левенчук -- Практики системной инженерииА.Левенчук -- Практики системной инженерии
А.Левенчук -- Практики системной инженерии
 
Task-Centered Design
Task-Centered DesignTask-Centered Design
Task-Centered Design
 
D2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering designD2D Чипец 2 Виталий Мазуревич - Engeneering design
D2D Чипец 2 Виталий Мазуревич - Engeneering design
 
Проектирование интерфейсов
Проектирование интерфейсовПроектирование интерфейсов
Проектирование интерфейсов
 
Системная инженерия в России и мире
Системная инженерия в России и миреСистемная инженерия в России и мире
Системная инженерия в России и мире
 
Продюссирование, проект-менеджмент
Продюссирование, проект-менеджментПродюссирование, проект-менеджмент
Продюссирование, проект-менеджмент
 
Управление проектами
Управление проектами Управление проектами
Управление проектами
 
Техник-программист
Техник-программистТехник-программист
Техник-программист
 
В.Мизгулин -- программа магистратуры по системной инженерии
В.Мизгулин -- программа магистратуры по системной инженерииВ.Мизгулин -- программа магистратуры по системной инженерии
В.Мизгулин -- программа магистратуры по системной инженерии
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требований
 
МАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системыМАПО 2013 Лекция 06 CASE-системы
МАПО 2013 Лекция 06 CASE-системы
 
Основы концептуального проектирования
Основы концептуального проектированияОсновы концептуального проектирования
Основы концептуального проектирования
 
ПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектурыПиАПС, Лекция №1б - Представление архитектуры
ПиАПС, Лекция №1б - Представление архитектуры
 

More from Timur Shemsedinov

How to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.jsHow to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.jsTimur Shemsedinov
 
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...Timur Shemsedinov
 
Multithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptMultithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptTimur Shemsedinov
 
Node.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasksNode.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasksTimur Shemsedinov
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Timur Shemsedinov
 
FwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.jsFwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.jsTimur Shemsedinov
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceTimur Shemsedinov
 
Node.js middleware: Never again!
Node.js middleware: Never again!Node.js middleware: Never again!
Node.js middleware: Never again!Timur Shemsedinov
 
Race-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memoryRace-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memoryTimur Shemsedinov
 
Asynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingAsynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingTimur Shemsedinov
 
Information system structure and architecture
Information system structure and architectureInformation system structure and architecture
Information system structure and architectureTimur Shemsedinov
 

More from Timur Shemsedinov (20)

How to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.jsHow to use Chat GPT in JavaScript optimizations for Node.js
How to use Chat GPT in JavaScript optimizations for Node.js
 
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
IT Revolution in 2023-2024: AI, GPT, business transformation, future professi...
 
Multithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScriptMultithreading in Node.js and JavaScript
Multithreading in Node.js and JavaScript
 
Node.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasksNode.js threads for I/O-bound tasks
Node.js threads for I/O-bound tasks
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021
 
Hat full of developers
Hat full of developersHat full of developers
Hat full of developers
 
FwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.jsFwDays 2021: Metarhia Technology Stack for Node.js
FwDays 2021: Metarhia Technology Stack for Node.js
 
Node.js for enterprise - JS Conference
Node.js for enterprise - JS ConferenceNode.js for enterprise - JS Conference
Node.js for enterprise - JS Conference
 
Node.js in 2021
Node.js in 2021Node.js in 2021
Node.js in 2021
 
Node.js middleware: Never again!
Node.js middleware: Never again!Node.js middleware: Never again!
Node.js middleware: Never again!
 
Patterns and antipatterns
Patterns and antipatternsPatterns and antipatterns
Patterns and antipatterns
 
Race-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memoryRace-conditions-web-locks-and-shared-memory
Race-conditions-web-locks-and-shared-memory
 
Asynchronous programming and mutlithreading
Asynchronous programming and mutlithreadingAsynchronous programming and mutlithreading
Asynchronous programming and mutlithreading
 
Node.js in 2020 - part 3
Node.js in 2020 - part 3Node.js in 2020 - part 3
Node.js in 2020 - part 3
 
Node.js in 2020 - part 2
Node.js in 2020 - part 2Node.js in 2020 - part 2
Node.js in 2020 - part 2
 
Information system structure and architecture
Information system structure and architectureInformation system structure and architecture
Information system structure and architecture
 
Node.js in 2020 - part 1
Node.js in 2020 - part 1Node.js in 2020 - part 1
Node.js in 2020 - part 1
 
Web Locks API
Web Locks APIWeb Locks API
Web Locks API
 
Node.js in 2020
Node.js in 2020Node.js in 2020
Node.js in 2020
 
Введение в SQL
Введение в SQLВведение в SQL
Введение в SQL
 

Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018

  • 2. #1 Проблемы отрасли Инженерное образование - курсы ВУЗов - общепринятая терминология - статьи и видео в интернетах - накопление опыта
  • 3. #2 Проблемы отрасли В современном мире делать хорошо невыгодно - писать хорошо - сложно, долго и дорого - все уже можно найти и склеить - все вроде есть, пока чего не хватишься... - программируем на мусорку
  • 4. #3 Проблемаы отрасли Программная инженерия оторвалась от науки - не отвечает на вопрос почему так, а не иначе - программируем на фреймворках - нет научного осмысления паттернов и приемов - маркетологи уничтожат цивилизацию...
  • 5. #4 Проблемаы отрасли Сложность интеграции - по частям есть, но не вместе - связать сложнее, чем разработать часть - стыки должны совпадать - как устроено внутри
  • 6. #5 Понимание инженерии ПО Это наука? Да, мы должны использовать научный метод, измерения, анализ, эксперименты, логические выводы Это технологии? Да, мы используем знания для получения конкретной пользы от программного обеспечения
  • 7. #6 Понимание инженерии ПО Это бизнес? Да, ИТ компании используют зависимость заказчиков для конвертации кода, времени и прав в деньги Это искусство? Да, мы все же применяем наш вкус и интуицию, чтобы сделать лучше
  • 8. #7 Определения Программирование это решение задач при помощи вычислительной техники, управляемой программным обеспечением. Программная инженерия включает в себя исследования, архитектуру, проектирование, разработку, тестирование, внедрение и поддержку программных систем.
  • 9. #8 Основы Математика Алгебры, логика, топология, матанализ, дискретная и компьютерная математика, теория множеств, графов, категорий, вероятностей... Электроника Аналоговая и цифровая полупроводниковая электроника, микроконтроллеры, микропроцессоры, сети, память, накопители
  • 10. #9 Основы Алгоритмы Теория алгоритмов, конечные автоматы, машина Тьюринга, архитектура фон Неймана, теория компиляторов Абстрактное мышление Моделирование, системный анализ, построение абстракций данных и управления
  • 11. #10 Моделирование Модель это упрощенная система которая воспроизводит поведение и структуру реальной системы в одном или нескольких аспектах. Мы применяем компьютерное моделирование для исследования, экспериментов, построения ПО и ИС.
  • 12. #11 Классификация моделей Модели процесса решения задачи Модель результата Модель предметной области
  • 13. #12 Классификация моделей Модели процесса решения задачи - императивные пошаговые алгоритмы - ветвление - деревья решений - логическое программирование
  • 14. #13 Классификация моделей Модель результата - Декларативное программирование (описывает результат) - Функциональное программирование (результат как функция)
  • 15. #14 Классификация моделей Модель предметной области - ООП и прототипное программирование - автоматное программирование, - реактивное программирование, - DSL (формальный синтаксис описания предметной области)
  • 16. #15 Парадигмы Парадигма программирования это непротиворечивый набор концепций и фундаментальных идей для моделирования (как аксиомы для математики) • утверждения и допущения • структуры и ограничени • подход, стиль и методика
  • 17. #16 Дерево парадигм ┣━ Imperative ┃ ┣━ Non-structured ┃ ┗━ Structured ┃ ┗━ Procedural ┃ ┗━ Object-oriented and Prototype ┣━ Declarative ┃ ┣━ Functional ┃ ┗━ Logical ┣━ Data-driven ┗━ Generic
  • 18. #17 Технологии и техники Асинхронное программирование (reactor, event loop) Параллельное и распределенное программирование, исполнение на многопроцессорных системах Объектно-ориентированный подход: анализ, проектирование и программирование Визуальное программирование (ER, RUP, CAD/CAM)
  • 19. #18 Разница парадигм Императивная • Алгоритмический подход и пошаговое исполнение • Изменение значений переменных • Условные переходы и циклы Функциональная • Функции, выражения и суперпозиция • Возможно параллельное исполнение • Не меняем аргументы, нет переменных • Рекурсивные вызовы вместо циклов
  • 20. #19 Что общего в парадигмах Императивная • Построение абстракций, композиция • Наследование (ООП, прототипы) • Полиморфизм и инкапсуляция Функциональная • Построение абстракций, композиция • Частичное применение и каррирование • Замыкания, функторы, монады
  • 21. #20 Прочие парадигмы и техники • Реактивное программирование • Событийно-ориентированное • Функционально-реактивное • Модель акторов • Мультипарадигменное программирование • Метапрограммирование
  • 22. #21 Два основных направления Системное программирование Прикладное программирование
  • 23. #22 Задачи прог. инженерии Справиться со сложностью Управление состоянием Структура и архитектура
  • 24. #23 Задачи прог. инженерии Справиться со сложностью • Сложность задачи (декомпозиция и модель) • Спрятать сложность (модули, слои, черный ящик)
  • 25. #24 Задачи прог. инженерии Управление состоянием • Предотвращение скрытого состояния • Минимизация глобального состояния • Предотвращение комбинаторного взрыва
  • 26. #25 Задачи прог. инженерии Структура и архитектура • декомпозиция • именование • связывание
  • 27. #26 Преодоление сложности Принцип одной ответственности Запрет перемешивания абстракций слоев (доступ к данным, бизнес-логика, сеть, UI)
  • 28. #27 Преодоление сложности Компонентный подход увеличение переиспользования кода и надежности Отделение прикладного кода от системного. Выделение и вынесение наружу системных библиотек, инструментов, DSL из проектов
  • 29. #28 Связывание данных и логики Максимальное разделение • API or lib + data structures • Анемичная модель предметной области • MVC, MVP, MVVP patterns
  • 30. #29 Связывание данных и логики Комбинирование • Часто в императивном, процедурном и обобщенном программировании • Иногда в функциональном (функуторы, монады) • Почти всегда в ООП и компонентном подходе
  • 31. #30 С чего начинать Data- со структур данных или классов centric начинаем с ERD и схем БД Process- начинаем с моделей бизнес процессов сentric начинаем с модели процессов обработки UI- начинаем с UI/UX и набросков дизайна сentric пользователь нарисовал мне тут...
  • 32. #31 С чего начинать Инженер все вместе держит в голове Нет другого решения
  • 33. #32 Системная интеграция Оказалось, что все вместе собрать можно, только если все по частям было так спроектировано, что предполагалась сборка. Определение интерфейсов и контрактов • Спецификация API • Выбор коммуникационных шаблонов req/rep, pub/sub • Выбор протоколов: RPC, Bus, Queue...
  • 34. #33 Системная интеграция Определение структур данных Внешние и внутренние стандарты, спецификации
  • 35. #34 Data types and structures Scalar data types, Composite data types, Array, List, ArrayList, Set, Map, WeakSet, WeakMap, Hash table, Queue, Stack and Deque, Trees: binary tree, 3-linked and 5-linked trees, BTree, K-d tree, Graphs, Buffer, Circular buffer, Struct/Record, Anemic objects, Boxing, Monad, Heap, Associative array, Iterable, Enumerable, BLOB, Priority Queue, Async Queue, Unrolled list, Bitmap, AVL Tree, Red-black Tree, Fibonacci heap, Decision diagram, Directed acyclic graph, etc.
  • 36. #35 Abstractions and more... Pure function, side effects, Curry, Higher-order functions, Partial application, Prototype, Mixin, Class, Lambda and Arrow-function, Lambda mixin, Callback, Factory, Pool, Poolified factory, Async Pool, Flag, Mutex, Lazy evaluation, Chaining, Closure, Inheritance, Generator, Decorator, Functor, Functional object, Monad, Socket, Iterator, async iterator, Deferred, Promise, Future, async/await, Async composition, Descriptor, Listener, Event, Singleton, Wrapper,
  • 37. #36 More and more... Scaffolding and Reflection, Inversion of Control and Dependency Injection, Proxy, Symbol, Sandboxing, IPC, ORM, Transaction, Metadata, Protocol, Interface, Garbage Collection, Pipe, Stream, Binding, Cluster, Query Cursor, Continuous Integration, Mutable and Immutable data structures, Conflict-free data structures, State, Hashing, Memoization, Table-function, Promisify/Callbackify, Indirect inheritance, Composition, Lense, Atomix, Projection...
  • 38.