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)
Почему хорошее ИТ-образование
не востребовано рыночком
и о перспективах на 10 лет
Тимур Шемсединов
Chief Software Architect at Metarhia
Lecturer at Kiev Polytechnic Institute
github.com/tshemsedinov
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
Кто тут?
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
Кто тут?
Чистые функции
Каррирование
Функторы
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
Кто тут?
Двоичное дерево
Двусвязный список
Стек, Дек, Очередь
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
Кто тут?
Промисы, Фьючеры
Thenable
Async Iterable
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
Кто тут?
СМО
Concurrent Queue
CQRS, Event sourcing
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
Кто тут?
node_modules
npm
Event Loop
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
Кто тут?
Inline Cache
Tail Call Optimization
Hidden class
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
Кто тут?
Socket, TLS
XSS, CSP
SQL-injection
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
Кто тут?
Семафоры
Мьютексы
Спинлоки
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
Кто тут?
Reflection
Scaffolding
Introspection
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
Кто тут?
Адаптер
Фабрика
Dependency Injection
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
Какое бывает ИТ
Наука λ-исчисление; O; (Π, σ, ⋈, ⋉, ⋊...)
Парадигмы ФП, СП, ООП, МП (meta), МПП (multi)
Техники п. ПП, АП, ОП (generics), actors, CRDT
Технологии V8, JVM, Docker, TLS, LLVM, CUDA
Инструменты GCC, nodejs, RSA, SHA, K8s, git
Библиотеки libuv, React.js, Tokio.rs, llhttp, babel
Фреймворки Angular, Vue, react-native, tensorflow
Продукты Jira, SAP, PG, MS Office, Photoshop
Сервисы Github, Youtube, Grammarly, G.docs
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
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики на еду
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
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
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
Какой бывает ИТ-бизнес
Технологические компании
Продуктовые компании большие прибыли
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
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
Какой бывает ИТ-бизнес
Технологические компании контроль и власть
Продуктовые компании большие прибыли
Аутсорсинговые компании сырьевая э.
Компьютерщики на еду
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
Какие нужны специалисты в ИТ
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании
Компьютерщики
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
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании м-ы, кодеры
Компьютерщики
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
Какие нужны специалисты в ИТ
Технологические компании инж., арх.
Продуктовые компании программисты
Аутсорсинговые компании м-ы, кодеры
Компьютерщики малограмотные
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
Кто что делает в ИТ
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании
Компьютерщики
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
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании Человекочасы
Компьютерщики
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
Кто что делает в ИТ
Технологические компании ОС, ЯП, платформы
Продуктовые компании Коробка, сервис
Аутсорсинговые компании Человекочасы
Компьютерщики Заплатки
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
Типы инфраструктуры
Infra Runtime Storage
● Bare metal none stateful stateful
● Shared hosting slice stateless stateful
● Virtualization slice stateful stateful
● Containerization slice stateful stateful
● Clusterization join stateful stateless
● Serverless join stateless stateless
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
Преимущества инфраструктур
Sec Lock TTM
● Bare metal ++++ no +
● Shared hosting + tech ++
● Virtualization +++ no +++
● Containerization +++ tech +++
● Clusterization +++ tech ++++
● Serverless ++ vendor +++++
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
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики
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
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании
Компьютерщики ни какого
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
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
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
Какое нужно ИТ-образование
Технологические компании
Продуктовые компании Университеты, ПТУ
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
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
Какое нужно ИТ-образование
Технологические компании R&D, Университеты
Продуктовые компании Университеты, ПТУ
Аутсорсинговые компании ПТУ, вайти курсы
Компьютерщики ни какого
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
Проблемы отрасли
В современном мире делать хорошо невыгодно
- писать хорошо - сложно, долго и дорого
- все уже можно найти и склеить
- все вроде есть, пока чего не хватишься...
- программируем на мусорку
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
Проблемы отрасли
Программная инженерия оторвалась от науки
- не отвечает на вопрос почему так, а не иначе
- программируем на фреймворках
- нет научного осмысления паттернов и приемов
- маркетологи уничтожат цивилизацию...
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
Проблемы отрасли
Сложность интеграции
- по частям есть, но не вместе
- связать сложнее, чем разработать часть
- стыки должны совпадать
- как устроено внутри
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
Как не деградировать?
на однотипных и неинтересных задачах
• Cookie cutter - подумал эксплуататор
• Monkey job - подумал эксплуатируемый
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
Как не деградировать?
на однотипных и неинтересных задачах
• Эксплуататору лучше думать - SaaS
• Эксплуатируемуму лучше думать -
системное программирование
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
Как найти общий язык?
между разными специальностями в разработке
• Банально - разговаривать
• По умному - формализация
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
Как найти общий язык?
Виды формализации
• Шаблоны
• Стандарты: RFC, Ecma, ISO...
• Модели: UML, ERD...
• Методологии: RUP, Agile…
• Формальные языки
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
Задачи программной инженерии
Справиться со сложностью
Управление состоянием
Структура и архитектура
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
Справиться со сложностью
● Сложность задачи
(декомпозиция и модель)
● Спрятать сложность
(модули, слои, черный ящик)
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
Управление состоянием
● Предотвращение скрытого состояния
● Минимизация глобального состояния
● Предотвращение комбинаторного взрыва
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
Структура и архитектура
● Декомпозиция
● Именование
● Связывание
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
Преодоление сложности
Компонентный подход
увеличение переиспользования кода и
надежности
Отделение прикладного кода от системного
выделение и вынесение наружу системных
библиотек, инструментов, DSL из проектов
Почему хорошее ИТ-образование невостребовано рыночком
github.com/tshemsedinov
github.com/HowProgrammingWorks/Index
видео-лекции по программной инженерии
https://youtube.com/TimurShemsedinov
meetup.com/HowProgrammingWorks
meetup.com/NodeUA
t.me/HowProgrammingWorks
t.me/NodeUA

