Кирилл Мокевнин — Ментальное программирование

38
Ментальное программирование обзор

Upload: daria-oreshkina

Post on 21-Dec-2014

1.400 views

Category:

Documents


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Кирилл Мокевнин — Ментальное программирование

Ментальное программирование

обзор

Page 2: Кирилл Мокевнин — Ментальное программирование

Ментальная модель

Ментальной моделью в психологии называют трудно формализуемую совокупность эмпирических знаний, которая формируется в сознании человека при взаимодействии с объектом. Проще говоря, это то, как мы представляем себе некий предмет.

Page 3: Кирилл Мокевнин — Ментальное программирование

Ментальное программирование

Кодирование ментальной модели. Чтение исходного кода такой программы восстанавливает картину мира с максимальной точностью.

Page 4: Кирилл Мокевнин — Ментальное программирование

Философия языка python

● Красивое лучше, чем уродливое.● Явное лучше, чем неявное.● Простое лучше, чем сложное.● Сложное лучше, чем запутанное.● Плоское лучше, чем вложенное.● Разреженное лучше, чем плотное.● Читаемость имеет значение.● Особые случаи не настолько особые, чтобы нарушать

правила.● При этом практичность важнее безупречности.● Должен существовать один — и, желательно, только один —

очевидный способ сделать это.● Если реализацию сложно объяснить — идея плоха.● Если реализацию легко объяснить — идея, возможно,

хороша

Page 5: Кирилл Мокевнин — Ментальное программирование

Литература

Page 6: Кирилл Мокевнин — Ментальное программирование

Примеры

Page 7: Кирилл Мокевнин — Ментальное программирование

Запоминаем в сессию user id

session[:user_id] = user.id

Page 8: Кирилл Мокевнин — Ментальное программирование

Авторизуем пользователя

session[:user_id] = user.id

vs

sign_in(user)

Page 9: Кирилл Мокевнин — Ментальное программирование

Длинное условие ...

# комментарий без которого сложно понять _зачем_

if user.company? && user.company.active? && user.money > 50

Page 10: Кирилл Мокевнин — Ментальное программирование

Простая задача

# комментарий без которого сложно понять _зачем_

if user.company? && user.company.active? && user.money > 50

vs

if user.can_edit_company?

Page 11: Кирилл Мокевнин — Ментальное программирование

Комментарии зло

# этот метод проверяет что ...validate_dates: (from, to) -> year_in_milliseconds = 1000 * 60 * 60 * 24 * 365 return !(Math.abs(from.getTime() - to.getTime()) / year_in_milliseconds >= @MAX

Page 12: Кирилл Мокевнин — Ментальное программирование

Нет комментария - нет проблем

# этот метод проверяет что ...validate_dates: (from, to) -> year_in_milliseconds = 1000 * 60 * 60 * 24 * 365 return !(Math.abs(from.getTime() - to.getTime()) / year_in_milliseconds >= @MAX

vs

check_years_range: (from, to) -> ...

Page 13: Кирилл Мокевнин — Ментальное программирование

Создаем бранч

git branch my_super_feature

Page 14: Кирилл Мокевнин — Ментальное программирование

Создаем фичу

git branch my_super_feature

vs

git feature start implement_api

Page 15: Кирилл Мокевнин — Ментальное программирование

Gitflow extentions

Набор скриптов к git, реализующий модель gitflow на ментальном уровне.

● git flow feature start implement_api

● git flow feature finish implement_api

● git flow release start

● git flow hotfix finish

Не забываем про "закон дырявых абстракций"

Page 16: Кирилл Мокевнин — Ментальное программирование

Слова ложатся на действия (работа с git, написание кода и

т.д.) максимально точно

Page 17: Кирилл Мокевнин — Ментальное программирование

Подходы

Page 18: Кирилл Мокевнин — Ментальное программирование

domain driven design

● Моделирование предметной области● Единый язык

Понятия:● Entity● Value Object● Service● Repository● Aggregate

Page 19: Кирилл Мокевнин — Ментальное программирование

DSLstate_machine initial: :new do state :new state :done state :rejected

after_transition :new => :done, do: :update_related_telecast

event :perform do transition :new => :done end

event :reject do transition :new => :rejected end end

Page 20: Кирилл Мокевнин — Ментальное программирование

Метод по агрегату

if user.company? && user.company.active? && user.money > 50

if user.can_edit_company?

Page 21: Кирилл Мокевнин — Ментальное программирование

Программистам от программистов

представления о коде

Page 22: Кирилл Мокевнин — Ментальное программирование

Антипаттерны

Page 23: Кирилл Мокевнин — Ментальное программирование

Нарушение контракта

# доu = User.firstu.destroy # стандартное поведение, удаляет из базы

# послеu = User.firstu.destroy # переопределенное поведение, помечает как удаленное

Page 24: Кирилл Мокевнин — Ментальное программирование

Паттерны и принципы

Page 25: Кирилл Мокевнин — Ментальное программирование

Принципы

● DRY● KISS● YAGNI

Page 26: Кирилл Мокевнин — Ментальное программирование

Принципы

● GRASP● SOLID● CQS● Law of Demeter● Single Level of Abstraction Principle

Page 27: Кирилл Мокевнин — Ментальное программирование

Command-query separation

Принцип сформулирован Бертраном Мейером, как одно из основных правил разрабатываемого им языка программирования Eiffel. Самая короткая формулировка:

Задавая вопрос, не изменяй ответ.

Page 28: Кирилл Мокевнин — Ментальное программирование

Практики

● Первый раз - лучший

Page 29: Кирилл Мокевнин — Ментальное программирование

Практики

● Первый раз - лучший● Разбитое окно

Page 30: Кирилл Мокевнин — Ментальное программирование

Практики

● Первый раз - лучший● Разбитое окно● Черные и белые списки

Page 31: Кирилл Мокевнин — Ментальное программирование

Практики

● Первый раз - лучший● Разбитое окно● Черные и белые списки● безопасность по умолчанию

Page 32: Кирилл Мокевнин — Ментальное программирование

Практики

● Первый раз - лучший● Разбитое окно● Черные и белые списки● безопасность по умолчанию● api

Page 33: Кирилл Мокевнин — Ментальное программирование

Получай и используй отдельно

sign_in(create(:user))

assert_equal name, User.find(id).name

Company.find(params[:id]).destroy

Page 34: Кирилл Мокевнин — Ментальное программирование

Сложность выбора

Мы не будем использовать мощную библиотеку X, ради пары методов. Внедрим

ее по необходимости.

Page 35: Кирилл Мокевнин — Ментальное программирование

Сложность выбора

"Еще рано" превращается в "слишком поздно"

Page 36: Кирилл Мокевнин — Ментальное программирование

Выделяем при дублировании

● сильное влияние человеческого фактора● продублирует кто-то другой● нет тестов, страшно менять

Page 37: Кирилл Мокевнин — Ментальное программирование

XP

● весь код написан так, словно его писал один высококвалифицированный разработчик

● парное программирование● TDD

Page 38: Кирилл Мокевнин — Ментальное программирование

Вопросы?

@[email protected]