Slide 1

Slide 1 text

Ментальное программирование Кирилл Мокевнин, undev.ru

Slide 2

Slide 2 text

О докладчике ● Москва ○ starlook.ru, undev, qik/skype ● Ульяновск ○ филиал undev ○ конференция "стачка"

Slide 3

Slide 3 text

Programming complexity ● Accidental complexity ● Essential complexity

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

Литература

Slide 8

Slide 8 text

Запоминаем в сессию user id session[:user_id] = user.id

Slide 9

Slide 9 text

Авторизуем пользователя session[:user_id] = user.id vs sign_in(user)

Slide 10

Slide 10 text

Длинное условие # комментарий без которого сложно понять _зачем_ if user.company? && user.company.active? && user.money > 50

Slide 11

Slide 11 text

Длинное условие # комментарий без которого сложно понять _зачем_ if user.company? && user.company.active? && user.money > 50 vs if user.can_edit_company?

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Комментарии зло # этот метод проверяет что ... 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) -> ...

Slide 14

Slide 14 text

Создаем бранч git branch my_super_feature

Slide 15

Slide 15 text

Создаем бранч git branch my_super_feature vs git feature start my_super_feature

Slide 16

Slide 16 text

gitflow Набор скриптов к git, реализующий модель gitflow на ментальном уровне. ● git flow feature start implement_api ● git flow release start ● git flow hotfix finish Не забываем про "закон дырявых абстракций"

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

domain driven design ● Моделирование предметной области ● Единый язык Понятия: ● Entity, Value Object ● Service, Repository ● Aggregate

Slide 19

Slide 19 text

dsl state_machine initial: :new do state :new state :done event :perform do transition :new => :done end end

Slide 20

Slide 20 text

Нарушение контракта # стандартное поведение, удаляет из базы u = User.first u.destroy # DELETE FROM users WHERE id = 1 # переопределенное поведение, помечает как удаленное u = User.first u.destroy # UPDATE users SET state = "deleted" WHERE id = 1

Slide 21

Slide 21 text

нарушение контракта переопределение git defaults

Slide 22

Slide 22 text

принципы ● DRY ● KISS ● YAGNI

Slide 23

Slide 23 text

принципы ● GRASP ● SOLID ● CQS ● Law of Demeter ● Single Level of Abstraction Principle

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Особые случаи Особые случаи не настолько особые, чтобы нарушать правила.

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Вопросы? twitter: @mokevnin