Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

HappyDev'13
December 08, 2013

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

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

HappyDev'13

December 08, 2013
Tweet

More Decks by HappyDev'13

Other Decks in Programming

Transcript

  1. Ментальная модель Ментальной моделью в психологии называют трудно формализуемую совокупность

    эмпирических знаний, которая формируется в сознании человека при взаимодействии с объектом. Проще говоря, это то, как мы представляем себе некий предмет.
  2. Философия языка python • Красивое лучше, чем уродливое. • Явное

    лучше, чем неявное. • Простое лучше, чем сложное. • Сложное лучше, чем запутанное. • Плоское лучше, чем вложенное. • Разреженное лучше, чем плотное. • Читаемость имеет значение. • Особые случаи не настолько особые, чтобы нарушать правила. • При этом практичность важнее безупречности. • Должен существовать один — и, желательно, только один — очевидный способ сделать это. • Если реализацию сложно объяснить — идея плоха. • Если реализацию легко объяснить — идея, возможно, хороша
  3. Простая задача # комментарий без которого сложно понять _зачем_ if

    user.company? && user.company.active? && user.money > 50 vs if user.can_edit_company?
  4. Комментарии зло # этот метод проверяет что ... validate_dates: (from,

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

    ... 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) -> ...
  6. Gitflow extentions Набор скриптов к git, реализующий модель gitflow на

    ментальном уровне. • git flow feature start implement_api • git flow feature finish implement_api • git flow release start • git flow hotfix finish Не забываем про "закон дырявых абстракций"
  7. domain driven design • Моделирование предметной области • Единый язык

    Понятия: • Entity • Value Object • Service • Repository • Aggregate
  8. DSL state_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
  9. Нарушение контракта # до u = User.first u.destroy # стандартное

    поведение, удаляет из базы # после u = User.first u.destroy # переопределенное поведение, помечает как удаленное
  10. Принципы • GRASP • SOLID • CQS • Law of

    Demeter • Single Level of Abstraction Principle
  11. Command-query separation Принцип сформулирован Бертраном Мейером, как одно из основных

    правил разрабатываемого им языка программирования Eiffel. Самая короткая формулировка: Задавая вопрос, не изменяй ответ.
  12. Практики • Первый раз - лучший • Разбитое окно •

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

    Черные и белые списки • безопасность по умолчанию • api
  14. XP • весь код написан так, словно его писал один

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