пятница, 16 ноября 2012 г.

Совершенный код




Есть такая хорошая книжка - "Совершенный код", автора С. Макконнелл. Кто не читал или не слышал вообще, очень советую. Книга не привязана к конкретному языку, примеры есть на С++, Java, C# и т.д. В ней описано много интересных приемов программирования и разработки проекта в целом.

Для того, чтобы Вас немного заинтересовать данной книгой - приведу интересные выкладки из нее:)



*-Нравится статья? Кликни по рекламе! :)
  1.  Проведение аналогий часто приводит к важным открытиям (волновая и корпускулярная теории света -> эфир(среда распространяющая свет как воздух звук))
  2. Метафора - эвристический подход, а не алгоритм (разработка как: литературная, сельскохозяйственная, строительная метафоры и метафора жемчужины)
  3. Не бойтесь комбинировать метафоры
  4. Эвристика - метод помогающий искать ответ
  5. Общая цель подготовки - снижение риска
  6. Если менеджер проекта приказывает Вам немедленно начать программировать...Существует 4 основных подхода, но лучший - найти другую работу, ведь жизнь слишком коротка, чтобы тратить ее на работу в отсталом учреждении
  7. Один из аспектов профессии разработчика - посвящение профанов в особенности процесса разработки ПО
  8. Подготовка к проекту - это дешевле, чем похерить результат и начать все заново
  9. Программисты - последнее звено пищевой цепи разработки ПО. Архитекторы поглощают требования, проектировщики архитектуру, а программисты - проект.
  10. Если на каждом этапе яды, программист получит их все.
  11. Общий принцип прост: исправлять ошибки нужно как можно раньше
  12. И при итеративном и при последовательных подходах разработки общая сумма затрат будет схожей, однако в первом случае она не будет казаться столь крупной, т.к. будет уплачена по частям
  13. Убедитесь, что всем известна цена изменения требований
  14. Хорошая архитекура облегчает конструирование
  15. Архитектура должна производить оценку ресурсов в номинальном и пиковом состоянии,а так же уровень отказоустойчивости системы
  16. В мире ПО цепь не так крепка как, как слабейшее звено; Она так слаба, как все слабые звенья вместе взятые
  17. Изучая архитектуру, Вы должны испытывать удовольствие от того, насколько естественной и простой она получается
  18. Если над данным типом ПО Вы еще не работали - выделите больше времени
  19. Язык программирование - отражение вашего мышления
  20. Различайте программирование "на языке" и "с использованием языка"
  21. Проблему нужно решать дважды: первый , чтобы получить ее ясное определение, второй, для создания работоспособного решения
  22. Задача проектирования - объединение конкурирующих целей в удачном компромиссе
  23. Основные характеристики проекта: минимальнаясложность, простота сопровождения, слабое сопряжение(адекватная абстракция), расширяемость,повторное использование, высокий коэфф. объединения по входу (наличие ядра), низкий коэфф. разветвления на выходе (не большое делегирование), портируемость, отсутствие избыточной функциональности, стратификация (грамотная декомпозиция системы на уровни)
  24. Если все подсистемы могут взаимодействовать (т.е. отсутствие ограничений, что увеличивает по 2-му з-ну термодинамики энтропию системы), выгода от их разделения пропадает. Проще ограничить взаимодействие, а после сделать его свободнее.
  25. Диаграмма систем должна быть ациклическим графом
Выше я привел интересные выводы, советы и это основное, что я выдержал из первых глав) Так что поверьте, там много полезного и переписывать книгу я не буду, однако приведу интересные высказывания различных людей, которыми кишит книга!)

Планируйте выбросить первый экземпляр программы: вам в любом случае придется это сделать. Фред Брукс
Если вы планируете выбросить первый экземпляр программы, вы выбросите и второй. Крейг Зеруни
Требования подобны воде. Опираться на них легче, когда они замарожены. Аноним 
Если вы не можете объяснить что-то 6-ти летнему ребенку, значит, вы сами этого не понимаете. Альберт Эйнштейн
Образ разработчика, проектирующего программу рациональным безошибочным способом на основе ясно сформулированных требований, совершенно не реалистичен. Дэвид Парнас 
Есть два способа разработки проекта приложения: сделать его настолько простым, чтобы было очевидно, что в нем нет недостатков, или сделать его таким сложным, чтобы в нем не было очевидных недостатков. Ч.Э.Р. Хоар 
Работая над проблемой, я никогда не думаю о красоте. Я думаю только о решении проблемы. Но если полученное решение некрасиво, я знаю, что оно не верно.          Р. Бакминстер Фуллер 
Прежде всего следует узнать, не что система выполняет, а над чем она это выполняет! Бертран Мейер
Интерфейсы классов должны быть полными и минимальными. Скотт Майерс 
Больше беспокоит то, что программист может выполнить одну задачу несколькими способами: иногда не осознанно, но чаще ради изменения или же создания элегантной вариации. А.Р.Браун и У.А.Сэмпсон (такие уж мы педанты))))
Мы пытаемся решить проблему, максимально ускоряя процесс проектирования, чтобы в конце работы над системой у нас осталось достаточно времени для нахождения ошибок, допущенных из-за слишком быстрого проектирования. Гленфорд Майерс
Я никогда не встречал человека, желающего читать 17000 страниц документации, а если бы встретил, то убил бы его, чтобы он не портил генофонд. Джозеф Костелло
Плохие новости заключаются в том, что мы, как нам кажется, никогда не найдем философского камня. Мы никогда не найдем процесса, позволяющего проектировать ПО абсолютно рациональным образом. Но ест и хорошие новости: мы можем его подделать! Дэвид Парнас
Если для понимания того, что происходит, нужно увидеть реализацию, это не абстракция. Ф. Дж. Плоджер

Друзья, придерживайтесь золотых правил, проверенных годами! А для начала, ознакомьтесь с ними в данной книге!)