SlideShare uma empresa Scribd logo
1 de 152
Baixar para ler offline
!!"!""🌲🌲🌲🌲🌲🌲👍
битовая карта
деревья
хорошо
Игорь Алексеенко
училка в HTML Academy
Многие современные проблемы
фронтендеров были решены 

ещё в 80-х 😎 📼 💾☎👾 🚀
Просто мы об этом не знаем 👶 👶 👶
2
То, что мы разрабатываем, 

скорее, уже не сайты, а RIA
3
RIA —
(исландск. Rich Internet Applica8on, насыщенное интернет-
приложение), иногда IIA — Installable Internet Application —
сайт, обладающий свойствами настольного приложения
4
Законы развития ПО
5
1960 1970 1980 1990 2000 2010
Закон Мура Закон Вирта (закон Пейджа)
Законы развития ПО
5
1960 1970 1980 1990 2000 2010
Закон Мура Закон Вирта (закон Пейджа)
1965

производительность

компьютеров удваивается

примерно каждые

два года
Законы развития ПО
5
1960 1970 1980 1990 2000 2010
Закон Мура Закон Вирта (закон Пейджа)
1965

производительность

компьютеров удваивается

примерно каждые

два года
~1995

медлительность программ

возрастает быстрее чем

производительность

компьютеров
Законы развития ПО
5
1960 1970 1980 1990 2000 2010
Закон Мура Закон Вирта (закон Пейджа)
1965

производительность

компьютеров удваивается

примерно каждые

два года
~1995

медлительность программ

возрастает быстрее чем

производительность

компьютеров
System 1
Windows 1.0
Законы развития ПО
5
1960 1970 1980 1990 2000 2010
Закон Мура Закон Вирта (закон Пейджа)
1965

производительность

компьютеров удваивается

примерно каждые

два года
~1995

медлительность программ

возрастает быстрее чем

производительность

компьютеров
Решения, придуманные
в 80-х оптимизированы
для выполнения на
слабых компьютерах,
поэтому в современном
контексте будут работать
очень эффективноSystem 1
Windows 1.0
Компонента курильщика 🚬
Интерактивная демонстрация
6
Битовые карты 🏏🂡🃁
7
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
012345
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
202122232425
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
1008160 ++ + + +
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
=251008160 ++ + + +
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
"!!!"!
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
"!!!"!
0200032 ++ + + +
Двоичная запись
8
В памяти компьютера все числа хранятся в двоичном виде — как последовательность
нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается
с нуля. Единица в разряде означает что итоговое число содержит двойку 

в степени номера разряда
!""!!"
12481632
"!!!"!
0200032 ++ + + + =34
Битовые карты —
(яп. — bitmap) они же битовые массивы (кор. — bitset,
bitarray) последовательности бит, которые кодируют
не степени двойки, а любую другую информацию.
Хранятся в виде обычных чисел
9
Битовые карты
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Битовые карты
• IP-адрес

192.168.1.1 / 255.255.255.0
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Битовые карты
• IP-адрес

192.168.1.1 / 255.255.255.0
• цвет 

#FACE8D
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Битовые карты
• IP-адрес

192.168.1.1 / 255.255.255.0
• цвет 

#FACE8D
• права пользователя

chmod -R 777 .
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Битовые карты
• IP-адрес

192.168.1.1 / 255.255.255.0
• цвет 

#FACE8D
• права пользователя

chmod -R 777 .
• карта уровня в игре или пиксели изображения
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Битовые карты
• IP-адрес

192.168.1.1 / 255.255.255.0
• цвет 

#FACE8D
• права пользователя

chmod -R 777 .
• карта уровня в игре или пиксели изображения
• состояние UX-компоненты
10
Битовой картой называется последовательность бит (нулей и единиц). В битовых
картах может храниться не только число, но и любой другой набор данных
Интерактивная демонстрация. Кодирование состояний
в битах
11
Компонента здорового человека 🚭
Битовые операции —
логические операции над цепочками битов, в которых
биты выступают как значения true или false
12
Побитовое «или»
13
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
010

OR 100

0
Побитовое «или»
13
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
010

OR 100

0
Побитовое «или»
13
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
010

OR 100

10
Побитовое «или»
13
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
010

OR 100

