SlideShare a Scribd company logo
1 of 32
Download to read offline
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...
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

What's hot

Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1PyNSK
 
Intel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиIntel IPP Samples for Windows - работа над ошибками
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
На что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотекиНа что нужно обратить внимание при обзоре кода разрабатываемой библиотеки
На что нужно обратить внимание при обзоре кода разрабатываемой библиотекиAndrey Karpov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
 
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловПолухин Антон, Как делать не надо: C++ велосипедостроение для профессионалов
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
 
Догнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castДогнать и перегнать boost::lexical_cast
Догнать и перегнать boost::lexical_castRoman Orlov
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 

What's hot (20)

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

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

Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Timur Shemsedinov
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах EmbarcaderoAndrew Sovtsov
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NETlugnsk
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects NewOntico
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерииAnatoly Levenchuk
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибкиAndrey Karpov
 

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

Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах EmbarcaderoПоддержка NoSQL и платформ MongoDB, Hive и Teradata  в продуктах Embarcadero
Поддержка NoSQL и платформ MongoDB, Hive и Teradata в продуктах Embarcadero
 
DSL без купюр
DSL без купюрDSL без купюр
DSL без купюр
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects New
 
запахи кода
запахи кодазапахи кода
запахи кода
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерии
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 

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 for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Timur 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
 
Rethinking low-code
Rethinking low-codeRethinking low-code
Rethinking low-code
 
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 for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3
 
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
 

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...
  • 31.
  • 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