SlideShare a Scribd company logo
What helps us
to write HQ JS?

Yandex DevDay, Riga 2013
HELLO RIGA♥	

I’M	

DMITRII 	

   	

SHCHADEI	

@	

MeTroFuN	



2
Code review



     Many eyes see what one alone
     cannot
                    Grand Master Yoda
So, why does it work?



    •  Collective code ownership
     –  Decrease the bus factor
     –  Increase code reuse


    •  Skills exchange

    •  The Ego Effect


4
•  Pre and post commit

    •  Version control agnostic

    •  Lots of features
     –  progress meter
     –  jira integration
     –  statistics


5
using Pull Requests



    •  That’s FREE*

    •  Pre commits only

    •  No git-flow, Yes github-flow



6
makes you better at GitHub

    # install on OS X !
    $ port install hub!
    !
    # alias it as git !
    $ alias git=hub!
    !
    # open a pull request for a branch, put its URL to the
    clipboard!
    $ git push -u origin feature !
    $ git pull-request | pbcopy!
    !
    # put compare URL for a topic branch to clipboard !
    $ git compare -u feature | pbcopy!
    !
    # see the current project's issues!
    $ git browse --issues!

7
Static code analysis

         Mistakes are always easy to see
         in retrospect
                            Obi-Wan Kenobi
- usage example


    /*jshint unused: true, es5: false, undef: true */!
    !
    var foo = { ! !<< Defined but never used!
      ! !a: 1, !!
      ! !b: 2, ! !<< Extra comma!
      !}, super,! !<< Reserved word!
      !nums = {}; !!
    !
    for (i = 0; i < 10; i++) { << Not defined!
      !nums[i] = function (j) {
      ! !return i + j;
      !}; ! ! ! !<< Functions within a loop!
        !
    }!



9
for style guides


•  Max number of
 –  line length
 –  function params
 –  function statements
 –  nested blocks depth



•  Tab width and whitespaces

•  Quotation marks and lots of other cool staff…
Force to use…

     HOOK	

     PRE-COMMIT	

     #!/bin/sh –e!
     case "${1}" in!
      !--about ) !
      ! !echo "check *.js files using jshint";;!
      !* ) !
      !for FILE in $(git diff --cached --diff-filter=ACMTR --
     name-only HEAD | grep -e '.js$'); do!
      ! !echo jshint $FILE !
      ! !jshint $FILE !
      !done;;!
     esac!
11
- bonus track =)

     .column {!!
      !display: inline-block;!
      !width: 50%;!
      !*width: 49%; ! ! !<< Star prefix found!
                   !
      !font-size: 11px;!
      !background: rgba(0,0,0,0.5); !<< Fallback should precede !
      !position: relative;!
      !float: left; !<< Can't be used with display: inline-block!
                   !
     }!
     .column * { ! ! ! ! !<< Is known to be slow
      !display: inline;!
      !color: black !important;! ! !<< Use of !important!
      !font-weight: bold; !!
      !color: red; ! !<< Duplicate property!
      !-moz-user-select: none; !<< include -ms-user-select !
      !-webkit-user-select: none;!
     }!


12
SUFFER THE PAIN OF
         DISCIPLINE
             OR
     SUFFER THE PAIN OF
          REGRET

13
That’s all,
     Any Questions?
14
      @ MeTroFuN

More Related Content

KEY
Git - Some tips to do it better
PDF
Desert Code Camp 2014: C#, the best programming language
PDF
BDD: Behind the Scenes
PPTX
ChatOps meetup: les humains parlent aux robots
PDF
C初心者がbyebugにPR出した話
PDF
Yandex may 2013 a san-tsan_msan
PPTX
Discovering Common Motifs in Cursor Movement Data
PDF
Артём Кошелев "Тестирование фронтенда с HtmlElements: разработка быстрее, под...
Git - Some tips to do it better
Desert Code Camp 2014: C#, the best programming language
BDD: Behind the Scenes
ChatOps meetup: les humains parlent aux robots
C初心者がbyebugにPR出した話
Yandex may 2013 a san-tsan_msan
Discovering Common Motifs in Cursor Movement Data
Артём Кошелев "Тестирование фронтенда с HtmlElements: разработка быстрее, под...

Viewers also liked (14)

PDF
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
PDF
Henning Brauer: OpenBSD's pf: Design, Implementation and Future
PDF
John Kenevey, Open Compute "Open Compute Project: history, value proposition...
PDF
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
PDF
"Open Mapping on iOS" — Justin Miller, MapBox
PDF
Предсказание оттока игроков из World of Tanks
PDF
Управлять успешностью продукта или идти вслепую? Исследования для продакт-мен...
PDF
поиск яндекса; архитектура
PDF
Андрей Ковалев - Безопасность сайта: мифы и реальность
PDF
2013 09 14 http-протокол
PDF
2 search
PDF
Руслан Гроховецкий — Python и вычисления
PDF
Сергей Татаринцев — Написание модулей технологий для bem-tools
PDF
Секция «Маркетинг там, где его нет», Сергей Петренко, Яндекс.Украина
Алексей Андросов "Тотальная заморозка = быстрая загрузка"
Henning Brauer: OpenBSD's pf: Design, Implementation and Future
John Kenevey, Open Compute "Open Compute Project: history, value proposition...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Open Mapping on iOS" — Justin Miller, MapBox
Предсказание оттока игроков из World of Tanks
Управлять успешностью продукта или идти вслепую? Исследования для продакт-мен...
поиск яндекса; архитектура
Андрей Ковалев - Безопасность сайта: мифы и реальность
2013 09 14 http-протокол
2 search
Руслан Гроховецкий — Python и вычисления
Сергей Татаринцев — Написание модулей технологий для bem-tools
Секция «Маркетинг там, где его нет», Сергей Петренко, Яндекс.Украина
Ad

