Традиционно книга Дэвида Томаса и Эндрю Ханта “Программист-прагматик. Ваш путь к мастерству” (David Thomas, Andrew Hunt - The Pragmatic Programmer) относится к разряду MUST HAVE/READ и не спроста. Колоссальный опыт авторов с великолепным стилем изложения материала (советы, задачи и упражнения) делают данную книгу столько важной в карьере разработчика. Не могу сказать, что прочёл книгу на одном дыхании. Некоторые темы давались труднее других и требовали времени на переваривание. Могу рекомендовать данную книгу как новичкам, так и опытным программистам - все смогут найти полезное в ней по своему уровню.
Также хотел отметить, что авторы не просто сконцентрировались на коде, но и на многих аспектах жизни разработчика, включая нравственные вопросы: кто будет пользоваться данным кодом и приближает ли ваш код наш мир к тому образу будущего, который бы вы хотели видеть? (У вас же есть такой образ, правда?)
Хотел бы вкратце резюмировать советы авторов, которые раскрываются примерами в основном содержимом книги:
- Заботьтесь о своем ремесле
- Думайте о своей работе
- У вас есть свобода выбора
- Предлагайте варианты разрешения затруднений, а не оправдания и извинения
- Нельзя жить с разбитыми окнами
- Будьте катализатором перемен
- Не забывайте об общей картине
- Включайте в требования к системе вопрос о её качестве
- Регулярно инвестируйте в свой багаж знаний
- Критически анализируйте то, что вы читаете и слышите
- Родной язык - это просто ещё один язык программирования
- Важно не только то, что вы говорите, но и как вы это говорите
- Создавая документацию, не фиксируйте её навечно
- Удачное проектное решение легче изменить, чем неудачное
- DRY - Don’t Repeat Yourself (не повторяйся)
- Упрощайте повторное использование исходного кода
- Исключайте взаимное влияние несвязанных компонентов системы
- Окончательных решений не существует
- Остерегайтесь увлекаться новомодными веяниями
- Пользуйтесь методом трассирующих пуль для отыскания целей
- Создавайте прототипы для обучения
- Программируйте близко к предметной области
- Выполняйте оценку, чтобы исключить неожиданности
- Повторно уточняйте график выполнения работ по мере написания кода
- Храните свои знания в виде простого текста
- Используйте всю мощь командных оболочек
- Стремитесь свободно владеть редактором
- Всегда пользуйтесь системой контроля версий
- Устраните затруднение, а не вините в нём других
- Не паникуй!
- Вылавливающий ошибку тест должен предшествовать её исправлению
- Внимательно читайте сообщения об ошибке, каким бы отвратительным оно ни было
- Системный вызов select работает нормально
- Не предполагайте, а доказывайте
- Изучите язык манипулирования текстом
- Написать идеальную программу нельзя
- Проектируйте по контракту
- Пользуйтесь досрочным аварийным завершением программы
- Пользуйтесь утверждениями, чтобы предотвратить невозможное
- Завершайте то, что начали
- Действуйте локально
- Всегда предпринимайте небольшие шаги
- Избегайте предсказания будущего
- Развязанный код проще изменить
- Указывай, а не спрашивай
- Не связывайте вызовы методов в цепочку
- Избегайте глобальных данных
- Если данные настолько важны, чтобы быть глобальными, заключите их в оболочку API
- Программирование имеет отношение к коду, а программы - к данным
- Не накапливайте состояние, а передавайте его по кругу
- Не платите налог на наследование
- Выражать полиморфизм предпочтительнее с помощью интерфейсов
- Делегируйте полномочия службам: отношение СОДЕРЖИТ превосходит отношение ЯВЛЯЕТСЯ
- Пользуйтесь миксинами для совместного использования функциональных возможностей
- Параметризуйте своё приложение, используя внешнюю конфигурацию
- Анализируйте последовательность выполняемых действий с целью повышения параллельности
- Общее состояние - неверное состояние
- Случайные отказы часто вызваны осложнениями, возникающими в связи с параллельностью
- Пользуйтесь акторами, чтобы достичь параллельности без общего состояния
- Пользуйтесь классными досками для координации потока выполнения
- Прислушивайтесь к своим внутренним чувствам
- Не программируйте по совпадению
- Оценивайте порядок производительности своих алгоритмов
- Проверяйте свои оценки
- Выполняйте рефакторинг кода как можно раньше и чаще
- Тестирование предназначено не для выявления программных ошибок
- Тест - первый пользователь вашего кода
- Стройте комплексно, а не сверху вниз или снизу вверх
- Проектируйте с учетом тестирования
- Тестируйте свои программы сами, иначе их будут тестировать пользователи
- Пользуйтесь тестами на основе свойств для проверки правильности ваших предположений
- Не усложняйте код и минимизируйте поверхность атак
- Устанавливайте обновления системы безопасности незамедлительно
- Именуйте правильно; а по мере надобности переименовывайте
- Никто точно не знает, чего он хочет
- Программисты помогают людям понять, чего они хотят на самом деле
- Требования изучаются с помощью обратной связи
- Работайте с пользователем, чтобы мыслить как пользователь
- Бизнес-правила - это метаданные
- Пользуйтесь словарем терминов проекта
- Вместо того, чтобы мыслить нешаблонно, находите шаблон
- Не вникайте в исходный код в одиночку
- Гибкость - это не существительное, а порядок выполнения действий
- Поддерживайте небольшие, устойчивые команды
- Планируйте и воплощайте в жизнь пополнение багажа знаний
- Организовывайте полнофункциональные команды
- Делайте то, что пригодно, а не то, что модно
- Выпускайте программное обеспечение, когда оно требуется пользователям
- Пользуйтесь контролем версий, чтобы проводить сборки, тесты и выпуски
- Текстируйте как можно раньше, чаще и автоматически
- Программирование нельзя считать завершенным до тех пор, пока не пройдут все тесты
- Пользуйтесь саботажем для проверки своих тестов
- Проверяйте покрытие тестами состояний, а не исходного кода
- Обнаруживайте ошибки единожды
- Не пользуйтесь ручными процедурами
- Доставляйте пользователям не просто код, а удовольствие
- Подписывайте свою работу
- Прежде всего, не нанесите вред
- Не потакайте всякой шушере
- Это ваша жизнь. Делитесь ею, празднуйте и стройте её. И ЖЕЛАЕМ ПОЛУЧИТЬ ОТ ЭТОГО УДОВОЛЬСТВИЕ!
Некоторые советы кажутся очевидными, некоторые - интригующе-непонятными, но будучи вырванными из контекста они мало что дают для понимания без прочтения самой книги. Прочтите - не пожалеете!