SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Ментальное
программирование
Мокевнин Кирилл
О докладчике
● Москва
○ starlook.ru -> undev -> qik/skype
● Ульяновск
○ филиал undev
Programming complexity
● Accidental complexity
● Essential complexity
Ментальная модель
Ментальной моделью в психологии называют
трудно формализуемую совокупность
эмпирических знаний, которая формируется в
сознании человека при взаимодействии с
объектом. Проще говоря, это то, как мы
представляем себе некий предмет.
Ментальное программирование
Кодирование ментальной модели. Чтение
исходного кода такой программы восстанавливает
картину мира с максимальной точностью.
Философия языка Python
● Красивое лучше, чем уродливое.
● Явное лучше, чем неявное.
● Простое лучше, чем сложное.
● Сложное лучше, чем запутанное.
● Плоское лучше, чем вложенное.
● Разреженное лучше, чем плотное.
● Читаемость имеет значение.
● Особые случаи не настолько особые, чтобы нарушать правила.
● При этом практичность важнее безупречности.
Литература
Примеры
Запоминаем в сессию user id
session[:user_id] = user.id
Авторизуем пользователя
session[:user_id] = user.id
vs
sign_in(user)
Длинное условие...
# комментарий без которого сложно понять _зачем_
if user.company? && user.company.active? &&
user.money > 50
Длинное условие...
# комментарий без которого сложно понять _зачем_
if user.company? && user.company.active? &&
user.money > 50
vs
if user.can_edit_company?
Комментарии зло
# этот метод проверяет что ...
validate_dates: (from, to) ->
year_in_milliseconds = 1000 * 60 * 60 * 24 * 365
return !(Math.abs(from.getTime() - to.getTime())
/ year_in_milliseconds >= @MAX
Комментарии зло
# этот метод проверяет что ...
validate_dates: (from, to) ->
year_in_milliseconds = 1000 * 60 * 60 * 24 * 365
return !(Math.abs(from.getTime() - to.getTime())
/ year_in_milliseconds >= @MAX
check_years_range: (from, to) ->
Создаем бранч
git branch my_super_feature
Создаем бранч
git branch my_super_feature
vs
git branch my_super_feature
gitflow
Набор скриптов к git, реализующий модель gitflow на
ментальном уровне.
● git flow feature start implement_api
● git flow release start
● git flow hotfix finish
Не забываем про "закон дырявых абстракций"
Слова ложатся на действия
(работа с git, написание кода и
т.д.) максимально точно
Подходы
domain driven design
● Моделирование предметной области
● Единый язык
Понятия:
● Entity, Value Object
● Service, Repository
● Aggregate
DSL
state_machine initial: :new do
state :new
state :done
event :perform do
transition :new => :done
end
end
Программистам от
программистов
Антипаттерны
Нарушение контракта
# стандартное поведение, удаляет из базы
u = User.first
u.destroy # DELETE FROM users WHERE id = 1
# переопределенное поведение, помечает как удаленное
u = User.first
u.destroy # UPDATE users SET state = "deleted" WHERE id = 1
Паттерны и принципы
Принципы
● DRY
● KISS
● YAGNI
Принципы
● GRASP
● SOLID
● CQS
● Law of Demeter
● Single Level of Abstraction Principle
command-query separation
Принцип сформулирован Бертраном Мейером, как одно из
основных правил разрабатываемого им языка
программирования Eiffel. Самая короткая формулировка:
Задавая вопрос, не изменяй ответ.
Особые случаи
Особые случаи не настолько особые,
чтобы нарушать правила.
Принципы
● Первый раз - лучший
Принципы
● Первый раз - лучший
● Разбитое окно
Принципы
● Первый раз - лучший
● Разбитое окно
● Черные и белые списки
Принципы
● Первый раз - лучший
● Разбитое окно
● Черные и белые списки
● Безопасность по умолчанию
Принципы
● Первый раз - лучший
● Разбитое окно
● Черные и белые списки
● Безопасность по умолчанию
● API
Получай и используй отдельно
sign_in(create(:user))
assert_equal name, User.find(id).name
Company.find(params[:id]).destroy
Сложность выбора
Мы не будем использовать мощную библиотеку X, ради
пары методов. Внедрим ее по необходимости.
Сложность выбора
"Еще рано" превращается в "слишком поздно"
Выделяем при дублировании
● сильное влияние человеческого фактора
● продублирует кто-то другой
● нет тестов, страшно менять
XP
● весь код написан так, словно его писал один
высококвалифицированный разработчик
● парное программирование
● TDD
Вопросы?
@mokevnin
mokevnin@gmail.com

Weitere ähnliche Inhalte

Ähnlich wie Ментальное программирование / Кирилл Мокевнин (Undev)

Dmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it failDmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it fail
Andrew Mayorov
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
Computer Science Club
 
Programmers' Mistakes for Dummies
Programmers' Mistakes for DummiesProgrammers' Mistakes for Dummies
Programmers' Mistakes for Dummies
COTOHA
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
corehard_by
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
Computer Science Club
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
DneprCiklumEvents
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Dmytro Mindra
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
Anton Katkov
 

Ähnlich wie Ментальное программирование / Кирилл Мокевнин (Undev) (20)

Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Dmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it failDmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it fail
 
Domain Context Integration
Domain Context IntegrationDomain Context Integration
Domain Context Integration
 
Про то, что (лекция для студентов об адаптации к работе)
Про то, что (лекция для студентов об адаптации к работе)Про то, что (лекция для студентов об адаптации к работе)
Про то, что (лекция для студентов об адаптации к работе)
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
 
Список идей: Scrum
Список идей: ScrumСписок идей: Scrum
Список идей: Scrum
 
Programmers' Mistakes for Dummies
Programmers' Mistakes for DummiesProgrammers' Mistakes for Dummies
Programmers' Mistakes for Dummies
 
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
Этюды о буферизации: асинхронные оповещения, репликация обновлений, объединен...
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
05 net saturday vasiliy borovyak ''.net performance nontrivial bottlenecks''
 
DDD Workshop
DDD WorkshopDDD Workshop
DDD Workshop
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Генерация программы поведения игрового персонажа по естественно-языковой спец...
Генерация программы поведения игрового персонажа по естественно-языковой спец...Генерация программы поведения игрового персонажа по естественно-языковой спец...
Генерация программы поведения игрового персонажа по естественно-языковой спец...
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
 
Прагматик. Калугин. Программист-менеджер
Прагматик. Калугин. Программист-менеджерПрагматик. Калугин. Программист-менеджер
Прагматик. Калугин. Программист-менеджер
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Ментальное программирование / Кирилл Мокевнин (Undev)