Oct 26, 2011

Программист-прагматик. Путь от подмастерья к мастеру - Э. Хант, Д. Томас

Прагматическая философия

  • Хаос в программе пораждает еще большую неразбириху. Если есть недоработки стоит сразу их устранить.

Прагматический подход

  • DRY
  • Ортогональность системы - объекты не должны пересекаться или пересекаться минимально. (сцепление - cohesion)
  • Стрельба трассирующими
  • Прототип
  • Язык должен отражать предметную область (именование переменных)
  • Определять для себя на сколько точной должна быть оценка. Часто не обязательно знать 2 дня 10 часов обычно достаточно около 3х дней

Походный набор инструментов

  • Генераторы текстов: пассивные и активные (каждый пересоздают на основе актуальных данных)

Прагматическая паранойя

  • Контракты
  • Утверждения
  • Исключения используется только в действительно исключительных ситуациях. В противном случае они становятся подобны оператору goto.
  • Участок кода использующий ресурс отвечает и за его освобождение. Освобождаютя ресурсы в обратной последовательности по отношению к распределению этих ресурсов.

Гибкость против хрупкости

  • Несвязанность и закон Деметера 
  • Если есть возможность распараллелить программу, то эту возможность надо использовать (потоки, асинхронность).
  • "Доски объявлений" для координации потоков работ.
  • События, паттерны Observer и MVC хорошо подходят для графических интерфейсов.

Пока вы пишите программу

  • Хороший код можно написать только четко понимая что и как происходит. Это и есть преднамеренное программирование.
  • Оценку скорости алгоритма можно сделать определив его порядок. Цикл Q(n), вложенный цикл Q(m x n). Для сортировки лучше использовать библиотечные методы, скорость их работы оптимизирована.
  • Перед рефакторингом лучше убедиться что все тесты прошли успешно. Лучше рефакторинг проводить отдельно от добавления новых возможностей. После реорганизации обязательно проводить регрессионные тесты.
  • Тестовый стенд. Отладочное окно по горячим клавишам.

Перед тем как начать проект

  • Список новых изменений и требований поможет остановит их последующий лавинообразный рост.
  • Глоссарий терминов проекта позволит использовать их согласованно и новым участникам проекта понять их значение.
  • Если документы хранятся в проекте, то больше шансов, что их будут читать.
  • Часто у сложной проблемы есть простое решение. Его надо увидеть за навязываемым сложным.

Прагматические проекты

  • Если ручное тестирование обнаружило баг, то следует обязательно написать тест который бы находил эту ошибку, чтобы в будущем автоматизированное тестирование вылавливало его.
  • Если слегка превысить ожидания пользователей это сделает их более дружелюбными к вашему приложению.

No comments: