SlideShare a Scribd company logo
1 of 24
Конструирование кода: Думай верно! (или  5 Правильных Убеждений ) Токарев Олег, Hosting Concepts B.V .
Когда актуально? >1мес. >1 coder >1 проект требуется  поддержка
Характерные сложности ,[object Object],О, Боже! Только не мой мозг! Кто виноват? Чьи «костыли»?!! Поубивал бы!!
Что делать? ,[object Object],Стоять у каждого над душой?
Всегда ли есть ресурсы для этого?
Новый путь!
Пять волшебных убеждений!
* убеждения ,[object Object],[object Object],[object Object]
* убеждения Почему хорошо? Меньше кода ->  проще менять -> гибкость   Цели Архитектуры: стабильность, гибкость Что хорошо? Меньше кода — хорошо! Проще читать — супер!
* убеждения ,[object Object],[object Object],[object Object]
Итак  
[object Object],[object Object],[object Object],[object Object],[object Object]
Правило прикрытой жопы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Жопа надёжно прикрыта. Разработчик спокоен и расслаблен.
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Попа прекрыта НЕ надёжно. Программиста мучает мания преследования и ночные кашмары
Безобразно, но единообразно ,[object Object],[object Object],[object Object]
Разделяй и властвуй Псевдоязыки Интерфейсы Физическое разнесение Разделение команды
Следствие 1: Гавнокод в стойло ! ,[object Object],[object Object],[object Object],[object Object]
Правило Бестселлера
Правило Бестселлера
Скаут — друг природы!
Ещё раз  
 
[object Object]
Вопросы? Олег Токарев, Hosting Concepts B.V. [email_address]

More Related Content

Viewers also liked

CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под CocaineCodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest
 
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest
 
CodeFest 2013. Конев М. — Push-уведомления
CodeFest 2013. Конев М. — Push-уведомленияCodeFest 2013. Конев М. — Push-уведомления
CodeFest 2013. Конев М. — Push-уведомления
CodeFest
 
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все граблиCodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest
 
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
CodeFest
 
CodeFest 2014. Осипов К. — NoSQL: вангуем вместе
CodeFest 2014. Осипов К. — NoSQL: вангуем вместеCodeFest 2014. Осипов К. — NoSQL: вангуем вместе
CodeFest 2014. Осипов К. — NoSQL: вангуем вместе
CodeFest
 
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest
 
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подходCodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest
 
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest
 
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest
 
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest
 
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWHCodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest
 
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest
 
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузкиCodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest
 
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
CodeFest
 
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest 2011. Юферев Р. — Пора задуматься о ManageabilityCodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest
 

Viewers also liked (20)

CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под CocaineCodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
 
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
 
CodeFest 2013. Конев М. — Push-уведомления
CodeFest 2013. Конев М. — Push-уведомленияCodeFest 2013. Конев М. — Push-уведомления
CodeFest 2013. Конев М. — Push-уведомления
 
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все граблиCodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
 
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
CodeFest 2013. Rauschmayer A. — An overview of ECMAScript 6, the next version...
 
CodeFest 2014. Осипов К. — NoSQL: вангуем вместе
CodeFest 2014. Осипов К. — NoSQL: вангуем вместеCodeFest 2014. Осипов К. — NoSQL: вангуем вместе
CodeFest 2014. Осипов К. — NoSQL: вангуем вместе
 
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
 
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подходCodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
 
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
 
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM LanguageCodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
 
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
 
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWHCodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
 
CodeFest 2010. Погребняк А. — Проблемы оценки труда программистов
CodeFest 2010. Погребняк А. — Проблемы оценки труда программистовCodeFest 2010. Погребняк А. — Проблемы оценки труда программистов
CodeFest 2010. Погребняк А. — Проблемы оценки труда программистов
 
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
 
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузкиCodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
 
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
 
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest 2011. Юферев Р. — Пора задуматься о ManageabilityCodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Keynote: Challenges, Pains and Points of Software Development Today
Keynote: Challenges, Pains and Points of Software Development TodayKeynote: Challenges, Pains and Points of Software Development Today
Keynote: Challenges, Pains and Points of Software Development Today
 

Similar to CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)

Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений) Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
Oleg Tokarev
 
Ускорение доставки iOS фич и вовлечение QA команды в автоматизацию
Ускорение доставки iOS фич и вовлечение QA команды в автоматизациюУскорение доставки iOS фич и вовлечение QA команды в автоматизацию
Ускорение доставки iOS фич и вовлечение QA команды в автоматизацию
Kateryna Sprynsian
 

Similar to CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений) (12)

Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений) Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)
 
Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)Почему оно не находится! / Андрей Аксенов (Sphinx)
Почему оно не находится! / Андрей Аксенов (Sphinx)
 
Joker2014
Joker2014Joker2014
Joker2014
 
Worried code
Worried codeWorried code
Worried code
 
Worried code
Worried codeWorried code
Worried code
 
