SlideShare a Scribd company logo
Карта знаний
инженера-программиста
Тимур Шемсединов
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...
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
github.com/tshemsedinov
github.com/HowProgrammingWorks/Dictionary
meetup.com/HowProgrammingWorks
t.me/HowProgrammingWorks
t.me/NodeUA
meetup.com/NodeUA

More Related Content

PDF
Node.js for enterprise 2021 - JavaScript Fwdays 3
PDF
Rethinking low-code
PPTX
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
PPTX
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
PPTX
закон иерархических компенсаций седова и C++ core guidelines
PDF
C++ осень 2013 лекция 1
PDF
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
PDF
How to get knowledge and improve it all your professional life long
Node.js for enterprise 2021 - JavaScript Fwdays 3
Rethinking low-code
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
закон иерархических компенсаций седова и C++ core guidelines
C++ осень 2013 лекция 1
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
How to get knowledge and improve it all your professional life long

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

PDF
Парадигмы программирования
PDF
Тимур Лукин - Архитектура и проектирование ПО
PPTX
Составные части объектного подхода
PDF
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
POTX
Как жить в согласии с SOLID?
PDF
C# Desktop. Занятие 01.
PDF
C++ Базовый. Занятие 01.
PDF
терминология vol.2
PDF
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
PPTX
06 Архитектура информационных систем. Паттерны и фреймворки
PDF
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
PPTX
Моделеориентированность в инженерии
PPTX
разработка бизнес приложений (7)
PPTX
ООП. Рекомендуемые информационные ресурсы
PPTX
разработка бизнес приложений (9)
PPTX
Software engineering. Введение в специальность. Проектирование, требования
PDF
Собеседование на позицию Java Developer
PDF
Programming Concepts
PDF
Дизайн больших приложений в ФП
PPTX
Software Engineering Knowledge Matrix
Парадигмы программирования
Тимур Лукин - Архитектура и проектирование ПО
Составные части объектного подхода
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Как жить в согласии с SOLID?
C# Desktop. Занятие 01.
C++ Базовый. Занятие 01.
терминология vol.2
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
06 Архитектура информационных систем. Паттерны и фреймворки
SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределе...
Моделеориентированность в инженерии
разработка бизнес приложений (7)
ООП. Рекомендуемые информационные ресурсы
разработка бизнес приложений (9)
Software engineering. Введение в специальность. Проектирование, требования
Собеседование на позицию Java Developer
Programming Concepts
Дизайн больших приложений в ФП
Software Engineering Knowledge Matrix
Ad

More from Timur Shemsedinov (20)

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

Карта знаний инженера-программиста // 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...