110
Побитовое «или»
14
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
Побитовое «или»
14
Складывает переданные значения и сохраняет включенные биты обоих операторов.
Идеально подходит для сложения нескольких состояний
010

OR 100

110
1010

AND 1100

0
Побитовое «и»
15
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
15
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 1100

0
Побитовое «и»
15
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 1100

00
Побитовое «и»
15
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 1100

000
Побитовое «и»
15
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 1100

1000
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 0010

= 0010
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
1010

AND 0100

= 0000
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Побитовое «и»
16
Сохраняет только те биты, которые были включены в обоих операндах. Идеально
подходит для проверки состояния
Компонента здорового человека 🚭
Интерактивная демонстрация. Продолжение
17
Декларативный стиль
Мы описываем не последовательность шагов
(императивный стиль), а реакцию на изменение
состояния
18
Полученный код содержит всего пять (одну)
управляющих строк. Остальной код — статические
словари. Вне зависимости от размеров словарей
(количества состояний) размер управляющего кода
меняться не будет
19
Использование состояний
для описания поведения
20
Описание поведения
В качестве значений в словарях можно использовать не только обычные значения,
но и функции. В этом случае можно описывать поведение каждого состояния независимо
var Direction = {

RIGHT: 0x01

};



var DirectionBehaviour = {

0x01: function(character) {

return Object.assign({

left: character.left + character.hSpeed

}, character);

}

]);
Описание поведения
В качестве значений в словарях можно использовать не только обычные значения,
но и функции. В этом случае можно описывать поведение каждого состояния независимо
var Direction = {

RIGHT: 0x01,
TOP: 0x02

};



var DirectionBehaviour = {

0x01: function(character) {},

0x02: function(character) {}
};
Описание поведения
В качестве значений в словарях можно использовать не только обычные значения,
но и функции. В этом случае можно описывать поведение каждого состояния независимо
Даже Redux!
24
Даже Redux!
Можно использовать битовые маски как параметр type для управляющих объектов
action. Так, за одно обращение к хранилищу можно делать несколько операций
с данными
const ActionType = {

UPDATE_1: 0x01,
UPDATE_2: 0x02

};



store.dispatch({

type: ActionType.UPDATE_1 | ActionType.UPDATE_2

});
Даже Redux!
Можно использовать битовые маски как параметр type для управляющих объектов
action. Так, за одно обращение к хранилищу можно делать несколько операций
с данными
И кроме этого есть ещё
26
И кроме этого есть ещё
• исключающие или XOR, ^

используется для переключения состояния (toggle)
26
И кроме этого есть ещё
• исключающие или XOR, ^

используется для переключения состояния (toggle)
• побитовый сдвиг влево <<
26
И кроме этого есть ещё
• исключающие или XOR, ^

используется для переключения состояния (toggle)
• побитовый сдвиг влево <<
• побитовый сдвиг вправо >>
26
И кроме этого есть ещё
• исключающие или XOR, ^

используется для переключения состояния (toggle)
• побитовый сдвиг влево <<
• побитовый сдвиг вправо >>
• сдвиг вправо с заполнением нулями >>>
26
И кроме этого есть ещё
• исключающие или XOR, ^

используется для переключения состояния (toggle)
• побитовый сдвиг влево <<
• побитовый сдвиг вправо >>
• сдвиг вправо с заполнением нулями >>>
• битовые маски

когда одно состояние хранится в нескольких соседних
битах используются маски, которые показывают
единицами, в какие именно биты состояние записано 