Ускорение доставки iOS фич и вовлечение QA команды в автоматизацию
Ускорение доставки iOS фич и вовлечение QA команды в автоматизациюУскорение доставки iOS фич и вовлечение QA команды в автоматизацию
Ускорение доставки iOS фич и вовлечение QA команды в автоматизацию
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...
[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...
[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...
 
About Python
About PythonAbout Python
About Python
 
Flaky tests. Метод.
Flaky tests. Метод. Flaky tests. Метод.
Flaky tests. Метод.
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 
Wargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиковWargaming: Оценка задач для котиков
Wargaming: Оценка задач для котиков
 

More from CodeFest

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Recently uploaded

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 

CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правильных Убеждений)

Editor's Notes

  1.    Пояснить, что в этом докладе Проект, Продукт, Система.
  2. Проблема некоторых проектов - это то, что при их старте никто не знает, что получится в конечном итоге: то ли загородная дача, то ли многоэтажный бизнес центр. Нередко получается, что через пять лет после выхода в свет имеем домик в деревне, из палисадника которого периодически стартует баллистическая ракета, хотя изначально закладывался ночной клуб. В таких условиях понятия «правильной» с начала и до конца актуальной архитектуры ввиде строгого плана работ и чертежей не существует. В такой ситуации, каждый разработчик должен быть максимально автономен в плане принятия решений. Для этого необходимо, чтобы принимаемые им решения хотя бы не противоречили с такими же решениями коллег. Этому может способствовать общий взгляд на архитектуру, который в свою очередь может поддерживаться общими ценностями и убеждениями.
  3. Для таких непростых проектов характерны следующие явления: Код очень сложно поддаётся восприятию Часто возникают споры между разработчиками о целесообразности применения того или иного подхода Код быстро захламляется «важными» функциями и методами, которые могут даже дублировать друг друга.
  4. Для начала определимся с терминами. Что будет считаться Убеждением в данном докладе.
  5. Ценности постулируются Архитектурой. Для Архитектуры ценно то, что позволяет удовлетворить определённым критериям качества. (Ценностные убеждения) Одному и тому же критерию можно удовлетворить с использованием разных подходов. Архитектура постулирует, какие из этих подходов «Правильные». (Методологические убеждения) «Методологические убеждения» поддерживаются посредством «Причинно-следственных Убеждений» с «Ценностными Убеждениями». *** Убеждение должно имень наименование короткое, либо эмоционально окрашенное, с тем чтобы быстрее «усваиваться»
  6. Для начала определимся с терминами. Что будет считаться Убеждением в данном докладе.
  7. Иногда случается, что разработчики начинают страдать острой степенью паранойи и манией преследования. Вместо того, чтобы вызвать некоторую и просто воспользоваться его плодами, они начинают окружать её различными видами проверок, тем самым увеличивая количество бесполезного чтива.. «Правило Прикрытой Жопы» гласит: Ожидайте от вызываемого вами кода того возвращаемого значения, которое декларируется его разработчиком. Если вызываемый код возвращает не декларированное значение : удостоверьтесь, что этот код будет исправлен. «Антиправило Прикрытой Жопы» гласит: Попробуйте интерпретировать все значения, которые может вернуть вызываемый код, и преобразовать их в «правильные». В будущем это замаскирует возможную ошибку и захламит код не постижимыми человеческим разумом проверками. Пример на следующем слайде.
  8. Единый Coding Style в рамках одного проекта: Код проще для восприятия Меньше времени тратится на прочтение Единый подход к решению определённого класса задач. Общее квадратное колесо используемое везде, где требуется колесо в проекте, сокращает время на поддержку овальных, круглых и пр. колёс, которые могли бы существовать в проекте — сокращаем базу кода, а, следовательно, повышаем гибкость и устойчивость продукта к ошибкам программирования. Одинаковые команды «Левой, левой, раз два три» Человеку свойственно наделять слова неким смыслом исходя из своего прежнего опыта. Чем лучше слово подкреплено предыдущим успешным опытом, тем проще человеку читать — не приходится задумываться о значении каждого слова. Так и при конструировании кода: каждое слово должно встречаться в единственном свойственном только ему контексте. Тогда программисты быстрее усваивают, что оно означает, и на чтение кода начинает уходить меньше кода. Примеры: именование переменных, методы именования классов, функций и т.д.
  9. Один из способов сохранять готовность к модификации — это разделить систему на относительно независимые подсистемы Не всегда удаётся удержать границы между подсистемами. Искусственные границы помогут отцу русской демократии: Интерфейсы, псевдоязыки, физическое разделение. Разные разработчики на смежных подсистемах. Искусственные границы дают минимальную гарантию, что подсистемы не диффундируют друг в друга и будут оставаться относительно независимыми, а следовательно не будут сильно зависеть от других подсистем и их изменениями.
  10. В "грязном" коде кто-то может увидеть: Большую гибкость и, следовательно, возможность лучше подстроиться под нужды заказчика. Возможность сделать фичу быстрее, чем если бы вы пытались сделать её по Феншуй Возможность реализовать решение в парадигме отличной от ООП Если в вашем замечательном проекте ещё нет "грязного" кода и прочих  ugly hacks - непременно предусмотрите места для них, пока они не стали появляться спонтанно в неожиданных местах.
  11. Это Убеждение естественно вытекает из предыдущего. Одна из заповедей скаута: Скаут — Друг Природы! Это значит, что скаут после привала оставит лесную полянку чище, чем до привала. NOTE: Впрочем, это совсем не значит, что нужно останавливаться только на самых грязных полянках.