SlideShare a Scribd company logo
1 of 23
goit.com.ua
vk.com/goITclub
facebook.com/goITclub
Как помыть кота?
Clean Code
Язык мы знаем, что дальше?
• Нет неверных решений, есть
решенные задачи и не решенные
• Только хорошие программисты пишут
код…
• Все это понятно, но как?!!
Куда можно расти?
• Архитектурные улучшения – GoF,
GRASP…
• Методологические улучшения – Agile
(SCRUM, XP…)
• Структурные улучшения – юнит-тесты,
документация, continuous building…
Все это понятно, но можно
побыстрее?
Clean Code by Robert C. Martin
• Посмотрим, что внутри
Хороший код/плохой код
• Стоимость плохого кода
• Ценность хорошего кода
• Оценка качества кода
Самое важное в коде -
названия
• Названия должны нести смысл
• Не обманывайте
• Произносимые названия
• Поиск по названиям
• Не кодируйте!
• Не надо демонстрировать свой
ум
• Существительные – классы,
методы - глаголы
• Не будьте милым
Самое важное в коде -
названия
• Одна вещь – одно название
• Не смешивайте
• Используйте слова из
предметной области
• Включайте названия в
контекст
• Не используйте лишнего
контекста
Методы
• Короткие!
• Делают только одно
• Один уровень
абстракции на весь
метод
• SWITCH
• Описательные имена
• Аргументы (0,1,2,3)
• Флаги
Методы
• Без side-effects
• Аргументы, используемые как результат
• Или что-то делаешь, или возвращаешь
• Exceptions / return codes
• Try-catch в отдельных методах
• Don’t repeat yourself
• Структурное программирование/один
вход – один выход
Комментарии
• Не делайте из
комментариев макияжа
• Самовыражайтесь в коде
• Хорошие комментарии
• Плохие комментарии
Хорошие комментарии
• Legal
• Пояснения к поведению
• Пояснение намерений
• Пояснение запутанной
части кода
• Предупреждение о
последствиях
• TO DO
• Javadocs
Плохие комментарии
• Бормотание
• Излишние комментарии
• Вводящий в заблуждение
• Комментарии из-под палки
• Журнал изменений
• Белый шум
• Используйте метод или
переменную вместо
комментария
• Маркеры кода ======
• Комментарии о закрытии блока
• Закоментаренный код
Плохие комментарии
• HTML комментарии
• Информация о системе в
локальном комментарии
• Слишком много
информации
• Непонятные комментарии
• Javadocs в не публичных
методах
Форматирование
• Форматирование – это важно
• Метафора газетной статьи
• Пропуски между концепциями
• Вертикальная дистанция
• Вертикальный порядок
• Длина строки (80-100-120)
• Выравнивание
• Расположение фигурных
скобок, однострочные методы
• Правила команды
Объекты и структуры
• Именование классов и
интерфейсов
• Объекты и структуры
данных
• Закон Деметры
• Гибриды
• Сокрытие структуры
• Data Transfer Objects
• Active Records
Error handling
• Используйте исключения, а
не коды возврата
• Начинайте с блока try-
catch-finally
• Не используйте checked
exceptions
• Указывайте контекст в
исключениях
• Не возвращайте null
• Не передавайте null в
методы
Классы
• Классы должны быть
короткими
• Single Responsibility
Principle
• Оси изменений и
изоляция от изменений
• Open-Closed Principle
Система
• Отделение старта
системы от
использования
• Выделение фабрик
• Масштабирование
Правила простого дизайна
(по Кенту Беку)
• Запускаются все тесты
• Не содержит повторений
• Выражает намерение
программиста
• Минимальное количество
классов и методов
goit.com.ua
vk.com/goITclub
facebook.com/goITclub

More Related Content

What's hot

Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
Theo Jungeblut
 

What's hot (20)

Clean code slide
Clean code slideClean code slide
Clean code slide
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Clean code
Clean codeClean code
Clean code
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
Clean Code II - Dependency Injection
Clean Code II - Dependency InjectionClean Code II - Dependency Injection
Clean Code II - Dependency Injection
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Clean code
Clean codeClean code
Clean code
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
Clean Code
Clean CodeClean Code
Clean Code
 
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
DDD Introduction
DDD IntroductionDDD Introduction
DDD Introduction
 
Clean code
Clean codeClean code
Clean code
 
Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Oop concepts
Oop conceptsOop concepts
Oop concepts
 

Viewers also liked

Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
Sergey Nemchinsky
 

Viewers also liked (20)

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететь
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективы
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мир
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статика
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективы
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нее
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системы
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service Bus
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозгов
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection Framework
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
Основы Java. 2. JVM
Основы Java. 2. JVMОсновы Java. 2. JVM
Основы Java. 2. JVM
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. Антипаттерны
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 
Refactoring
RefactoringRefactoring
Refactoring
 
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
 
Architecture of .net framework
Architecture of .net frameworkArchitecture of .net framework
Architecture of .net framework
 

Similar to Clean code

Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.
Vadim Kruchkov
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
Daniel Podolsky
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
avokin
 

Similar to Clean code (20)

"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать"Этот код плохой, его нужно переписать". Слышали? Как обосновать
"Этот код плохой, его нужно переписать". Слышали? Как обосновать
 
Программистский подход в дизайне
Программистский подход в дизайнеПрограммистский подход в дизайне
Программистский подход в дизайне
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.Работа с унаследованным кодом. Есть ли жизнь после коммита.
Работа с унаследованным кодом. Есть ли жизнь после коммита.
 