(IP-адрес и маска подсети)
26
Зависимости в форме
27
🌳 Деревья
28
🌳 Деревья
29
Связанная структура данных, состоящая из вложенных друг в друга повторяющихся
узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево
document
head body
#layoutmeta title
aside main footer
🌳 Деревья
29
Связанная структура данных, состоящая из вложенных друг в друга повторяющихся
узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево
узел
document
head body
#layoutmeta title
aside main footer
🌳 Деревья
29
Связанная структура данных, состоящая из вложенных друг в друга повторяющихся
узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево
корень
узел
document
head body
#layoutmeta title
aside main footer
🌳 Деревья
29
Связанная структура данных, состоящая из вложенных друг в друга повторяющихся
узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево
корень
узел
потомки
document
head body
#layoutmeta title
aside main footer
🌳 Деревья
29
Связанная структура данных, состоящая из вложенных друг в друга повторяющихся
узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево
корень
узел
лист
потомки
document
head body
#layoutmeta title
aside main footer
🌳 Деревья
Интерактивная демонстрация. Использование деревьев
для описания зависимостей в форме
30
🚶🌳 Обход дерева
Какими способами можно обходить дерево и на что
может повлиять изменение способа обхода
31
Деревья
32
document
head body
#layoutmeta title
aside main footer
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
• DFS (поиск в глубину)
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
• DFS (поиск в глубину)
• прямой
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
• DFS (поиск в глубину)
• прямой
• обратный
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
• DFS (поиск в глубину)
• прямой
• обратный
• симметричный
Деревья
32
document
head body
#layoutmeta title
aside main footer
Существует несколько
способов перебора
элементов дерева:
• DFS (поиск в глубину)
• прямой
• обратный
• симметричный
• BFS (поиск в ширину)
33
Прямой поиск в глубину
(сербохорв. — Depth-first search, DFS) если у узла есть
потомки, посещаются сначала они, а только потом
соседний узел (всегда идём до самого конца)
34
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
document
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
headdocument
head
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
document
head
meta
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
document
head
meta title
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
body
document
head
meta title
body
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
body
#layout
document
head
meta title
body
#layout
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
body
#layout
aside
document
head
meta title
body
#layout
aside
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
body
#layout
aside
main
document
head
meta title
body
#layout
aside main
Прямой обход в глубину
35
Сначала посещается узел, а потом его потомки
document
head body
#layoutmeta title
aside main footer
document
head
meta
title
body
#layout
aside
main
footer
document
head
meta title
body
#layout
aside main footer
36
36
36
36
36
36
36
36
36
Поиск в ширину
(древнеарамейск. Breadth-first search, BFS) узлы посещаются
по уровням, будто срезаются слои с торта (смотрим
по верхам)
37
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
document
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
headdocument
head
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
document
head body
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
document
head
meta
body
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
title
document
head
meta title
body
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
title
#layout
document
head
meta title
body
#layout
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
title
#layout
aside
document
head
meta title
body
#layout
aside
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
title
#layout
aside
main
document
head
meta title
body
#layout
aside main
Обход в ширину
38
Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа
document
head body
#layoutmeta title
aside main footer
document
head
body
meta
title
#layout
aside
main
footer
document
head
meta title
body
#layout
aside main footer
39
39
39
39
39
39
39
39
39
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
«Лёгкий компьютер» в играх
40
Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет
в ближайшие несколько шагов (BFS)
— Лошадью ходи,

век воли не видать!
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
— Ботвинник 

сдавался!
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
— Ботвинник 

сдавался!
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
— Ботвинник 

сдавался!
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
— Ботвинник 

сдавался!
«Сложный компьютер» в играх
41
Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
— Так-так, вот тут у меня

больше шансов на победу
— Ботвинник 

сдавался!
☀🔦 Анализ рынка разработки
Статистика требований к разработчикам на основе
вакансий «Моего Круга» с помощью библиотеки d3.js
42
Дерево требований к разработчикам
43
Листьями являются конкретные технологии, а узлами — группы
умения
сервер контроль версийклиент
верстка
less scss
... ...библиотеки
AngularReact
44
🌳 Преимущества деревьев
45
🌳 Преимущества деревьев
• сохраняются и передаются в виде строковых данных
45
🌳 Преимущества деревьев
• сохраняются и передаются в виде строковых данных
• легко читаются
45
🌳 Преимущества деревьев
• сохраняются и передаются в виде строковых данных
• легко читаются
• быстро выполняются (нативный объект JS)
45
🌳 Преимущества деревьев
• сохраняются и передаются в виде строковых данных
• легко читаются
• быстро выполняются (нативный объект JS)
• не имеют чёткого формата описания, поэтому идеально
подстраиваются под задачу
45
Ищите решения, а не инструменты
Через 20 лет не будет ни Бэйбеля, ни Реакта, ни Вебпака,
ни Джаваскрипта. А деревья и битовые карты — будут
46
Что поизучать
47
Что поизучать
• github.com/htmlacademy/bitset.js 

библиотека от HTML Academy для работы с битовыми
массивами в JS — обёртки для добавления, удаления,
проверки и получения объектов с состоянием
47
Что поизучать
• github.com/htmlacademy/bitset.js 

