SlideShare a Scribd company logo
const fs = require('fs'); const compose = (...funcs) => x => funcs.
reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab
table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma
=> (row.map((cell, i) => { const width = cellWidth[i]; return i ? c
toString().padStart(width) : cell.padEnd(width); }).join(''))).join
}; const proportion = (max, val) => Math.round(val * 100 / max); co
calcProportion = table => { table.sort((row1, row2) => row2[DENSITY
row1[DENSITY_COL]); const maxDensity = table[0][DENSITY_COL]; table
forEach(row => { row.push(proportion(maxDensity, row[DENSITY_COL]))
return table; }; const getDataset = file => { const lines = fs.read
FileSync(file, 'utf8').toString().split('n'); lines.shift(); lines
return lines.map(line => line.split(',')); }; const main = compose
(getDataset, calcProportion, renderTable); const fs = require('fs'
compose = (...funcs) => x => funcs.reduce((x, fn) => fn(x), x); con
DENSITY_COL = 3; const renderTable = table => { const cellWidth = [
8, 8, 18, 6]; return table.map(row => (row.map((cell, i) => { const
= cellWidth[i]; return i ? cell.toString().padStart(width) : cell.p
(width); }).join(''))).join('n'); }; const proportion = (max, val)
Как повышать свою
квалификацию всю жизнь
Тимур Шемсединов
github.com/HowProgrammingWorks
Chief Software Architect, Metarhia
Kiev Polytechnic Institute, SE Infotech, MIA
github.com/tshemsedinov
#1 Что нужно знать?
Обычно начинают с:
- языки программирования
- библиотеки и фреймворки
- олимпиадные задачи
- задачи для собеседований
#2 Что нужно знать?
Это все чушь собачья:
- языки программирования
- библиотеки и фреймворки
- олимпиадно-ориентированное п.
- собеседование-ориентированное п.
#3 Что нужно знать?
Чтоб быть полноценным инженером
- парадигмы программирования
- предметная область
- широкая техническая эрудиция
- абстрактное мышление
- коммуникативные способности
#4 Откуда брать знания?
Зато мы знаем, где нас научат:
- курсы ВУЗов
- статьи и видео в интернетах
- в компаниях научат
- на своих проектах научусь
#5 Откуда брать знания?
Бред сумасшедшего:
- курсы ВУЗов
- статьи и видео в интернетах
- в компаниях научат
- на своих проектах научусь
#6 Откуда брать знания?
Но мы добудем знания:
- перенять у профессионала
- участвовать в OpenSource разработке
- опыт в сложной предметной области
- смежные области знаний
- учить других
#7 Проблемы отрасли
В современном мире делать хорошо невыгодно
- писать хорошо - сложно, долго и дорого
- все уже можно найти и склеить
- все вроде есть, пока чего не хватишься...
- программируем на мусорку
#8 Проблемаы отрасли
Программная инженерия оторвалась от науки
- не отвечает на вопрос почему так, а не иначе
- программируем на фреймворках
- нет научного осмысления паттернов и приемов
- маркетологи уничтожат цивилизацию...
#9 Проблемаы отрасли
Сложность интеграции
- по частям есть, но не вместе
- связать сложнее, чем разработать часть
- стыки должны совпадать
- как устроено внутри
#10 Дерево парадигм
┣━ Imperative
┃ ┣━ Non-structured
┃ ┗━ Structured
┃ ┗━ Procedural
┃ ┗━ Object-oriented and Prototype
┣━ Declarative
┃ ┣━ Functional
┃ ┗━ Logical
┣━ Data-driven
┗━ Generic
#11 Технологии и техники
Асинхронное программирование
(reactor, event loop)
Параллельное и распределенное
программирование, исполнение на
многопроцессорных системах
Объектно-ориентированный подход:
анализ, проектирование и программирование
Визуальное программирование (ER, RUP, CAD/CAM)
#12 Разница парадигм
Императивная
• Алгоритмический подход и пошаговое исполнение
• Изменение значений переменных
• Условные переходы и циклы
Функциональная
• Функции, выражения и суперпозиция
• Возможно параллельное исполнение
• Не меняем аргументы, нет переменных
• Рекурсивные вызовы вместо циклов
#13 Что общего в парадигмах
Императивная
• Построение абстракций, композиция
• Наследование (ООП, прототипы)
• Полиморфизм и инкапсуляция
Функциональная
• Построение абстракций, композиция
• Частичное применение и каррирование
• Замыкания, функторы, монады
#14 Прочие парадигмы и техники
• Реактивное программирование
• Событийно-ориентированное
• Функционально-реактивное
• Модель акторов
• Мультипарадигменное программирование
• Метапрограммирование
#15 Мультипарадигменность
Мультипарадигменное программирование это
• знать сильные и слабые стороны
• выбор парадигмы под задачу
• как сочетать несколько парадигм
#16 Метапрограммирование
Метапрограммирование это
• Интроспекция и рефлексия
• Метаданные и метамодели
• Динамическое связывание
• Специализированные языки DSL
#17 Как не деградировать?
на однотипных и неинтересных задачах
• Cookie cutter - подумал эксплуататор
• Monkey job - подумал эксплуатируемый
#18 Как не деградировать?
на однотипных и неинтересных задачах
• Эксплуататору лучше думать - SaaS
• Эксплуатируемуму лучше думать -
системное программирование
#19 Как же найти общий язык?
между разными специальностями в разработке
• Банально - разговаривать
• По умному - формализация
#20 Как же найти общий язык?
Виды формализации
• Шаблоны
• Стандарты: RFC, Ecma, ISO...
• Модели: UML, ERD...
• Методологии: RUP, Agile…
• Формальные языки
#21 Задачи прог. инженерии
Справиться со сложностью
Управление состоянием
Структура и архитектура
#22 Задачи прог. инженерии
Справиться со сложностью
• Сложность задачи
(декомпозиция и модель)
• Спрятать сложность
(модули, слои, черный ящик)
#23 Задачи прог. инженерии
Управление состоянием
• Предотвращение скрытого состояния
• Минимизация глобального состояния
• Предотвращение комбинаторного взрыва
#24 Задачи прог. инженерии
Структура и архитектура
• декомпозиция
• именование
• связывание
#25 Преодоление сложности
Компонентный подход
увеличение переиспользования
кода и надежности
Отделение прикладного кода от системного.
Выделение и вынесение наружу
системных библиотек, инструментов,
DSL из проектов
#26 Связывание данных и логики
• Объединение
• Разделение
#27 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.
#28 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,
#29 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...
How to get knowledge and improve it all your professional life long
github.com/tshemsedinov
github.com/HowProgrammingWorks/Dictionary
100 видео-лекций по программированию
habr.com/post/427799
meetup.com/HowProgrammingWorks
meetup.com/NodeUA
t.me/HowProgrammingWorks
t.me/NodeUA

More Related Content

PDF
Нейронные сети и Keras. Часть 2
PDF
20130429 dynamic c_c++_program_analysis-alexey_samsonov
PPTX
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
PPTX
Статический анализ кода
PPTX
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
PDF
Модель памяти C++ - Андрей Янковский, Яндекс
PDF
Использование юнит-тестов для повышения качества разработки
PDF
хитрости выведения типов
Нейронные сети и Keras. Часть 2
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Статический анализ кода
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Модель памяти C++ - Андрей Янковский, Яндекс
Использование юнит-тестов для повышения качества разработки
хитрости выведения типов

What's hot (20)

PPTX
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
PDF
Нейронные сети и Keras. Часть 1
PDF
Intel IPP Samples for Windows - работа над ошибками
PDF
Антон Полухин, Немного о Boost
PDF
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
PDF
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
PDF
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
PPTX
Александр Фокин, Рефлексия в C++
PDF
Лекция #5. Введение в язык программирования Python 3
PPTX
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
PDF
Объектно-ориентированное программирование. Лекции 9 и 10
PDF
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
PDF
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
PDF
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
PDF
Оптимизация производительности Python
PDF
Андрей Карпов, Приватные байки от разработчиков анализатора кода
PDF
Догнать и перегнать boost::lexical_cast
PDF
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
PDF
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
PPT
Декораторы в Python и их практическое использование
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Нейронные сети и Keras. Часть 1
Intel IPP Samples for Windows - работа над ошибками
Антон Полухин, Немного о Boost
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
Александр Фокин, Рефлексия в C++
Лекция #5. Введение в язык программирования Python 3
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
Объектно-ориентированное программирование. Лекции 9 и 10
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Оптимизация производительности Python
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Догнать и перегнать boost::lexical_cast
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
Декораторы в Python и их практическое использование
Ad

Similar to How to get knowledge and improve it all your professional life long (20)

PDF
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
PPTX
Программирование как способ выражения мыслей.
PDF
Тимур Лукин - Архитектура и проектирование ПО
PDF
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
PPTX
DSL без купюр
PPTX
разработка бизнес приложений (7)
PDF
DDD Workshop
PPTX
Coding like a sex
PPTX
Универсальный сигнатурный анализ кода на C#, Java, PHP
PPTX
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
PDF
Opensource на .NET
PPTX
Принципы работы статического анализатора кода PVS-Studio
PDF
SPA инструменты
PDF
Павел Павлов - Scala для профессионалов - Joker 2013
PPTX
Soft labs. достижима ли в c++ эффективность языка среднего уровня
PPT
Rybak Big Projects New
PPT
запахи кода
PPTX
Моделеориентированность в инженерии
PDF
Цена ошибки
PPTX
Цена ошибки
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Программирование как способ выражения мыслей.
Тимур Лукин - Архитектура и проектирование ПО
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
DSL без купюр
разработка бизнес приложений (7)
DDD Workshop
Coding like a sex
Универсальный сигнатурный анализ кода на C#, Java, PHP
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
Opensource на .NET
Принципы работы статического анализатора кода PVS-Studio
SPA инструменты
Павел Павлов - Scala для профессионалов - Joker 2013
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Rybak Big Projects New
запахи кода
Моделеориентированность в инженерии
Цена ошибки
Цена ошибки
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
Rethinking low-code
PDF
Hat full of developers
PDF
FwDays 2021: Metarhia Technology Stack for Node.js
PDF
Node.js for enterprise - JS Conference
PDF
Node.js for enterprise 2021 - JavaScript Fwdays 3
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
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
Rethinking low-code
Hat full of developers
FwDays 2021: Metarhia Technology Stack for Node.js
Node.js for enterprise - JS Conference
Node.js for enterprise 2021 - JavaScript Fwdays 3
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

How to get knowledge and improve it all your professional life long

  • 1. const fs = require('fs'); const compose = (...funcs) => x => funcs. reduce((x, fn) => fn(x), x); const DENSITY_COL = 3; const renderTab table => { const cellWidth = [18, 10, 8, 8, 18, 6]; return table.ma => (row.map((cell, i) => { const width = cellWidth[i]; return i ? c toString().padStart(width) : cell.padEnd(width); }).join(''))).join }; const proportion = (max, val) => Math.round(val * 100 / max); co calcProportion = table => { table.sort((row1, row2) => row2[DENSITY row1[DENSITY_COL]); const maxDensity = table[0][DENSITY_COL]; table forEach(row => { row.push(proportion(maxDensity, row[DENSITY_COL])) return table; }; const getDataset = file => { const lines = fs.read FileSync(file, 'utf8').toString().split('n'); lines.shift(); lines return lines.map(line => line.split(',')); }; const main = compose (getDataset, calcProportion, renderTable); const fs = require('fs' compose = (...funcs) => x => funcs.reduce((x, fn) => fn(x), x); con DENSITY_COL = 3; const renderTable = table => { const cellWidth = [ 8, 8, 18, 6]; return table.map(row => (row.map((cell, i) => { const = cellWidth[i]; return i ? cell.toString().padStart(width) : cell.p (width); }).join(''))).join('n'); }; const proportion = (max, val) Как повышать свою квалификацию всю жизнь Тимур Шемсединов github.com/HowProgrammingWorks Chief Software Architect, Metarhia Kiev Polytechnic Institute, SE Infotech, MIA github.com/tshemsedinov
  • 2. #1 Что нужно знать? Обычно начинают с: - языки программирования - библиотеки и фреймворки - олимпиадные задачи - задачи для собеседований
  • 3. #2 Что нужно знать? Это все чушь собачья: - языки программирования - библиотеки и фреймворки - олимпиадно-ориентированное п. - собеседование-ориентированное п.
  • 4. #3 Что нужно знать? Чтоб быть полноценным инженером - парадигмы программирования - предметная область - широкая техническая эрудиция - абстрактное мышление - коммуникативные способности
  • 5. #4 Откуда брать знания? Зато мы знаем, где нас научат: - курсы ВУЗов - статьи и видео в интернетах - в компаниях научат - на своих проектах научусь
  • 6. #5 Откуда брать знания? Бред сумасшедшего: - курсы ВУЗов - статьи и видео в интернетах - в компаниях научат - на своих проектах научусь
  • 7. #6 Откуда брать знания? Но мы добудем знания: - перенять у профессионала - участвовать в OpenSource разработке - опыт в сложной предметной области - смежные области знаний - учить других
  • 8. #7 Проблемы отрасли В современном мире делать хорошо невыгодно - писать хорошо - сложно, долго и дорого - все уже можно найти и склеить - все вроде есть, пока чего не хватишься... - программируем на мусорку
  • 9. #8 Проблемаы отрасли Программная инженерия оторвалась от науки - не отвечает на вопрос почему так, а не иначе - программируем на фреймворках - нет научного осмысления паттернов и приемов - маркетологи уничтожат цивилизацию...
  • 10. #9 Проблемаы отрасли Сложность интеграции - по частям есть, но не вместе - связать сложнее, чем разработать часть - стыки должны совпадать - как устроено внутри
  • 11. #10 Дерево парадигм ┣━ Imperative ┃ ┣━ Non-structured ┃ ┗━ Structured ┃ ┗━ Procedural ┃ ┗━ Object-oriented and Prototype ┣━ Declarative ┃ ┣━ Functional ┃ ┗━ Logical ┣━ Data-driven ┗━ Generic
  • 12. #11 Технологии и техники Асинхронное программирование (reactor, event loop) Параллельное и распределенное программирование, исполнение на многопроцессорных системах Объектно-ориентированный подход: анализ, проектирование и программирование Визуальное программирование (ER, RUP, CAD/CAM)
  • 13. #12 Разница парадигм Императивная • Алгоритмический подход и пошаговое исполнение • Изменение значений переменных • Условные переходы и циклы Функциональная • Функции, выражения и суперпозиция • Возможно параллельное исполнение • Не меняем аргументы, нет переменных • Рекурсивные вызовы вместо циклов
  • 14. #13 Что общего в парадигмах Императивная • Построение абстракций, композиция • Наследование (ООП, прототипы) • Полиморфизм и инкапсуляция Функциональная • Построение абстракций, композиция • Частичное применение и каррирование • Замыкания, функторы, монады
  • 15. #14 Прочие парадигмы и техники • Реактивное программирование • Событийно-ориентированное • Функционально-реактивное • Модель акторов • Мультипарадигменное программирование • Метапрограммирование
  • 16. #15 Мультипарадигменность Мультипарадигменное программирование это • знать сильные и слабые стороны • выбор парадигмы под задачу • как сочетать несколько парадигм
  • 17. #16 Метапрограммирование Метапрограммирование это • Интроспекция и рефлексия • Метаданные и метамодели • Динамическое связывание • Специализированные языки DSL
  • 18. #17 Как не деградировать? на однотипных и неинтересных задачах • Cookie cutter - подумал эксплуататор • Monkey job - подумал эксплуатируемый
  • 19. #18 Как не деградировать? на однотипных и неинтересных задачах • Эксплуататору лучше думать - SaaS • Эксплуатируемуму лучше думать - системное программирование
  • 20. #19 Как же найти общий язык? между разными специальностями в разработке • Банально - разговаривать • По умному - формализация
  • 21. #20 Как же найти общий язык? Виды формализации • Шаблоны • Стандарты: RFC, Ecma, ISO... • Модели: UML, ERD... • Методологии: RUP, Agile… • Формальные языки
  • 22. #21 Задачи прог. инженерии Справиться со сложностью Управление состоянием Структура и архитектура
  • 23. #22 Задачи прог. инженерии Справиться со сложностью • Сложность задачи (декомпозиция и модель) • Спрятать сложность (модули, слои, черный ящик)
  • 24. #23 Задачи прог. инженерии Управление состоянием • Предотвращение скрытого состояния • Минимизация глобального состояния • Предотвращение комбинаторного взрыва
  • 25. #24 Задачи прог. инженерии Структура и архитектура • декомпозиция • именование • связывание
  • 26. #25 Преодоление сложности Компонентный подход увеличение переиспользования кода и надежности Отделение прикладного кода от системного. Выделение и вынесение наружу системных библиотек, инструментов, DSL из проектов
  • 27. #26 Связывание данных и логики • Объединение • Разделение
  • 28. #27 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.
  • 29. #28 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,
  • 30. #29 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...
  • 32. github.com/tshemsedinov github.com/HowProgrammingWorks/Dictionary 100 видео-лекций по программированию habr.com/post/427799 meetup.com/HowProgrammingWorks meetup.com/NodeUA t.me/HowProgrammingWorks t.me/NodeUA