Similar to Дмитрий Щадей "Что помогает нам писать качественный JavaScript-код?" (20)

PPTX
Untangling spring week4
PDF
Cape Cod Web Technology Meetup - 3
PPTX
HTML and CSS.pptx
PDF
Frontend Engineer Toolbox
PDF
Git tutorial
PDF
[artifactconf] Github for People Who Don't Code
PDF
How to write good quality code
PDF
Git Going for the Transylvania JUG
PDF
Modern front-end Workflow
PPTX
HTML, CSS, and Javascript for Web developed by hu
PDF
Git and GitHub at the San Francisco JUG
PDF
How to not blow up spaceships
PPTX
Untangling - fall2017 - week 7
PDF
Creative Web 2 - JavaScript
PDF
Git sourcecontrolpreso
PDF
DLW Europe - JavaScript Tooling
PDF
Hitchhiker's guide to the front end development
PDF
Software Development Practices.pdf
PDF
Tool Time
PDF
Efficient JavaScript Development
Untangling spring week4
Cape Cod Web Technology Meetup - 3
HTML and CSS.pptx
Frontend Engineer Toolbox
Git tutorial
[artifactconf] Github for People Who Don't Code
How to write good quality code
Git Going for the Transylvania JUG
Modern front-end Workflow
HTML, CSS, and Javascript for Web developed by hu
Git and GitHub at the San Francisco JUG
How to not blow up spaceships
Untangling - fall2017 - week 7
Creative Web 2 - JavaScript
Git sourcecontrolpreso
DLW Europe - JavaScript Tooling
Hitchhiker's guide to the front end development
Software Development Practices.pdf
Tool Time
Efficient JavaScript Development
Ad

More from Yandex (20)

PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
PDF
Эталонное описание фильма на основе десятков дубликатов
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Эталонное описание фильма на основе десятков дубликатов

Recently uploaded (20)

PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
KodekX | Application Modernization Development
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Empathic Computing: Creating Shared Understanding
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Cloud computing and distributed systems.
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Electronic commerce courselecture one. Pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPT
Teaching material agriculture food technology
Unlocking AI with Model Context Protocol (MCP)
KodekX | Application Modernization Development
20250228 LYD VKU AI Blended-Learning.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
NewMind AI Monthly Chronicles - July 2025
Empathic Computing: Creating Shared Understanding
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
The AUB Centre for AI in Media Proposal.docx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Cloud computing and distributed systems.
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Electronic commerce courselecture one. Pdf
Network Security Unit 5.pdf for BCA BBA.
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Teaching material agriculture food technology

Дмитрий Щадей "Что помогает нам писать качественный JavaScript-код?"

  • 1. What helps us to write HQ JS? Yandex DevDay, Riga 2013
  • 2. HELLO RIGA♥ I’M DMITRII SHCHADEI @ MeTroFuN 2
  • 3. Code review Many eyes see what one alone cannot Grand Master Yoda
  • 4. So, why does it work? •  Collective code ownership –  Decrease the bus factor –  Increase code reuse •  Skills exchange •  The Ego Effect 4
  • 5. •  Pre and post commit •  Version control agnostic •  Lots of features –  progress meter –  jira integration –  statistics 5
  • 6. using Pull Requests •  That’s FREE* •  Pre commits only •  No git-flow, Yes github-flow 6
  • 7. makes you better at GitHub # install on OS X ! $ port install hub! ! # alias it as git ! $ alias git=hub! ! # open a pull request for a branch, put its URL to the clipboard! $ git push -u origin feature ! $ git pull-request | pbcopy! ! # put compare URL for a topic branch to clipboard ! $ git compare -u feature | pbcopy! ! # see the current project's issues! $ git browse --issues! 7
  • 8. Static code analysis Mistakes are always easy to see in retrospect Obi-Wan Kenobi
  • 9. - usage example /*jshint unused: true, es5: false, undef: true */! ! var foo = { ! !<< Defined but never used! ! !a: 1, !! ! !b: 2, ! !<< Extra comma! !}, super,! !<< Reserved word! !nums = {}; !! ! for (i = 0; i < 10; i++) { << Not defined! !nums[i] = function (j) { ! !return i + j; !}; ! ! ! !<< Functions within a loop! ! }! 9
  • 10. for style guides •  Max number of –  line length –  function params –  function statements –  nested blocks depth •  Tab width and whitespaces •  Quotation marks and lots of other cool staff…
  • 11. Force to use… HOOK PRE-COMMIT #!/bin/sh –e! case "${1}" in! !--about ) ! ! !echo "check *.js files using jshint";;! !* ) ! !for FILE in $(git diff --cached --diff-filter=ACMTR -- name-only HEAD | grep -e '.js$'); do! ! !echo jshint $FILE ! ! !jshint $FILE ! !done;;! esac! 11
  • 12. - bonus track =) .column {!! !display: inline-block;! !width: 50%;! !*width: 49%; ! ! !<< Star prefix found! ! !font-size: 11px;! !background: rgba(0,0,0,0.5); !<< Fallback should precede ! !position: relative;! !float: left; !<< Can't be used with display: inline-block! ! }! .column * { ! ! ! ! !<< Is known to be slow !display: inline;! !color: black !important;! ! !<< Use of !important! !font-weight: bold; !! !color: red; ! !<< Duplicate property! !-moz-user-select: none; !<< include -ms-user-select ! !-webkit-user-select: none;! }! 12
  • 13. SUFFER THE PAIN OF DISCIPLINE OR SUFFER THE PAIN OF REGRET 13
  • 14. That’s all, Any Questions? 14 @ MeTroFuN