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

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

Avatar for HappyDev'13 HappyDev'13
December 08, 2013

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

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

Avatar for HappyDev'13

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