2015-04-12 03 Павел Сумароков. Как найти работу своей мечты
2015-04-12 03 Павел Сумароков. Как найти работу своей мечты2015-04-12 03 Павел Сумароков. Как найти работу своей мечты
2015-04-12 03 Павел Сумароков. Как найти работу своей мечты
 
03 HappyDev-lite-2015 spring. Павел Сумароков. Как найти работу своей мечты.
03 HappyDev-lite-2015 spring. Павел Сумароков. Как найти работу своей мечты.03 HappyDev-lite-2015 spring. Павел Сумароков. Как найти работу своей мечты.
03 HappyDev-lite-2015 spring. Павел Сумароков. Как найти работу своей мечты.
 
10errors seo
10errors seo10errors seo
10errors seo
 
Тэгирование сайтов
Тэгирование сайтовТэгирование сайтов
Тэгирование сайтов
 
Алёна Мельон «E-mail-маркетинг. Кому это нужно»
Алёна Мельон «E-mail-маркетинг. Кому это нужно»Алёна Мельон «E-mail-маркетинг. Кому это нужно»
Алёна Мельон «E-mail-маркетинг. Кому это нужно»
 
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…
 
Грабли в продвижении сайтов: Сергей Кокшаров @Devakaru
Грабли в продвижении сайтов: Сергей Кокшаров @DevakaruГрабли в продвижении сайтов: Сергей Кокшаров @Devakaru
Грабли в продвижении сайтов: Сергей Кокшаров @Devakaru
 
Грабли в продвижении сайтов - КИМ, 22 сентября 2012
Грабли в продвижении сайтов - КИМ, 22 сентября 2012Грабли в продвижении сайтов - КИМ, 22 сентября 2012
Грабли в продвижении сайтов - КИМ, 22 сентября 2012
 
Code review psyhology
Code review psyhologyCode review psyhology
Code review psyhology
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
как нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудниковкак нанять и сделать счастливыми хороших программистов и других сотрудников
как нанять и сделать счастливыми хороших программистов и других сотрудников
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услуга
 
Антон Воронюк «Поисковые операторы Google» WebPromoExperts.TV #32
Антон Воронюк «Поисковые операторы Google» WebPromoExperts.TV #32Антон Воронюк «Поисковые операторы Google» WebPromoExperts.TV #32
Антон Воронюк «Поисковые операторы Google» WebPromoExperts.TV #32
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 

Clean code

  • 3.
  • 4. Язык мы знаем, что дальше? • Нет неверных решений, есть решенные задачи и не решенные • Только хорошие программисты пишут код… • Все это понятно, но как?!!
  • 5. Куда можно расти? • Архитектурные улучшения – GoF, GRASP… • Методологические улучшения – Agile (SCRUM, XP…) • Структурные улучшения – юнит-тесты, документация, continuous building…
  • 6. Все это понятно, но можно побыстрее?
  • 7. Clean Code by Robert C. Martin • Посмотрим, что внутри
  • 8. Хороший код/плохой код • Стоимость плохого кода • Ценность хорошего кода • Оценка качества кода
  • 9. Самое важное в коде - названия • Названия должны нести смысл • Не обманывайте • Произносимые названия • Поиск по названиям • Не кодируйте! • Не надо демонстрировать свой ум • Существительные – классы, методы - глаголы • Не будьте милым
  • 10. Самое важное в коде - названия • Одна вещь – одно название • Не смешивайте • Используйте слова из предметной области • Включайте названия в контекст • Не используйте лишнего контекста
  • 11. Методы • Короткие! • Делают только одно • Один уровень абстракции на весь метод • SWITCH • Описательные имена • Аргументы (0,1,2,3) • Флаги
  • 12. Методы • Без side-effects • Аргументы, используемые как результат • Или что-то делаешь, или возвращаешь • Exceptions / return codes • Try-catch в отдельных методах • Don’t repeat yourself • Структурное программирование/один вход – один выход
  • 13. Комментарии • Не делайте из комментариев макияжа • Самовыражайтесь в коде • Хорошие комментарии • Плохие комментарии
  • 14. Хорошие комментарии • Legal • Пояснения к поведению • Пояснение намерений • Пояснение запутанной части кода • Предупреждение о последствиях • TO DO • Javadocs
  • 15. Плохие комментарии • Бормотание • Излишние комментарии • Вводящий в заблуждение • Комментарии из-под палки • Журнал изменений • Белый шум • Используйте метод или переменную вместо комментария • Маркеры кода ====== • Комментарии о закрытии блока • Закоментаренный код
  • 16. Плохие комментарии • HTML комментарии • Информация о системе в локальном комментарии • Слишком много информации • Непонятные комментарии • Javadocs в не публичных методах
  • 17. Форматирование • Форматирование – это важно • Метафора газетной статьи • Пропуски между концепциями • Вертикальная дистанция • Вертикальный порядок • Длина строки (80-100-120) • Выравнивание • Расположение фигурных скобок, однострочные методы • Правила команды
  • 18. Объекты и структуры • Именование классов и интерфейсов • Объекты и структуры данных • Закон Деметры • Гибриды • Сокрытие структуры • Data Transfer Objects • Active Records
  • 19. Error handling • Используйте исключения, а не коды возврата • Начинайте с блока try- catch-finally • Не используйте checked exceptions • Указывайте контекст в исключениях • Не возвращайте null • Не передавайте null в методы
  • 20. Классы • Классы должны быть короткими • Single Responsibility Principle • Оси изменений и изоляция от изменений • Open-Closed Principle
  • 21. Система • Отделение старта системы от использования • Выделение фабрик • Масштабирование
  • 22. Правила простого дизайна (по Кенту Беку) • Запускаются все тесты • Не содержит повторений • Выражает намерение программиста • Минимальное количество классов и методов