Вот цитаты, которые мне понравились (не все точные, при необходимости лучше сверяться с оригиналом) или по другим причинам я посчитал полезным выписать. Может кому-то интересно.
Избавляя разум от ненужной работы, хорошая нотация позволяет сосредоточиться на более сложных проблемах и в конечном счете повышает интеллект человечества. До появления арабской нотации умножение было весьма сложным, а деление даже целых чисел требовало усилий ведущих математиков. Возможно, ничего в современном мире не смогло бы удивить греческого математика сильнее, чем то, что большинство современнных европейцев умеют делить крупные числа. Это показалось бы ему абсолютно невозможным… Легкость выполнения операций над десятичными дробями – почти что сверъестественный результат постепенного обнаружения отличной нотации.
Alfred North Whitebead.
«Совершенный код», стр. 59
«Грязная проблема» — это проблема, которую можно ясно определить только путем полного частичного или решения.
«Совершенный код», стр. 71
По-моему, управление сложностью настолько важно, что оно должно стать Главным Техническим Императивом Разработки ПО.
«Совершенный код», стр. 75
Очень, очень осторожно относитесь к семантическим нарушением инкапсуляции.
«Совершенный код», стр. 138
Соблюдайте принцип подстановки Лисков (Liskov Substitution Principle, LSP). Барбара Лисков как-то сказала, что наследование стоит использовать, только если производный класс действительно «является» более специализированной версией базового класса (Liskov, 1988). Энди Хант и Дейв Томас сформулировали LSP так: «Клиенты должны иметь возможность использования подклассов через интерфейс базового класса, не замечая никаких различий» (Hurt and Tomas, 2000).
«Совершенный код», стр. 138
Руководствуйтесь соображениями абстракции.
«Совершенный код», глава 6
С подозрением относитесь к классам, которые определяют метод и оставляют его пустым. Скорее всего это не общее свойство.
«Совершенный код», стр. 143
Миксины (mix in) … позволяют подмешивать свойства в производные классы.
«Совершенный код», стр. 145
Law of Demeter (Lieberherr and Holland, 1989): объект A может вызывать любые из собственных методов. Если он создает объект B, он может вызывать любые (открытые) методы объекта B, но ему не следует вызывать методы объектов, возвращаемых объектом B.
«Совершенный код», стр. 147
В лаборатории проектирования ПО NASA были изучены 10 проектов, в которых энергично преследовалось повторное использование кода… В проектах, основанных на объектно ориентированном подходе %70 процентов кода удалось взять из предыдущих проектов… Заметьте, что ядро подхода NASA к созданию повторно используемых классов не включает в себя «проектирование для повторного использования». Классы, претендующие на повторное использование, определяют в NASA в конце проектов. Все действия по упрощению повторного использования классов выполняются как специальный проект или в конце основного проекта или как первый этап нового проекта.
«Совершенный код», стр. 150-151
Операции могут объединяться в методы на основании связности (cohesion):
1. Функциональная связность (лучший вид связности) – на основании общей цели.
2. Последоватльная связность (sequential cohesion) – инкапсуляция порядка выполнения действий.
3. Коммуникационная связность (communicational cohesion) – операции используют одни и те же данные.
4. Временная связность (temporal cohesion) – типичный пример – Startup.
5. Процедурная связность (плохо) – операции выполняются в порядке, зависящем от процедуры, косвенно связанной с целью метода.
6. Логическая связность (logical cohesion).
7. Случайная связность (coincidental cohesion).
«Совершенный код», стр. 165-166
Внимание к деталям на самом деле важно. Если вы сомневаетесь в этом, учтите, что три самых дорогостоящих ошибки всех времен, приведших к убыткам объемом 1,6 миллиарда, 900 миллионов и 245 миллионов доллоров, были вызваны изменением одного символа в ранее корректной программе.
«Совершенный код», стр. 510
Интересно, что если программисты имеют дело не с несколькими строками кода, а с более объемным фрагментом, вероятность внесения корректного изменения более высока.
«Совершенный код», стр. 567
Число видов рефакторинга, выгодных для любой конкретной программы, практически бесконечно. Рефакторинг подчинен тому же закону снижения выгоды, что и другие процессы программирования, и к нему относится правило 80/20. Тратье время на 20% видов рефакторинга, обеспечивающих 80% выгоды.
«Совершенный код», стр. 568
Эффективной стратегией омоложения внедренных старых систем является определение фрагментов, относящихся к грязному реальному миру, фрагментов, формирующих идеализированный новый мир, и фрагментов, определяющих интерфейс между двумя мирами… Ваш код не обязан быть грязным только потому, что таков ральный мир.
«Совершенный код», стр. 569
Бентели также сообщает о случае, когда группа обнаружила, что ОС половину времени проводит в одном небольшом цикле. Переписав цикл на микрокоде, разработчики ускорили его выполнение в 10 раз, но производительность системы осталась прежней – они переписали цикл бездействия системы!
«Совершенный код», стр. 577
Контроль версий – необходимая соствляющая командных проектов. Он становится еще более мощным оружием при интеграции управления версиями, отслеживания дефектов и управления изменениями. Подразделение прикладного ПО Microsoft считает собственный инструментарий управления версиями «важнейшим преимуществом».
«Совершенный код», стр. 653
How to Win Friends and Influence People… Карнеги глубоко проникает в ежедневные взаимоотношения и объясняет, как работать с людьми с помощью лучшего их понимания. Книга полна запоминающихся историй, иногда по две-три на страницу. Любой, кто работает с людьми, должен когда-нибудь прочесть ее, а тот, кто управляет людьми, должен прочесть ее немеделнно.
«Совершенный код», стр. 670
www.sdmagazine.com/jolts. Web-сайт, посвященный ежегодной премии Jolt Productivity журнала «Software Development Magazine», — хороший источник информации о лучших на сегодняшний день инструментах.
«Совершенный код», стр. 708
Если код написан хорошо, комментарии – всего-лишь глазурь на пирожным читабильности.
«Совершенный код», стр. 763
Суть сказанного в том, что вамследует обращать внимание на то, как вы тратите свое время. Если вы вводите или удаляете дефисы для выравнивания плюсов, вы не программируете – вы занимаетесь ерундой. Найдите более эффективный стиль.
«Совершенный код», стр. 773
Игнорирование имеющейся информации стало настолько частым явлением, что привело к возникновению специального акронима «PTFM!», который расшифровывается как «Read The F&*^$*# Manual!»
«Совершенный код», стр. 805
Очень много практики , показывает в какую сторону необходимо думать при написании кода.