библиотека от HTML Academy для работы с битовыми
массивами в JS — обёртки для добавления, удаления,
проверки и получения объектов с состоянием
• o0.github.io/trees

интерактивные демки, примеры для разных областей
применения, больше теории, исходники
47
Что поизучать
• github.com/htmlacademy/bitset.js 

библиотека от HTML Academy для работы с битовыми
массивами в JS — обёртки для добавления, удаления,
проверки и получения объектов с состоянием
• o0.github.io/trees

интерактивные демки, примеры для разных областей
применения, больше теории, исходники
• github.com/thejameskyle/itsy-bitsy-data-structures

репозиторий, с интересным и подробным рассказом
про алгоритмы и структуры данных на JS
47
🖖— Спасибо!
tutors@htmlacademy.ru
Наставничество — отличный способ найти себе
в команду новичка и воспитать его так, как считаешь
должным на готовой продуманной инфраструктуре или
просто поделиться опытом
49

Mais conteúdo relacionado

Destaque

TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programsBadoo Development
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)Badoo Development
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио..."PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...Badoo Development
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"Badoo Development
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"Badoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
Solid JavaScript Coding
Solid JavaScript CodingSolid JavaScript Coding
Solid JavaScript CodingDiwa Del Mundo
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 

Destaque (20)

TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
Profiling and optimizing go programs
Profiling and optimizing go programsProfiling and optimizing go programs
Profiling and optimizing go programs
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)"Геолокация в Badoo", Андрей Воликов (Badoo)
"Геолокация в Badoo", Андрей Воликов (Badoo)
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
"Обзор Tarantool DB"
"Обзор Tarantool DB""Обзор Tarantool DB"
"Обзор Tarantool DB"
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио..."PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
"PostgreSQL для разработчиков приложений", Павел Лузанов, (Постгрес Профессио...
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
"Развитие ветки PHP-7"
"Развитие ветки PHP-7""Развитие ветки PHP-7"
"Развитие ветки PHP-7"
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
Solid JavaScript Coding
Solid JavaScript CodingSolid JavaScript Coding
Solid JavaScript Coding
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 

Semelhante a Классическое программирование для фронтендеров

012
012012
012JIuc
 
Кодирование информации
Кодирование информацииКодирование информации
Кодирование информацииryabuha
 
Кодирование информации
Кодирование информацииКодирование информации
Кодирование информацииryabuha
 
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕleskonog
 
лекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикалекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикаGulnaz Shakirova
 
лекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикалекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикаGulnaz Shakirova
 
представление чисел в компьютере
представление чисел в компьютерепредставление чисел в компьютере
представление чисел в компьютереЕлена Ключева
 
Кодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классКодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классНаталья Зиненко
 
Представление информации в компьютере
Представление информации в компьютереПредставление информации в компьютере
Представление информации в компьютереAndrey Dolinin
 
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Tatiana Volkova
 
64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считатьTatyanazaxarova
 
кодирование информации в компьютере
кодирование информации в компьютерекодирование информации в компьютере
кодирование информации в компьютереkaterinadolg
 
кодирование информации в компьютере
кодирование информации в компьютерекодирование информации в компьютере
кодирование информации в компьютереMarinaplotnikovaur
 
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...corehard_by
 
кодирование инф.
кодирование инф.кодирование инф.
кодирование инф.Rushitech
 
лекция 7 представление информации в эвм информатика
лекция 7 представление информации в эвм информатикалекция 7 представление информации в эвм информатика
лекция 7 представление информации в эвм информатикаGulnaz Shakirova
 
НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptdinarium2016
 
Informaciya ee predstavlenie_i_izmerenie
Informaciya ee predstavlenie_i_izmerenieInformaciya ee predstavlenie_i_izmerenie
Informaciya ee predstavlenie_i_izmerenieevsalmanova
 

Semelhante a Классическое программирование для фронтендеров (19)

012
012012
012
 
Кодирование информации
Кодирование информацииКодирование информации
Кодирование информации
 
Кодирование информации
Кодирование информацииКодирование информации
Кодирование информации
 
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
9 класс ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
 
лекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикалекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатика
 
лекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатикалекция 5 представление информации в эвм информатика
лекция 5 представление информации в эвм информатика
 
5
55
5
 
представление чисел в компьютере
представление чисел в компьютерепредставление чисел в компьютере
представление чисел в компьютере
 
Кодирование текстовой информации 10 класс
Кодирование текстовой информации 10 классКодирование текстовой информации 10 класс
Кодирование текстовой информации 10 класс
 
Представление информации в компьютере
Представление информации в компьютереПредставление информации в компьютере
Представление информации в компьютере
 
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
Arduino и бионика (Bionic Arduino). Часть 1. Введение, цифровые входы, перекл...
 
64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считать
 
кодирование информации в компьютере
кодирование информации в компьютерекодирование информации в компьютере
кодирование информации в компьютере
 
кодирование информации в компьютере
кодирование информации в компьютерекодирование информации в компьютере
кодирование информации в компьютере
 
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
 
кодирование инф.
кодирование инф.кодирование инф.
кодирование инф.
 
лекция 7 представление информации в эвм информатика
лекция 7 представление информации в эвм информатикалекция 7 представление информации в эвм информатика
лекция 7 представление информации в эвм информатика
 
НуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.pptНуП_Лекция 5. Управление видеосистемой.ppt
НуП_Лекция 5. Управление видеосистемой.ppt
 
Informaciya ee predstavlenie_i_izmerenie
Informaciya ee predstavlenie_i_izmerenieInformaciya ee predstavlenie_i_izmerenie
Informaciya ee predstavlenie_i_izmerenie
 

Mais de Badoo Development

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationBadoo Development
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUBadoo Development
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерBadoo Development
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, AvitoBadoo Development
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicBadoo Development
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentBadoo Development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноBadoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кодаBadoo Development
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal APIBadoo Development
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQLBadoo Development
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияBadoo Development
 

Mais de Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кода
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal API
 
Как мы готовим MySQL
Как мы готовим MySQLКак мы готовим MySQL
Как мы готовим MySQL
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, Отношения
 

Классическое программирование для фронтендеров

  • 2. Многие современные проблемы фронтендеров были решены 
 ещё в 80-х 😎 📼 💾☎👾 🚀 Просто мы об этом не знаем 👶 👶 👶 2
  • 3. То, что мы разрабатываем, 
 скорее, уже не сайты, а RIA 3
  • 4. RIA — (исландск. Rich Internet Applica8on, насыщенное интернет- приложение), иногда IIA — Installable Internet Application — сайт, обладающий свойствами настольного приложения 4
  • 5. Законы развития ПО 5 1960 1970 1980 1990 2000 2010 Закон Мура Закон Вирта (закон Пейджа)
  • 6. Законы развития ПО 5 1960 1970 1980 1990 2000 2010 Закон Мура Закон Вирта (закон Пейджа) 1965
 производительность
 компьютеров удваивается
 примерно каждые
 два года
  • 7. Законы развития ПО 5 1960 1970 1980 1990 2000 2010 Закон Мура Закон Вирта (закон Пейджа) 1965
 производительность
 компьютеров удваивается
 примерно каждые
 два года ~1995
 медлительность программ
 возрастает быстрее чем
 производительность
 компьютеров
  • 8. Законы развития ПО 5 1960 1970 1980 1990 2000 2010 Закон Мура Закон Вирта (закон Пейджа) 1965
 производительность
 компьютеров удваивается
 примерно каждые
 два года ~1995
 медлительность программ
 возрастает быстрее чем
 производительность
 компьютеров System 1 Windows 1.0
  • 9. Законы развития ПО 5 1960 1970 1980 1990 2000 2010 Закон Мура Закон Вирта (закон Пейджа) 1965
 производительность
 компьютеров удваивается
 примерно каждые
 два года ~1995
 медлительность программ
 возрастает быстрее чем
 производительность
 компьютеров Решения, придуманные в 80-х оптимизированы для выполнения на слабых компьютерах, поэтому в современном контексте будут работать очень эффективноSystem 1 Windows 1.0
  • 12. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!"
  • 13. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 012345
  • 14. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 202122232425
  • 15. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632
  • 16. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632 1008160 ++ + + +
  • 17. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632 =251008160 ++ + + +
  • 18. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632
  • 19. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632 "!!!"!
  • 20. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632 "!!!"! 0200032 ++ + + +
  • 21. Двоичная запись 8 В памяти компьютера все числа хранятся в двоичном виде — как последовательность нулей и единиц. Разряды читаются справа налево. Нумерация разрядов начинается с нуля. Единица в разряде означает что итоговое число содержит двойку 
 в степени номера разряда !""!!" 12481632 "!!!"! 0200032 ++ + + + =34
  • 22. Битовые карты — (яп. — bitmap) они же битовые массивы (кор. — bitset, bitarray) последовательности бит, которые кодируют не степени двойки, а любую другую информацию. Хранятся в виде обычных чисел 9
  • 23. Битовые карты 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 24. Битовые карты • IP-адрес
 192.168.1.1 / 255.255.255.0 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 25. Битовые карты • IP-адрес
 192.168.1.1 / 255.255.255.0 • цвет 
 #FACE8D 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 26. Битовые карты • IP-адрес
 192.168.1.1 / 255.255.255.0 • цвет 
 #FACE8D • права пользователя
 chmod -R 777 . 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 27. Битовые карты • IP-адрес
 192.168.1.1 / 255.255.255.0 • цвет 
 #FACE8D • права пользователя
 chmod -R 777 . • карта уровня в игре или пиксели изображения 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 28. Битовые карты • IP-адрес
 192.168.1.1 / 255.255.255.0 • цвет 
 #FACE8D • права пользователя
 chmod -R 777 . • карта уровня в игре или пиксели изображения • состояние UX-компоненты 10 Битовой картой называется последовательность бит (нулей и единиц). В битовых картах может храниться не только число, но и любой другой набор данных
  • 29. Интерактивная демонстрация. Кодирование состояний в битах 11 Компонента здорового человека 🚭
  • 30. Битовые операции — логические операции над цепочками битов, в которых биты выступают как значения true или false 12
  • 31. Побитовое «или» 13 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний 010
 OR 100
 0
  • 32. Побитовое «или» 13 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний 010
 OR 100
 0
  • 33. Побитовое «или» 13 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний 010
 OR 100
 10
  • 34. Побитовое «или» 13 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний 010
 OR 100
 110
  • 35. Побитовое «или» 14 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний
  • 36. Побитовое «или» 14 Складывает переданные значения и сохраняет включенные биты обоих операторов. Идеально подходит для сложения нескольких состояний 010
 OR 100
 110
  • 37. 1010
 AND 1100
 0 Побитовое «и» 15 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 38. Побитовое «и» 15 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 1100
 0
  • 39. Побитовое «и» 15 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 1100
 00
  • 40. Побитовое «и» 15 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 1100
 000
  • 41. Побитовое «и» 15 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 1100
 1000
  • 42. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 43. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 44. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 45. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 46. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 0010
 = 0010
  • 47. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния 1010
 AND 0100
 = 0000
  • 48. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 49. Побитовое «и» 16 Сохраняет только те биты, которые были включены в обоих операндах. Идеально подходит для проверки состояния
  • 50. Компонента здорового человека 🚭 Интерактивная демонстрация. Продолжение 17
  • 51. Декларативный стиль Мы описываем не последовательность шагов (императивный стиль), а реакцию на изменение состояния 18
  • 52. Полученный код содержит всего пять (одну) управляющих строк. Остальной код — статические словари. Вне зависимости от размеров словарей (количества состояний) размер управляющего кода меняться не будет 19
  • 54.
  • 55. Описание поведения В качестве значений в словарях можно использовать не только обычные значения, но и функции. В этом случае можно описывать поведение каждого состояния независимо
  • 56. var Direction = {
 RIGHT: 0x01
 };
 
 var DirectionBehaviour = {
 0x01: function(character) {
 return Object.assign({
 left: character.left + character.hSpeed
 }, character);
 }
 ]); Описание поведения В качестве значений в словарях можно использовать не только обычные значения, но и функции. В этом случае можно описывать поведение каждого состояния независимо
  • 57. var Direction = {
 RIGHT: 0x01, TOP: 0x02
 };
 
 var DirectionBehaviour = {
 0x01: function(character) {},
 0x02: function(character) {} }; Описание поведения В качестве значений в словарях можно использовать не только обычные значения, но и функции. В этом случае можно описывать поведение каждого состояния независимо
  • 59. Даже Redux! Можно использовать битовые маски как параметр type для управляющих объектов action. Так, за одно обращение к хранилищу можно делать несколько операций с данными
  • 60. const ActionType = {
 UPDATE_1: 0x01, UPDATE_2: 0x02
 };
 
 store.dispatch({
 type: ActionType.UPDATE_1 | ActionType.UPDATE_2
 }); Даже Redux! Можно использовать битовые маски как параметр type для управляющих объектов action. Так, за одно обращение к хранилищу можно делать несколько операций с данными
  • 61. И кроме этого есть ещё 26
  • 62. И кроме этого есть ещё • исключающие или XOR, ^
 используется для переключения состояния (toggle) 26
  • 63. И кроме этого есть ещё • исключающие или XOR, ^
 используется для переключения состояния (toggle) • побитовый сдвиг влево << 26
  • 64. И кроме этого есть ещё • исключающие или XOR, ^
 используется для переключения состояния (toggle) • побитовый сдвиг влево << • побитовый сдвиг вправо >> 26
  • 65. И кроме этого есть ещё • исключающие или XOR, ^
 используется для переключения состояния (toggle) • побитовый сдвиг влево << • побитовый сдвиг вправо >> • сдвиг вправо с заполнением нулями >>> 26
  • 66. И кроме этого есть ещё • исключающие или XOR, ^
 используется для переключения состояния (toggle) • побитовый сдвиг влево << • побитовый сдвиг вправо >> • сдвиг вправо с заполнением нулями >>> • битовые маски
 когда одно состояние хранится в нескольких соседних битах используются маски, которые показывают единицами, в какие именно биты состояние записано 
 (IP-адрес и маска подсети) 26
  • 69. 🌳 Деревья 29 Связанная структура данных, состоящая из вложенных друг в друга повторяющихся узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево document head body #layoutmeta title aside main footer
  • 70. 🌳 Деревья 29 Связанная структура данных, состоящая из вложенных друг в друга повторяющихся узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево узел document head body #layoutmeta title aside main footer
  • 71. 🌳 Деревья 29 Связанная структура данных, состоящая из вложенных друг в друга повторяющихся узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево корень узел document head body #layoutmeta title aside main footer
  • 72. 🌳 Деревья 29 Связанная структура данных, состоящая из вложенных друг в друга повторяющихся узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево корень узел потомки document head body #layoutmeta title aside main footer
  • 73. 🌳 Деревья 29 Связанная структура данных, состоящая из вложенных друг в друга повторяющихся узлов. Самый наглядный пример, для фронтенд-разработчика — DOM-дерево корень узел лист потомки document head body #layoutmeta title aside main footer
  • 74. 🌳 Деревья Интерактивная демонстрация. Использование деревьев для описания зависимостей в форме 30
  • 75. 🚶🌳 Обход дерева Какими способами можно обходить дерево и на что может повлиять изменение способа обхода 31
  • 77. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева:
  • 78. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева: • DFS (поиск в глубину)
  • 79. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева: • DFS (поиск в глубину) • прямой
  • 80. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева: • DFS (поиск в глубину) • прямой • обратный
  • 81. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева: • DFS (поиск в глубину) • прямой • обратный • симметричный
  • 82. Деревья 32 document head body #layoutmeta title aside main footer Существует несколько способов перебора элементов дерева: • DFS (поиск в глубину) • прямой • обратный • симметричный • BFS (поиск в ширину)
  • 83. 33
  • 84. Прямой поиск в глубину (сербохорв. — Depth-first search, DFS) если у узла есть потомки, посещаются сначала они, а только потом соседний узел (всегда идём до самого конца) 34
  • 85. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer
  • 86. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document document
  • 87. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document headdocument head
  • 88. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta document head meta
  • 89. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title document head meta title
  • 90. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title body document head meta title body
  • 91. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title body #layout document head meta title body #layout
  • 92. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title body #layout aside document head meta title body #layout aside
  • 93. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title body #layout aside main document head meta title body #layout aside main
  • 94. Прямой обход в глубину 35 Сначала посещается узел, а потом его потомки document head body #layoutmeta title aside main footer document head meta title body #layout aside main footer document head meta title body #layout aside main footer
  • 95. 36
  • 96. 36
  • 97. 36
  • 98. 36
  • 99. 36
  • 100. 36
  • 101. 36
  • 102. 36
  • 103. 36
  • 104. Поиск в ширину (древнеарамейск. Breadth-first search, BFS) узлы посещаются по уровням, будто срезаются слои с торта (смотрим по верхам) 37
  • 105. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer
  • 106. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document document
  • 107. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document headdocument head
  • 108. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body document head body
  • 109. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta document head meta body
  • 110. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta title document head meta title body
  • 111. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta title #layout document head meta title body #layout
  • 112. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta title #layout aside document head meta title body #layout aside
  • 113. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta title #layout aside main document head meta title body #layout aside main
  • 114. Обход в ширину 38 Сначала посещаются все узлы на уровне, потом их потомки и так до самого низа document head body #layoutmeta title aside main footer document head body meta title #layout aside main footer document head meta title body #layout aside main footer
  • 115. 39
  • 116. 39
  • 117. 39
  • 118. 39
  • 119. 39
  • 120. 39
  • 121. 39
  • 122. 39
  • 123. 39
  • 124. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS)
  • 125. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS)
  • 126. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS)
  • 127. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS)
  • 128. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS)
  • 129. «Лёгкий компьютер» в играх 40 Обходит дерево сверху вниз и выбирает варианты, в которых не проиграет в ближайшие несколько шагов (BFS) — Лошадью ходи,
 век воли не видать!
  • 130. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
  • 131. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
  • 132. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS)
  • 133. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS) — Ботвинник 
 сдавался!
  • 134. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS) — Ботвинник 
 сдавался!
  • 135. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS) — Ботвинник 
 сдавался!
  • 136. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS) — Ботвинник 
 сдавался!
  • 137. «Сложный компьютер» в играх 41 Обходит дерево как можно глубже и выбирает выигрышные варианты (DFS) — Так-так, вот тут у меня
 больше шансов на победу — Ботвинник 
 сдавался!
  • 138. ☀🔦 Анализ рынка разработки Статистика требований к разработчикам на основе вакансий «Моего Круга» с помощью библиотеки d3.js 42
  • 139. Дерево требований к разработчикам 43 Листьями являются конкретные технологии, а узлами — группы умения сервер контроль версийклиент верстка less scss ... ...библиотеки AngularReact
  • 140. 44
  • 142. 🌳 Преимущества деревьев • сохраняются и передаются в виде строковых данных 45
  • 143. 🌳 Преимущества деревьев • сохраняются и передаются в виде строковых данных • легко читаются 45
  • 144. 🌳 Преимущества деревьев • сохраняются и передаются в виде строковых данных • легко читаются • быстро выполняются (нативный объект JS) 45
  • 145. 🌳 Преимущества деревьев • сохраняются и передаются в виде строковых данных • легко читаются • быстро выполняются (нативный объект JS) • не имеют чёткого формата описания, поэтому идеально подстраиваются под задачу 45
  • 146. Ищите решения, а не инструменты Через 20 лет не будет ни Бэйбеля, ни Реакта, ни Вебпака, ни Джаваскрипта. А деревья и битовые карты — будут 46
  • 148. Что поизучать • github.com/htmlacademy/bitset.js 
 библиотека от HTML Academy для работы с битовыми массивами в JS — обёртки для добавления, удаления, проверки и получения объектов с состоянием 47
  • 149. Что поизучать • github.com/htmlacademy/bitset.js 
 библиотека от HTML Academy для работы с битовыми массивами в JS — обёртки для добавления, удаления, проверки и получения объектов с состоянием • o0.github.io/trees
 интерактивные демки, примеры для разных областей применения, больше теории, исходники 47
  • 150. Что поизучать • github.com/htmlacademy/bitset.js 
 библиотека от HTML Academy для работы с битовыми массивами в JS — обёртки для добавления, удаления, проверки и получения объектов с состоянием • o0.github.io/trees
 интерактивные демки, примеры для разных областей применения, больше теории, исходники • github.com/thejameskyle/itsy-bitsy-data-structures
 репозиторий, с интересным и подробным рассказом про алгоритмы и структуры данных на JS 47
  • 152. tutors@htmlacademy.ru Наставничество — отличный способ найти себе в команду новичка и воспитать его так, как считаешь должным на готовой продуманной инфраструктуре или просто поделиться опытом 49