Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,368 views

Published on

  • Be the first to comment

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

  1. 1. МентальноепрограммированиеМокевнин Кирилл
  2. 2. О докладчике● Москва○ starlook.ru -> undev -> qik/skype● Ульяновск○ филиал undev
  3. 3. Programming complexity● Accidental complexity● Essential complexity
  4. 4. Ментальная модельМентальной моделью в психологии называюттрудно формализуемую совокупностьэмпирических знаний, которая формируется всознании человека при взаимодействии собъектом. Проще говоря, это то, как мыпредставляем себе некий предмет.
  5. 5. Ментальное программированиеКодирование ментальной модели. Чтениеисходного кода такой программы восстанавливаеткартину мира с максимальной точностью.
  6. 6. Философия языка Python● Красивое лучше, чем уродливое.● Явное лучше, чем неявное.● Простое лучше, чем сложное.● Сложное лучше, чем запутанное.● Плоское лучше, чем вложенное.● Разреженное лучше, чем плотное.● Читаемость имеет значение.● Особые случаи не настолько особые, чтобы нарушать правила.● При этом практичность важнее безупречности.
  7. 7. Литература
  8. 8. Примеры
  9. 9. Запоминаем в сессию user idsession[:user_id] = user.id
  10. 10. Авторизуем пользователяsession[:user_id] = user.idvssign_in(user)
  11. 11. Длинное условие...# комментарий без которого сложно понять _зачем_if user.company? && user.company.active? &&user.money > 50
  12. 12. Длинное условие...# комментарий без которого сложно понять _зачем_if user.company? && user.company.active? &&user.money > 50vsif user.can_edit_company?
  13. 13. Комментарии зло# этот метод проверяет что ...validate_dates: (from, to) ->year_in_milliseconds = 1000 * 60 * 60 * 24 * 365return !(Math.abs(from.getTime() - to.getTime())/ year_in_milliseconds >= @MAX
  14. 14. Комментарии зло# этот метод проверяет что ...validate_dates: (from, to) ->year_in_milliseconds = 1000 * 60 * 60 * 24 * 365return !(Math.abs(from.getTime() - to.getTime())/ year_in_milliseconds >= @MAXcheck_years_range: (from, to) ->
  15. 15. Создаем бранчgit branch my_super_feature
  16. 16. Создаем бранчgit branch my_super_featurevsgit branch my_super_feature
  17. 17. gitflowНабор скриптов к git, реализующий модель gitflow наментальном уровне.● git flow feature start implement_api● git flow release start● git flow hotfix finishНе забываем про "закон дырявых абстракций"
  18. 18. Слова ложатся на действия(работа с git, написание кода ит.д.) максимально точно
  19. 19. Подходы
  20. 20. domain driven design● Моделирование предметной области● Единый языкПонятия:● Entity, Value Object● Service, Repository● Aggregate
  21. 21. DSLstate_machine initial: :new dostate :newstate :doneevent :perform dotransition :new => :doneendend
  22. 22. Программистам отпрограммистов
  23. 23. Антипаттерны
  24. 24. Нарушение контракта# стандартное поведение, удаляет из базыu = User.firstu.destroy # DELETE FROM users WHERE id = 1# переопределенное поведение, помечает как удаленноеu = User.firstu.destroy # UPDATE users SET state = "deleted" WHERE id = 1
  25. 25. Паттерны и принципы
  26. 26. Принципы● DRY● KISS● YAGNI
  27. 27. Принципы● GRASP● SOLID● CQS● Law of Demeter● Single Level of Abstraction Principle
  28. 28. command-query separationПринцип сформулирован Бертраном Мейером, как одно изосновных правил разрабатываемого им языкапрограммирования Eiffel. Самая короткая формулировка:Задавая вопрос, не изменяй ответ.
  29. 29. Особые случаиОсобые случаи не настолько особые,чтобы нарушать правила.
  30. 30. Принципы● Первый раз - лучший
  31. 31. Принципы● Первый раз - лучший● Разбитое окно
  32. 32. Принципы● Первый раз - лучший● Разбитое окно● Черные и белые списки
  33. 33. Принципы● Первый раз - лучший● Разбитое окно● Черные и белые списки● Безопасность по умолчанию
  34. 34. Принципы● Первый раз - лучший● Разбитое окно● Черные и белые списки● Безопасность по умолчанию● API
  35. 35. Получай и используй отдельноsign_in(create(:user))assert_equal name, User.find(id).nameCompany.find(params[:id]).destroy
  36. 36. Сложность выбораМы не будем использовать мощную библиотеку X, радипары методов. Внедрим ее по необходимости.
  37. 37. Сложность выбора"Еще рано" превращается в "слишком поздно"
  38. 38. Выделяем при дублировании● сильное влияние человеческого фактора● продублирует кто-то другой● нет тестов, страшно менять
  39. 39. XP● весь код написан так, словно его писал одинвысококвалифицированный разработчик● парное программирование● TDD
  40. 40. Вопросы?@mokevninmokevnin@gmail.com

×