More Related Content

PDF
Objects have failed
PDF
Information system structure and architecture
PDF
Node.js security
PDF
Node.js in 2019
PDF
Базы данных в 2020
PDF
Введение в программирование (1 часть)
PPT
Программирование. Лекция 3
PPT
SciPy
Objects have failed
Information system structure and architecture
Node.js security
Node.js in 2019
Базы данных в 2020
Введение в программирование (1 часть)
Программирование. Лекция 3
SciPy

What's hot (14)

PPTX
chislennye
PDF
5.1 Перегрузка операторов
PDF
Rust: абстракции и безопасность, совершенно бесплатно
PDF
Decorators' recipes
PDF
Оптимизация производительности Python
PPTX
Funny JS #2
PDF
Python dict: прошлое, настоящее, будущее
PDF
8 встреча — Язык программирования Python (В. Ананьев)
ODP
Charming python sc2-8
PPTX
минимизация булевых функций
PDF
Векторизация кода (семинар 3)
PDF
Магия метаклассов
PDF
Магия в Python: Дескрипторы. Что это?
PPTX
Дуров Р. - Cocos2d
chislennye
5.1 Перегрузка операторов
Rust: абстракции и безопасность, совершенно бесплатно
Decorators' recipes
Оптимизация производительности Python
Funny JS #2
Python dict: прошлое, настоящее, будущее
8 встреча — Язык программирования Python (В. Ананьев)
Charming python sc2-8
минимизация булевых функций
Векторизация кода (семинар 3)
Магия метаклассов
Магия в Python: Дескрипторы. Что это?
Дуров Р. - Cocos2d
Ad

Similar to Почему хорошее ИТ-образование невостребовано рыночком (20)

PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PPTX
Павел Беликов, Как избежать ошибок, используя современный C++
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PPTX
Reactive extensions
PDF
Sergii Tsypanov "Performance 1001 Tips"
PPTX
DSLs in Lisp and Clojure
PDF
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
PDF
Лекция 8. Intel Threading Building Blocks
PPTX
Статический анализ кода
PPTX
статический анализ кода
PDF
Недостатки Python
PDF
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
PDF
Использование GNU OCTAVE для инженерных и математических расчетов
PDF
Функциональное программирование - Александр Алексеев
PDF
Python
PPT
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
PPTX
Опыт разработки статического анализатора кода
DevConf. Дмитрий Сошников - ECMAScript 6
Павел Беликов, Как избежать ошибок, используя современный C++
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Reactive extensions
Sergii Tsypanov "Performance 1001 Tips"
DSLs in Lisp and Clojure
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Лекция 8. Intel Threading Building Blocks
Статический анализ кода
статический анализ кода
Недостатки Python
SECON'2014 - Павел Щеваев - Метаданные и автогенерация кода
Использование GNU OCTAVE для инженерных и математических расчетов
Функциональное программирование - Александр Алексеев
Python
SECR2013: F# и обработка потоковых данных: от потока твиттер-сообщений до сен...
Опыт разработки статического анализатора кода
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
Node.js in 2020 - part 1
PDF
Web Locks API
PDF
Node.js in 2020
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
Node.js in 2020 - part 1
Web Locks API
Node.js in 2020

