О книге "Программист-прагматик" Дэвида Томаса и Эндрю Ханта

Традиционно книга Дэвида Томаса и Эндрю Ханта “Программист-прагматик. Ваш путь к мастерству” (David Thomas, Andrew Hunt - The Pragmatic Programmer) относится к разряду MUST HAVE/READ и не спроста. Колоссальный опыт авторов с великолепным стилем изложения материала (советы, задачи и упражнения) делают данную книгу столько важной в карьере разработчика. Не могу сказать, что прочёл книгу на одном дыхании. Некоторые темы давались труднее других и требовали времени на переваривание. Могу рекомендовать данную книгу как новичкам, так и опытным программистам - все смогут найти полезное в ней по своему уровню.

Также хотел отметить, что авторы не просто сконцентрировались на коде, но и на многих аспектах жизни разработчика, включая нравственные вопросы: кто будет пользоваться данным кодом и приближает ли ваш код наш мир к тому образу будущего, который бы вы хотели видеть? (У вас же есть такой образ, правда?)

Хотел бы вкратце резюмировать советы авторов, которые раскрываются примерами в основном содержимом книги:

  1. Заботьтесь о своем ремесле
  2. Думайте о своей работе
  3. У вас есть свобода выбора
  4. Предлагайте варианты разрешения затруднений, а не оправдания и извинения
  5. Нельзя жить с разбитыми окнами
  6. Будьте катализатором перемен
  7. Не забывайте об общей картине
  8. Включайте в требования к системе вопрос о её качестве
  9. Регулярно инвестируйте в свой багаж знаний
  10. Критически анализируйте то, что вы читаете и слышите
  11. Родной язык - это просто ещё один язык программирования
  12. Важно не только то, что вы говорите, но и как вы это говорите
  13. Создавая документацию, не фиксируйте её навечно
  14. Удачное проектное решение легче изменить, чем неудачное
  15. DRY - Don’t Repeat Yourself (не повторяйся)
  16. Упрощайте повторное использование исходного кода
  17. Исключайте взаимное влияние несвязанных компонентов системы
  18. Окончательных решений не существует
  19. Остерегайтесь увлекаться новомодными веяниями
  20. Пользуйтесь методом трассирующих пуль для отыскания целей
  21. Создавайте прототипы для обучения
  22. Программируйте близко к предметной области
  23. Выполняйте оценку, чтобы исключить неожиданности
  24. Повторно уточняйте график выполнения работ по мере написания кода
  25. Храните свои знания в виде простого текста
  26. Используйте всю мощь командных оболочек
  27. Стремитесь свободно владеть редактором
  28. Всегда пользуйтесь системой контроля версий
  29. Устраните затруднение, а не вините в нём других
  30. Не паникуй!
  31. Вылавливающий ошибку тест должен предшествовать её исправлению
  32. Внимательно читайте сообщения об ошибке, каким бы отвратительным оно ни было
  33. Системный вызов select работает нормально
  34. Не предполагайте, а доказывайте
  35. Изучите язык манипулирования текстом
  36. Написать идеальную программу нельзя
  37. Проектируйте по контракту
  38. Пользуйтесь досрочным аварийным завершением программы
  39. Пользуйтесь утверждениями, чтобы предотвратить невозможное
  40. Завершайте то, что начали
  41. Действуйте локально
  42. Всегда предпринимайте небольшие шаги
  43. Избегайте предсказания будущего
  44. Развязанный код проще изменить
  45. Указывай, а не спрашивай
  46. Не связывайте вызовы методов в цепочку
  47. Избегайте глобальных данных
  48. Если данные настолько важны, чтобы быть глобальными, заключите их в оболочку API
  49. Программирование имеет отношение к коду, а программы - к данным
  50. Не накапливайте состояние, а передавайте его по кругу
  51. Не платите налог на наследование
  52. Выражать полиморфизм предпочтительнее с помощью интерфейсов
  53. Делегируйте полномочия службам: отношение СОДЕРЖИТ превосходит отношение ЯВЛЯЕТСЯ
  54. Пользуйтесь миксинами для совместного использования функциональных возможностей
  55. Параметризуйте своё приложение, используя внешнюю конфигурацию
  56. Анализируйте последовательность выполняемых действий с целью повышения параллельности
  57. Общее состояние - неверное состояние
  58. Случайные отказы часто вызваны осложнениями, возникающими в связи с параллельностью
  59. Пользуйтесь акторами, чтобы достичь параллельности без общего состояния
  60. Пользуйтесь классными досками для координации потока выполнения
  61. Прислушивайтесь к своим внутренним чувствам
  62. Не программируйте по совпадению
  63. Оценивайте порядок производительности своих алгоритмов
  64. Проверяйте свои оценки
  65. Выполняйте рефакторинг кода как можно раньше и чаще
  66. Тестирование предназначено не для выявления программных ошибок
  67. Тест - первый пользователь вашего кода
  68. Стройте комплексно, а не сверху вниз или снизу вверх
  69. Проектируйте с учетом тестирования
  70. Тестируйте свои программы сами, иначе их будут тестировать пользователи
  71. Пользуйтесь тестами на основе свойств для проверки правильности ваших предположений
  72. Не усложняйте код и минимизируйте поверхность атак
  73. Устанавливайте обновления системы безопасности незамедлительно
  74. Именуйте правильно; а по мере надобности переименовывайте
  75. Никто точно не знает, чего он хочет
  76. Программисты помогают людям понять, чего они хотят на самом деле
  77. Требования изучаются с помощью обратной связи
  78. Работайте с пользователем, чтобы мыслить как пользователь
  79. Бизнес-правила - это метаданные
  80. Пользуйтесь словарем терминов проекта
  81. Вместо того, чтобы мыслить нешаблонно, находите шаблон
  82. Не вникайте в исходный код в одиночку
  83. Гибкость - это не существительное, а порядок выполнения действий
  84. Поддерживайте небольшие, устойчивые команды
  85. Планируйте и воплощайте в жизнь пополнение багажа знаний
  86. Организовывайте полнофункциональные команды
  87. Делайте то, что пригодно, а не то, что модно
  88. Выпускайте программное обеспечение, когда оно требуется пользователям
  89. Пользуйтесь контролем версий, чтобы проводить сборки, тесты и выпуски
  90. Текстируйте как можно раньше, чаще и автоматически
  91. Программирование нельзя считать завершенным до тех пор, пока не пройдут все тесты
  92. Пользуйтесь саботажем для проверки своих тестов
  93. Проверяйте покрытие тестами состояний, а не исходного кода
  94. Обнаруживайте ошибки единожды
  95. Не пользуйтесь ручными процедурами
  96. Доставляйте пользователям не просто код, а удовольствие
  97. Подписывайте свою работу
  98. Прежде всего, не нанесите вред
  99. Не потакайте всякой шушере
  100. Это ваша жизнь. Делитесь ею, празднуйте и стройте её. И ЖЕЛАЕМ ПОЛУЧИТЬ ОТ ЭТОГО УДОВОЛЬСТВИЕ!

Некоторые советы кажутся очевидными, некоторые - интригующе-непонятными, но будучи вырванными из контекста они мало что дают для понимания без прочтения самой книги. Прочтите - не пожалеете!