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

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

Dec 27, 2014

Download

Documents

Ontico

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ментальное программирование / Кирилл Мокевнин (Undev)

Ментальное

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

Мокевнин Кирилл

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

О докладчике

● Москва○ starlook.ru -> undev -> qik/skype

● Ульяновск○ филиал undev

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

Programming complexity

● Accidental complexity● Essential complexity

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

Ментальная модельМентальной моделью в психологии называют

трудно формализуемую совокупность

эмпирических знаний, которая формируется в

сознании человека при взаимодействии с

объектом. Проще говоря, это то, как мы

представляем себе некий предмет.

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

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

Кодирование ментальной модели. Чтение

исходного кода такой программы восстанавливает

картину мира с максимальной точностью.

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

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

● Красивое лучше, чем уродливое.

● Явное лучше, чем неявное.

● Простое лучше, чем сложное.

● Сложное лучше, чем запутанное.

● Плоское лучше, чем вложенное.

● Разреженное лучше, чем плотное.

● Читаемость имеет значение.

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

● При этом практичность важнее безупречности.

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

Литература

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

Примеры

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

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

session[:user_id] = user.id

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

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

session[:user_id] = user.id

vs

sign_in(user)

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

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

# комментарий без которого сложно понять _зачем_if user.company? && user.company.active? &&

user.money > 50

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

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

# комментарий без которого сложно понять _зачем_if user.company? && user.company.active? &&

user.money > 50

vs

if user.can_edit_company?

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

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

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

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

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

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

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

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

vs

git branch my_super_feature

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

gitflow

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

ментальном уровне.

● git flow feature start implement_api● git flow release start● git flow hotfix finish

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

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

Слова ложатся на действия

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

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

Подходы

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

domain driven design

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

Понятия:

● Entity, Value Object● Service, Repository● Aggregate

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

DSL

state_machine initial: :new do state :new state :done

event :perform do transition :new => :done

endend

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

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

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

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

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

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

Нарушение контракта# стандартное поведение, удаляет из базыu = User.firstu.destroy # DELETE FROM users WHERE id = 1

# переопределенное поведение, помечает как удаленноеu = User.firstu.destroy # UPDATE users SET state = "deleted" WHERE id = 1

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

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

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

Принципы

● DRY● KISS● YAGNI

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

Принципы

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

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

command-query separation

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

программирования Eiffel. Самая короткая формулировка:

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

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

Особые случаи

Особые случаи не настолько особые,

чтобы нарушать правила.

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

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

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

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

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

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

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

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

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

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

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

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

sign_in(create(:user))

assert_equal name, User.find(id).name

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

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

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

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

пары методов. Внедрим ее по необходимости.

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

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

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

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

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

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

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

XP

● весь код написан так, словно его писал один

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

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

Вопросы?

@mokevnin

[email protected]