Почему хорошее ИТ-образование невостребовано рыночком

  • 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) Почему хорошее ИТ-образование не востребовано рыночком и о перспективах на 10 лет Тимур Шемсединов Chief Software Architect at Metarhia Lecturer at Kiev Polytechnic Institute github.com/tshemsedinov
  • 2. 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 Кто тут?
  • 3. 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 Кто тут? Чистые функции Каррирование Функторы
  • 4. 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 Кто тут? Двоичное дерево Двусвязный список Стек, Дек, Очередь
  • 5. 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 Кто тут? Промисы, Фьючеры Thenable Async Iterable
  • 6. 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 Кто тут? СМО Concurrent Queue CQRS, Event sourcing
  • 7. 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 Кто тут? node_modules npm Event Loop
  • 8. 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 Кто тут? Inline Cache Tail Call Optimization Hidden class
  • 9. 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 Кто тут? Socket, TLS XSS, CSP SQL-injection
  • 10. 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 Кто тут? Семафоры Мьютексы Спинлоки
  • 11. 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 Кто тут? Reflection Scaffolding Introspection
  • 12. 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 Кто тут? Адаптер Фабрика Dependency Injection
  • 13. 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 Какое бывает ИТ Наука λ-исчисление; O; (Π, σ, ⋈, ⋉, ⋊...) Парадигмы ФП, СП, ООП, МП (meta), МПП (multi) Техники п. ПП, АП, ОП (generics), actors, CRDT Технологии V8, JVM, Docker, TLS, LLVM, CUDA Инструменты GCC, nodejs, RSA, SHA, K8s, git Библиотеки libuv, React.js, Tokio.rs, llhttp, babel Фреймворки Angular, Vue, react-native, tensorflow Продукты Jira, SAP, PG, MS Office, Photoshop Сервисы Github, Youtube, Grammarly, G.docs
  • 14. 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 Какой бывает ИТ-бизнес Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 15. 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 Какой бывает ИТ-бизнес Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики на еду
  • 16. 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 Какой бывает ИТ-бизнес Технологические компании Продуктовые компании Аутсорсинговые компании сырьевая э. Компьютерщики на еду
  • 17. 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 Какой бывает ИТ-бизнес Технологические компании Продуктовые компании большие прибыли Аутсорсинговые компании сырьевая э. Компьютерщики на еду
  • 18. 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 Какой бывает ИТ-бизнес Технологические компании контроль и власть Продуктовые компании большие прибыли Аутсорсинговые компании сырьевая э. Компьютерщики на еду
  • 19. 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 Какие нужны специалисты в ИТ Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 20. 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 Какие нужны специалисты в ИТ Технологические компании инж., арх. Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 21. 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 Какие нужны специалисты в ИТ Технологические компании инж., арх. Продуктовые компании программисты Аутсорсинговые компании Компьютерщики
  • 22. 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 Какие нужны специалисты в ИТ Технологические компании инж., арх. Продуктовые компании программисты Аутсорсинговые компании м-ы, кодеры Компьютерщики
  • 23. 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 Какие нужны специалисты в ИТ Технологические компании инж., арх. Продуктовые компании программисты Аутсорсинговые компании м-ы, кодеры Компьютерщики малограмотные
  • 24. 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 Кто что делает в ИТ Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 25. 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 Кто что делает в ИТ Технологические компании ОС, ЯП, платформы Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 26. 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 Кто что делает в ИТ Технологические компании ОС, ЯП, платформы Продуктовые компании Коробка, сервис Аутсорсинговые компании Компьютерщики
  • 27. 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 Кто что делает в ИТ Технологические компании ОС, ЯП, платформы Продуктовые компании Коробка, сервис Аутсорсинговые компании Человекочасы Компьютерщики
  • 28. 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 Кто что делает в ИТ Технологические компании ОС, ЯП, платформы Продуктовые компании Коробка, сервис Аутсорсинговые компании Человекочасы Компьютерщики Заплатки
  • 29. 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 Типы инфраструктуры Infra Runtime Storage ● Bare metal none stateful stateful ● Shared hosting slice stateless stateful ● Virtualization slice stateful stateful ● Containerization slice stateful stateful ● Clusterization join stateful stateless ● Serverless join stateless stateless
  • 30. 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 Преимущества инфраструктур Sec Lock TTM ● Bare metal ++++ no + ● Shared hosting + tech ++ ● Virtualization +++ no +++ ● Containerization +++ tech +++ ● Clusterization +++ tech ++++ ● Serverless ++ vendor +++++
  • 31. 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 Какое нужно ИТ-образование Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики
  • 32. 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 Какое нужно ИТ-образование Технологические компании Продуктовые компании Аутсорсинговые компании Компьютерщики ни какого
  • 33. 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 Какое нужно ИТ-образование Технологические компании Продуктовые компании Аутсорсинговые компании ПТУ, вайти курсы Компьютерщики ни какого
  • 34. 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 Какое нужно ИТ-образование Технологические компании Продуктовые компании Университеты, ПТУ Аутсорсинговые компании ПТУ, вайти курсы Компьютерщики ни какого
  • 35. 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 Какое нужно ИТ-образование Технологические компании R&D, Университеты Продуктовые компании Университеты, ПТУ Аутсорсинговые компании ПТУ, вайти курсы Компьютерщики ни какого
  • 36. 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 Проблемы отрасли В современном мире делать хорошо невыгодно - писать хорошо - сложно, долго и дорого - все уже можно найти и склеить - все вроде есть, пока чего не хватишься... - программируем на мусорку
  • 37. 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 Проблемы отрасли Программная инженерия оторвалась от науки - не отвечает на вопрос почему так, а не иначе - программируем на фреймворках - нет научного осмысления паттернов и приемов - маркетологи уничтожат цивилизацию...
  • 38. 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 Проблемы отрасли Сложность интеграции - по частям есть, но не вместе - связать сложнее, чем разработать часть - стыки должны совпадать - как устроено внутри
  • 39. 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 Как не деградировать? на однотипных и неинтересных задачах • Cookie cutter - подумал эксплуататор • Monkey job - подумал эксплуатируемый
  • 40. 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 Как не деградировать? на однотипных и неинтересных задачах • Эксплуататору лучше думать - SaaS • Эксплуатируемуму лучше думать - системное программирование
  • 41. 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 Как найти общий язык? между разными специальностями в разработке • Банально - разговаривать • По умному - формализация
  • 42. 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 Как найти общий язык? Виды формализации • Шаблоны • Стандарты: RFC, Ecma, ISO... • Модели: UML, ERD... • Методологии: RUP, Agile… • Формальные языки
  • 43. 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 Задачи программной инженерии Справиться со сложностью Управление состоянием Структура и архитектура
  • 44. 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 Справиться со сложностью ● Сложность задачи (декомпозиция и модель) ● Спрятать сложность (модули, слои, черный ящик)
  • 45. 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 Управление состоянием ● Предотвращение скрытого состояния ● Минимизация глобального состояния ● Предотвращение комбинаторного взрыва
  • 46. 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 Структура и архитектура ● Декомпозиция ● Именование ● Связывание
  • 47. 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 Преодоление сложности Компонентный подход увеличение переиспользования кода и надежности Отделение прикладного кода от системного выделение и вынесение наружу системных библиотек, инструментов, DSL из проектов
  • 49. github.com/tshemsedinov github.com/HowProgrammingWorks/Index видео-лекции по программной инженерии https://youtube.com/TimurShemsedinov meetup.com/HowProgrammingWorks meetup.com/NodeUA t.me/HowProgrammingWorks t.me/NodeUA