SlideShare a Scribd company logo
1 of 82
Download to read offline
Михаил Давыдов
Разработчик JavaScript
Code Style
В ролях
- разработчик А
- разработчик Б (новичек)
История про разработчиков
4
Эта история вымышленная
и к Яндексу не относится
Жил-был один разработчик
и писал вот так:
6
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
7
В проект пришел еще один и
стал писать так:
8
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
9
И общего Code Style у них
не было…
10
11
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
А: Что за говнокод?
12
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
Б: У самого говнокод!
13
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
А: Почему так ф-ю
написал?
14
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
Б: А ты вообще табы
используешь!
15
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
А: Зачем тут скобка?
16
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
Б: Уайтсмитс? Ты из
какой пещеры вылез?
17
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
А: Зачем тут точка с
запятой?
18
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
Б: А ты зачем перенос
не поставил?
19
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Код разработчика Б
А: RTFM or GTFO!
20
function name(value)
-tab->{
-tab->-tab->var a = 0, b = 42;
-tab->-tab->if (value) return a
-tab->}
Код разработчика А
Б: А в бубен?
21
22
Нужна договоренность в
стиле кода
23
Организационный профит Code Style
•  Это закон
–  Должна быть отдельная страница о которой все знают
–  Страницу просто найти
•  Закон разрешает конфликты
–  Не знание закона не освобождает от ответственности
•  Решает большинство проблем
•  Эту страницу нужно дать прочитать перед
началом работы
24
Если не понятно, то нужно
дать понять причину ввода
такого Code Style
Применение CS
Для быстрого восприятия кода
Для предотвращения ошибок в коде
Для быстрого написания кода
26
Каждый из следующих
примеров зависит от
восприятия конкретного
человека
Обобщение элементов
28
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Обобщение соседних элементов
29
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Обобщение соседних элементов
Перенос строки разрывает обобщение
30
.b-form {
font-family: Arial;
font-size: 2em;
padding: 0 10px;
min-height: 100px;
}
Обобщение соседних элементов
Перенос строки разделяет разные типы CSS
ствойств и обобщает соседние элементы
Вертикаль – список
32
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Вертикаль – список
var - список переменных
33
var name = function (value) {
..var a = 0
...., b = 42
...., c = 42
...., d = 42
....;
};
Вертикаль – список
Coma-first style – его цель уменьшить число
ошибок.
34
var name = function (value) {
..var a = 0
...., b = 42
....c = 42
...., d = 42
....;
};
Вертикаль – список
Отсутствие запятых легко заметить
35
var a =
..{ b: 2
.., c: 3
.., d: 4
..}
..;
Вертикаль – список
Coma-first style для литералов Object
https://gist.github.com/357981
36
ALL code is ugly.
Yours, mine, everyone's.
Code Is Ugly. Just face it.
37
.b-form {
-webkit-transition: color;
-moz-transition: color;
-ms-transition: color;
-o-transition: color;
transition: color;
}
Вертикаль – список
Выравнивание по свойству
38
.b-form {
-webkit-transition: color;
-moz-transition: color;
-ms-transition: color;
-o-transition: color;
transition: color;
}
Вертикаль – список
Выравнивание по значению
Так проще прочитать
39
<ol class="b-list">
....<li class="b-item">Abc</li>
....<li class="b-item">Abc</li>
....<li class="b-item">Abc</li>
</ol>
Вертикаль – список
40
jQuery('.clickable')
.....filter('a')
.....click(handler)
.....end()
.....show('slow')
....;
Вертикаль – список
Вызов функций по цепочке – список
41
if (typeof a !== "undefined" &&
typeof b !== "undefined" &&
typeof c === "string") {
// your stuff
}
Вертикаль – список
Несколько условий – список
Единообразие
43
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Единообразие
Похожий код быстрее воспринять
44
// Этот пробел обязательный
function A(value) {
}
// Этот пробел для единообразия
var A = function (value) {
};
Единообразие
Похожий код быстрее воспринять
Разрядка
46
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Разрядка
БуряМглоюНебоКроет vs
Буря мглою небо кроет
47
for ( var i = 0 ; i < 100 ; i++ ){
}
for (var i = 0; i < 100; i++){
}
Разрядка, но без фанатизма
Буря Мглою Небо Кроет vs
Буря мглою небо кроет
48
Сильно разряженный код
сложно воспринять
49
<div class="b-header"></div>
Однако не везде она работает
В HTML перед и после равно пробел как
правило не ставят
Начало - конец
51
var name = function (value) {
....var a = 0,
........b = 42;
if (value) {
....return a;
}
};
Начало блока "видит" конец блока
Код представляет из себя "параграфы
текста"
52
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Начало блока "видит" конец блока
Код представляет из себя "параграфы
текста"
53
<div class="b-header">
....<div class="b-item">Abc</div>
....<div class="b-item">Abc</div>
....<div class="b-item">Abc</div>
</div>
Начало блока "видит" конец блока
54
<div class="b-header">
....<div class="b-item">
........Abc
....</div>
....<div class="b-item">
........Abc
....</div>
</div>
Начало блока "видит" конец блока
Не везде это применимо: много писать,
мельтешение, баги с пробелами
Предотвращение ошибок
56
<div class="b-header">
....<div class="b-item">
........Abc
....</div>
....<div class="b-item">
........Abc
....</div>
</div>
Лишние пробелы
Переносы и пробел = +2 лишних пробельных
символа
57
Лишние пробелы
Переносы и пробел = +2 лишних пробельных
символа
var item = $('.b-item')[0];
if (item.innerHTML = "Abc") {
// Недостижим
}
Точка с запятой в FE
59
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
}
Точка с запятой в Function Expression
60
cat **/*.js > all.js!
61
var name = function (value) {
}var name2 = function (value) {
}
Точка с запятой в Function Expression
SyntaxError: missing ; before statement
62
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return a;
....}
};
Точка с запятой в Function Expression
Скобки у циклов
64
var name = function (value) {
....var a = 0,
........b = 42;
....if (value)
........return a;
};
Скобки у циклов и условий
Лень писать скобки
65
var name = function (value) {
....var a = 0,
........b = 42;
....if (value)
........a = 42;
........return a;
};
Скобки у циклов и условий
Редкая логическая ошибка
66
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........a = 42;
........return a;
....}
};
Скобки у циклов и условий
67
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) return a;
};
Скобки у циклов и условий
Много скобок создает много шума
Auto semicolon insertion
69
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return
............{pewpew: a};
....}
};
Auto semicolon insertion
70
var name = function (value) {
....var a = 0,
........b = 42;
....if (value) {
........return;
............{pewpew: a};
....}
};
Auto semicolon insertion
После return будет поставлена ;
http://es5.github.com/#x7.9
Последнее свойство перекрывает
предшествующее
Свойства с префиксами в CSS
72
.b-form {
box-shadow: 0 0 400px 200px #000;
-webkit-box-shadow: 0 0 400px 200px #000;
}
Свойства с префиксами в CSS
73
Свойства с префиксами в CSS
74
.b-form {
-webkit-box-shadow: 0 0 400px 200px #000;
box-shadow: 0 0 400px 200px #000;
}
Свойства с префиксами в CSS
Последним должен идти свойство без
префикса
http://pepelsbey.net/pres/pre-fixes/
75
Свойства с префиксами в CSS
76
Еще несколько слов…
•  Документирование неявного кода
–  Код должен быть максимально самодокументируемым
•  Написание примеров использования
–  Чтобы не рыться в коде
•  Сокращение длины строки
–  Чтобы не вертеть головой и не скролить
•  Уменьшение уровней вложенности
–  Быстрее читать код
•  Единообразие в модулях и именах
•  Автоматизированная проверка кода ♥
–  IDE
–  Pre Commit Hook
77
Код должен выглядеть так
как будто его пишет один
человек
78
А как в Яндексе?
79
Как мы делаем в Яндексе
•  Love & Peace
•  У каждого проекта свой Code Style
–  Страница в Вики
–  Или CONTRIBUTE.md файл в корне проекта
•  Есть стиль по умолчанию
–  Страница в Вики со стилей по языкам
–  Не обязательный – на случай если лень
•  Стараемся использовать общепринятый
–  Так проще новым разработчикам
–  Привычней читать сторонний код
•  Code Review
–  Зависит от размера проекта
–  Как правило новички проходят обязательно
80
Заключение
•  Соглашение Code Style - Must have!
•  Нужно знать меру
–  Разрядка пробелами
–  Фигурные скобки
•  Все правила имеют на то причину
81
82
Михаил Давыдов
Разработчик JavaScript
azproduction@yandex-team.ru
azproduction
Спасибо

More Related Content

Viewers also liked

How to install git on ubuntu
How to install git on ubuntuHow to install git on ubuntu
How to install git on ubuntubaran19901990
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Mikhail Davydov
 
07 control+structures
07 control+structures07 control+structures
07 control+structuresbaran19901990
 
JavaScript. Async (in Russian)
JavaScript. Async (in Russian)JavaScript. Async (in Russian)
JavaScript. Async (in Russian)Mikhail Davydov
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)Mikhail Davydov
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptMikhail Davydov
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)Mikhail Davydov
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 

Viewers also liked (8)

How to install git on ubuntu
How to install git on ubuntuHow to install git on ubuntu
How to install git on ubuntu
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
 
07 control+structures
07 control+structures07 control+structures
07 control+structures
 
JavaScript. Async (in Russian)
JavaScript. Async (in Russian)JavaScript. Async (in Russian)
JavaScript. Async (in Russian)
 
Ajax and Transports (in russian)
Ajax and Transports (in russian)Ajax and Transports (in russian)
Ajax and Transports (in russian)
 
Dump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScriptDump-IT Загрузка и инициализация JavaScript
Dump-IT Загрузка и инициализация JavaScript
 
JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)JavaScript. Loops and functions (in russian)
JavaScript. Loops and functions (in russian)
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 

Similar to Code Style (in russian)

CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSSRoman Dvornov
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Yandex
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Yandex
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationlgordey
 
Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Yandex
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
CSSO — сжимаем CSS Роман Дворнов, Avito
 CSSO — сжимаем CSS Роман Дворнов, Avito CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avitoit-people
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Yandex
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksRoman Dvornov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchevyaevents
 

Similar to Code Style (in russian) (20)

CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 
MoscowJS 26 webpack presentation
MoscowJS 26 webpack presentationMoscowJS 26 webpack presentation
MoscowJS 26 webpack presentation
 
Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»Владимир Варанкин — «БЭМ»
Владимир Варанкин — «БЭМ»
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
CSSO — сжимаем CSS Роман Дворнов, Avito
 CSSO — сжимаем CSS Роман Дворнов, Avito CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avito
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"Вадим Макишвили "Вёрстка в IntelliJIDEA"
Вадим Макишвили "Вёрстка в IntelliJIDEA"
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Denis Bugarchev
Denis BugarchevDenis Bugarchev
Denis Bugarchev
 

More from Mikhail Davydov

Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
 
JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)Mikhail Davydov
 
JavaScript. OOP (in russian)
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)Mikhail Davydov
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)Mikhail Davydov
 
JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)Mikhail Davydov
 
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)Mikhail Davydov
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Dart - светлая сторона силы?
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?Mikhail Davydov
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 

More from Mikhail Davydov (10)

Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 
JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)JavaScript. Event Model (in russian)
JavaScript. Event Model (in russian)
 
JavaScript. OOP (in russian)
JavaScript. OOP (in russian)JavaScript. OOP (in russian)
JavaScript. OOP (in russian)
 
JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)JavaScript. Event Loop and Timers (in russian)
JavaScript. Event Loop and Timers (in russian)
 
JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)JavaScript. Introduction (in russian)
JavaScript. Introduction (in russian)
 
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Components now!
Components now! Components now!
Components now!
 
Dart - светлая сторона силы?
Dart - светлая сторона силы?Dart - светлая сторона силы?
Dart - светлая сторона силы?
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 

Code Style (in russian)