<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8666058998503471555</id><updated>2012-01-22T12:18:02.656-08:00</updated><category term='Дон Бокс'/><category term='Алан Шаллоуей'/><category term='Тестирование и отладка'/><category term='Стив Макконнелл'/><category term='Джеймс Коплиен'/><category term='Бьерн Страуструп'/><category term='Гради Буч'/><category term='Тим Листер'/><category term='SICP'/><category term='Управление проектами'/><category term='Мартин Фаулер'/><category term='Дейв Томас'/><category term='Брайан Керниган'/><category term='Ли Кэмпбел'/><category term='Фредерик Брукс'/><category term='Боб Мартин'/><category term='Роберт Гласс'/><category term='ООП'/><category term='Энди Хант'/><category term='Бертран Мейер'/><category term='Джон Роббинс'/><category term='С++'/><category term='Альберт Эйнштейн'/><category term='Дж. Ханк Рейнвотер'/><category term='Скотт Мейерс'/><category term='Опрос'/><category term='Философия программирования'/><category term='Джеймс Р. Тротт'/><category term='Архитектура'/><category term='Джоэл Спольски'/><category term='Эдвард Йордон'/><category term='Крис Дейт'/><category term='Шаблоны проектирования'/><category term='Том Демарко'/><title type='text'>Цитатник</title><subtitle type='html'>Много мыслей, хороших и разных...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-8939011040191821977</id><published>2012-01-22T11:55:00.001-08:00</published><updated>2012-01-22T12:18:02.665-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Бертран Мейер'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Как важно быть скромным</title><content type='html'>&lt;p align="justify"&gt;Очередная потрясающая цитата от Бертрана Мейера:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Великого проектировщика отличает не то, что у него мало плохих идей, а его умение отказываться от них, умение подавлять свою гордость и отбирать хорошие идеи независимо от того, сгенерированы они им самим или кем-то другим. Некомпетентность и неопытность являются очевидными препятствиями в борьбе за верное решение. Зазнайство может быть столь же плохим.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;А добавить, толком, и нечего:) Интересно было бы узнать, какое количество проектов было угроблено из-за упрямства менеджера, главного архитектора или ключевого человека со стороны заказчика.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-8939011040191821977?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/8939011040191821977/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_6499.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8939011040191821977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8939011040191821977'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_6499.html' title='Как важно быть скромным'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3434387470259260955</id><published>2012-01-22T10:08:00.001-08:00</published><updated>2012-01-22T10:08:12.314-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Бертран Мейер'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>О сопровождении</title><content type='html'>&lt;p align="justify"&gt;Снова добрался до двухкилограммового талмуда Бертрана Мейера &lt;a href="http://www.ozon.ru/context/detail/id/2336754/"&gt;«Объектно-ориентированное конструирование программных систем»&lt;/a&gt;. В одной из глав об объектной методологии разработки ПО, Мейер пишет:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;Опыт играет ключевую роль в построении больших систем, состоящих из тысяч классов и десятков тысяч строк кода, - здесь опыт незаменим.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;Такой опыт должен включать все этапы жизненного цикла ПО: анализ, проектирование, реализацию и, конечно же, сопровождение (&lt;b&gt;заключительный аккорд, который только и показывает, выдержали ли ваши решения, принятые на предыдущих этапах, проверку временем и изменениями&lt;/b&gt;).&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;И хотя здесь речь идет о методологии разработки ПО, эту же идею можно применить и в других контекстах. Так, например, именно поэтому я не слишком доверяю консультантам или архитекторам, которые не занимаются кодированием. В первом случае, консультант, по сути, не несет ответственности за принятые им решения; и дело здесь не только в отсутствии ответственности, но и в том, что у него просто может не быть опыта проверки временем своих собственных решений.&lt;/p&gt;  &lt;p align="justify"&gt;С архитектурой дела обстоят несколько лучше, поскольку архитектор зачастую остается с командой на протяжении всего жизненного цикла. Но если архитектор не просто тесно сотрудничает с командой, но и пробует решения на своей собственной шкуре, то это, несомненно, будет положительно отражаться на его «архитектурных решениях».&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3434387470259260955?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3434387470259260955/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_22.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3434387470259260955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3434387470259260955'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_22.html' title='О сопровождении'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6345713336407252666</id><published>2012-01-17T10:51:00.001-08:00</published><updated>2012-01-17T10:51:26.751-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Об изучении языков программирования</title><content type='html'>&lt;p align="justify"&gt;Очередное интересное высказывание, на этот раз найденное в последней книге Бертрана Мейера &lt;a href="http://www.ozon.ru/context/detail/id/6304950/"&gt;“Почувствуй класс”&lt;/a&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Язык, который не влияет на ваш способ мышления, не стоит изучения.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Алан Перлис&lt;/p&gt;  &lt;p align="justify"&gt;Мысль разумная. Конечно, вокруг языка формируется еще и сообщество с собственной культурой, но я, например, не вижу особого смысла изучать Java для C# программиста или наоборот. Чем сильнее отличается культура, идиомы и паттерны в новом языке программирования, тем, потенциально, больше нового вы для себя узнаете.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6345713336407252666?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6345713336407252666/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6345713336407252666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6345713336407252666'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post_17.html' title='Об изучении языков программирования'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7873956218362553249</id><published>2012-01-16T09:48:00.001-08:00</published><updated>2012-01-16T09:48:36.372-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Архитектура'/><title type='text'>Влияние психологии команды на архитектуру</title><content type='html'>&lt;p align="justify"&gt;Листаю замечательную книгу &lt;a href="http://www.ozon.ru/context/detail/id/5430638/"&gt;“Идеальная архитектура”&lt;/a&gt;, которая, по-сути, является сборником статей “архитектурной” тематики.&lt;/p&gt;  &lt;p align="justify"&gt;Во второй главе есть такое любопытное примечание:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Здоровые отношения в группе разработки вносят непосредственный вклад в архитектуру системы. Нездоровые отношения и гипертрофированные самомнения порождают нездоровые продукты&lt;/em&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Конечно же, здоровые отношения не являются достатоными условиями успешности проекта или залогом создания удачной архитектуры; это лишь необходимое условие. &lt;/p&gt;  &lt;p align="justify"&gt;Только в здоровой атмосфере возможно приняте ошибок, которое практически невозможно при нездоровой атмосфере. А без этого сложно себе представить хорошую архитектуру; ведь ошибки – это лишь вопрос времени, и чем раньше “архитектор” их осознает, тем более качественными будут “управляющие воздействия” по их устранению. Ну а кто же признает свои ошибки при нездоровых отношениях в команде?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7873956218362553249?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7873956218362553249/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7873956218362553249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7873956218362553249'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2012/01/blog-post.html' title='Влияние психологии команды на архитектуру'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-427958675368076780</id><published>2011-09-10T01:43:00.001-07:00</published><updated>2011-09-10T01:43:54.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Шаблоны проектирования'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Еще раз о повторном использовании</title><content type='html'>&lt;p align="justify"&gt;Сегодня открыл книгу “банды четырех”, чтобы уточнить определение одного из паттернов проектирования и в первой же главе увидел выделенную когда-то цитату:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Поднаторевшие в объектно-ориентированном проектировании разработчики скажут вам, что обеспеччить “правильный”, то есть в достаточной мере гибкий и пригодный для повторного использования дизайн, с первого раза трудно, если вообще возможно. Прежде чем считать цель достигнутой, они обычно пытаются опробовать найденное решение на нескольких задачах, и каждый раз модифицируют его.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Эрик Липперт, один из разработчиков компилятора C# очень часто говорит о проблеме “преждевременного обобщения” (premature generialization), с которой я, например, сталкиваюсь постоянно.&lt;/p&gt;  &lt;p align="justify"&gt;Многие разработчики разрабатывают повторноиспользуемые компоненты (или выделяют их из своего приложения) принимая во внимание лишь один кейс использования. Они пытаются предсказать будущее, рассматривая какие-то гипотетические кейсы использования или делают “задел на будущее”, который никогда не понадобится. В итоге “библиотечный код” получается излишне сложным и совсем не таким “повторноиспользуемым”, как о нем думал его разработчик.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-427958675368076780?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/427958675368076780/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2011/09/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/427958675368076780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/427958675368076780'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2011/09/blog-post.html' title='Еще раз о повторном использовании'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5628710828735777145</id><published>2011-04-27T05:46:00.001-07:00</published><updated>2011-04-27T05:46:52.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Боб Мартин'/><title type='text'>О паттернах проектирования</title><content type='html'>&lt;p align="justify"&gt;Сейчас листаю весьма &lt;a href="http://www.books.ru/shop/books/816634"&gt;интересную книгу&lt;/a&gt; Боба Мартина и наткнулся на следующее высказывание:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;“Паттерны проектирования – чудесная вещь. Они способны помочь в решени многих задач проектирования. Но из того, что они существуют вовсе не следует, что их нужно употреблять к месту и не к месту.”&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;А ведь он чертовски прав; важно не только каким инстрментом мы пользуемся, значительно важнее то, насколько умело и правильно мы это делаем.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5628710828735777145?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5628710828735777145/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2011/04/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5628710828735777145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5628710828735777145'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2011/04/blog-post.html' title='О паттернах проектирования'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6320784888670444474</id><published>2010-12-05T02:11:00.001-08:00</published><updated>2010-12-09T11:40:07.066-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SICP'/><title type='text'>О программировании</title><content type='html'>&lt;p align="justify"&gt;Первый абзац в предисловии книги SICP (Структура и интерпретация компьютерных программ):&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Программированием занимаются учителя, генералы, диетологи, психологи и родители. Программированию подвергаются армии, ученики и некоторые виды обществ. При решении крупных задач приходится применять последовательно множество программ, бОльшая часть которых возникает прямо в процессе решения. Эти программы узобилуют деталями, относящимися к той конкретной задаче, которую они решают. Если же Вы хотите оценить программирование как интеллектуальную деятельность особого рода, то Вам следует обратиться к программированию компьютеров.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Мне уже нравится эта книга!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6320784888670444474?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6320784888670444474/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/12/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6320784888670444474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6320784888670444474'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/12/blog-post.html' title='О программировании'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3330933378285812991</id><published>2010-10-23T12:19:00.001-07:00</published><updated>2010-10-23T12:19:52.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Брайан Керниган'/><category scheme='http://www.blogger.com/atom/ns#' term='Альберт Эйнштейн'/><category scheme='http://www.blogger.com/atom/ns#' term='Тестирование и отладка'/><title type='text'>О разработке ПО, отладке и Эйнштейне</title><content type='html'>&lt;p align="justify"&gt;Брайан Керниган (Brian Kernighan) когда-то выразил такую мысль:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Отладка кода в двое сложнее его написания. Поэтому если вы будете писать код на грани своих возможностей, то, по определению, у вас не хватит ума его отладить.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Читая книгу Энди Ханта “Pragmatic Thinking and Learning” в одном из эпиграфов я встретил знаменитую цитату Эйнштейна:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Мы не можем решить проблему тем же способом мышления, посредством которого она появилась.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;И подумал, что если их совместить, то можно прийти к следующему выводу: можно использовать все свои возможности при написании кода, но при отладке вам придется изменить собственный стиль мышления, в противном случае у вас ничего не выйдет.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Оригинальная цитата Брайана Кернигана:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Оригинальная цитата Альберта Эйнштейна:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;We can’t solve problem by using the same kind of thinking we used when we created them.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3330933378285812991?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3330933378285812991/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/10/blog-post_23.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3330933378285812991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3330933378285812991'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/10/blog-post_23.html' title='О разработке ПО, отладке и Эйнштейне'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7835827894435223025</id><published>2010-10-22T11:40:00.001-07:00</published><updated>2010-10-22T11:40:03.872-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ли Кэмпбел'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>О понимании нужного уровня абстракции</title><content type='html'>&lt;p align="justify"&gt;В одной из своих &lt;a href="http://leecampbell.blogspot.com/2010/06/rx-part-6-scheduling-and-threading.html"&gt;заметок&lt;/a&gt; о Reactive Extentions Ли Кэмпбел (Lee Campbell) выразил следующую мысль:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;You should always understand at least one layer below what you are coding.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Или в вольном перевод:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Вы должны понимать как минимум на один уровень абстракции ниже того уровня, на котором вы кодируете.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Нужно сказать очень ценное замечание, следование которому поможет вам не только при написании кода, но также при его отладке и сопровождении.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7835827894435223025?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7835827894435223025/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7835827894435223025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7835827894435223025'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/10/blog-post.html' title='О понимании нужного уровня абстракции'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7210677003619732473</id><published>2010-06-11T08:51:00.001-07:00</published><updated>2010-06-12T03:15:10.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Многопоточность</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;Если кто-то считает, что многопоточность проста и понятна, убедитесь, что этот человек не принимает важных решений в вашем проекте. Если он их все же принимает – вы в беде!”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Брайан Гетц (Brian Goetz) “Thinking in Java”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7210677003619732473?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7210677003619732473/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7210677003619732473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7210677003619732473'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/06/blog-post.html' title='Многопоточность'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-437012229317273977</id><published>2010-05-29T00:24:00.001-07:00</published><updated>2010-05-29T00:26:28.398-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Боб Мартин'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Комментарии</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;Ничто не помогает так, как уместный комментарий. Ничто не загромождает модуль так, как бессодержательные и безапелляционные комментарии. Ничто не приносит столько вреда, как старый, утративший актуальность комментарий, распространяющий ложь и дезинформацию.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;“Дядюшка” Боб Мартин. “Чистый код”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-437012229317273977?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/437012229317273977/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_29.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/437012229317273977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/437012229317273977'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_29.html' title='Комментарии'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3052913771606518105</id><published>2010-05-13T22:21:00.001-07:00</published><updated>2010-05-13T22:21:18.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Боб Мартин'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Профессионализм</title><content type='html'>&lt;p&gt;&lt;em&gt;Профессионализм имеет две составляющие: знания и практический опыт. Вы должны узнать принципы, паттерны, приемы и эвристические правила, известные каждому профессионалу, а также “втереть” полученные знания в свои пальцы, глаза и внутренности усердной работой и практикой.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;“Дядюшка” Боб Мартин. “Чистый Код”.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3052913771606518105?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3052913771606518105/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_13.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3052913771606518105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3052913771606518105'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_13.html' title='Профессионализм'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5576543446839714788</id><published>2010-05-12T03:53:00.001-07:00</published><updated>2010-05-12T03:53:55.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><title type='text'>О взаимозаменяемости разработчиков</title><content type='html'>&lt;p&gt;&lt;em&gt;Разработчики - не взаимозаменяемые части, и успешное создание любой сложной системы требует уникальных и разнообразных навыков всех членов целеустремленного коллектива.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5576543446839714788?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5576543446839714788/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5576543446839714788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5576543446839714788'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post_12.html' title='О взаимозаменяемости разработчиков'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7813199205390034503</id><published>2010-05-04T04:26:00.001-07:00</published><updated>2010-05-04T04:26:49.894-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Бертран Мейер'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Об изменениях в ПО</title><content type='html'>&lt;p&gt;&lt;em&gt;Изменения в ПО неизбежны. Задача в том, чтобы уметь управлять ими&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Бертран Мейер “Объектно-ориентированное конструирование программных систем”.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7813199205390034503?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7813199205390034503/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7813199205390034503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7813199205390034503'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/05/blog-post.html' title='Об изменениях в ПО'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7814817441042689612</id><published>2010-04-19T11:28:00.001-07:00</published><updated>2010-04-19T11:28:38.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Дж. Ханк Рейнвотер'/><title type='text'>О деньгах</title><content type='html'>&lt;p&gt;&lt;em&gt;Можно поддаться соблазну разбрасываться деньгами, как будто они растут на деревьях, опрометчиво полагая, что оплата повышает производительность. На самом деле здесь стоит хорошенько подумать, ведь сегодняшняя роскошь есть завтрашняя потребность. Деньги, подобно власти, оказывают на человека самое что ни на есть деструктивное влияние.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Дж. Ханк Рейнвотер “Как пасти котов”&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7814817441042689612?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7814817441042689612/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post_19.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7814817441042689612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7814817441042689612'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post_19.html' title='О деньгах'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6311826755269136606</id><published>2010-04-12T13:16:00.001-07:00</published><updated>2010-04-12T13:16:52.789-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Анализ задачи</title><content type='html'>&lt;p&gt;&lt;em&gt;Анализ должен объяснить, &lt;strong&gt;что &lt;/strong&gt;делает система, а не то, &lt;strong&gt;как &lt;/strong&gt;она это делает.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6311826755269136606?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6311826755269136606/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post_12.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6311826755269136606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6311826755269136606'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post_12.html' title='Анализ задачи'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6868015106377153280</id><published>2010-04-12T13:15:00.001-07:00</published><updated>2010-04-12T13:15:00.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Организация и новые идеи</title><content type='html'>&lt;p&gt;&lt;em&gt;Любая организация, которая сама не генерирует новые идеи, либо уже мертва, либо близка к этому.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6868015106377153280?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6868015106377153280/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6868015106377153280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6868015106377153280'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/blog-post.html' title='Организация и новые идеи'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2511887169523302563</id><published>2010-04-06T03:30:00.001-07:00</published><updated>2010-04-06T03:30:06.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Дж. Ханк Рейнвотер'/><title type='text'>Как пасти котов. Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/S7sNK0fq1gI/AAAAAAAAASw/KjB0_JOG2EY/s1600-h/Image.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Как пасти котов" border="0" alt="Как пасти котов" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S7sNLXl69-I/AAAAAAAAAS0/9t2ColgVbos/Image.jpg?imgmax=800" width="164" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Сегодня я начну публикацию цитат из книги Дж. Ханк Рейнвотера &lt;a href="http://www.ozon.ru/context/detail/id/2409500/"&gt;“Как пасти котов. Наставление для программистов, руководящих другими программистами”&lt;/a&gt;. Мое личное отношение к этой книге весьма неоднозначное. С одной стороны, закладок и подчеркиваний (а соответственно и цитат) набралось достаточное количество, но почему-то эта книга меня не зацепила. Вроде бы и написано все верно, и советов правильных много, и по делу все, но, чего-то мне в ней не хватило.&lt;/p&gt;  &lt;p align="justify"&gt;Еще раз повторюсь, что это мое личное мнение, многим другим людям эта книга очень и очень понравилась, поэтому я не исключаю, что дело скорее во мне. В любом случае я признаю, что в этой книге масса интересных моментов и отличных высказываний, ну а общее впечатление о здесь не очень-то и важно.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Личность в сегодняшних условиях - это опыт плюс прочитанная литература.&lt;/em&gt;    &lt;br /&gt;Введение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Заниматься менеджментом было бы значительно проще, если бы все подчиненные были как две капли воды похожи на своего начальника.     &lt;br /&gt;&lt;/em&gt;Введение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Чем лучше вы знаете людей, которыми вам предстоит руководить, тем выше шансы на успех.     &lt;br /&gt;&lt;/em&gt;Глава 1. Как привыкнуть к роли руководителя&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Делегирование невозможно без доверия к своим подчиненным. Для того чтобы построить доверительные отношения, требуется некоторое время, но без них деятельность руководителя обречена на провал.&lt;/em&gt;    &lt;br /&gt;Глава 1. Мало быть крутым - смотри в оба!&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Нам нужны программисты, которые не боятся сложностей, но те из них, которые любят усложнять все и вся, представляют серьезную опасность.     &lt;br /&gt;&lt;/em&gt;Глава 1. Какие бывают породы программистов&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Если хотите похвалить человека, сделайте это на виду у всех. Если считаете нужным покритиковать его, не выносите свои оценки на суд публики. Дело не просто в вежливости - эти правила поведения важны в том смысле, что как похвала, так и порицание одного человека на самом деле оказывают грандиозное влияние на всю группу. Поверьте мне, публичное унижение не способствует повышению продуктивности работы группы. Напротив, похвала, высказанная при всех, причем искренне и по заслугам, способна творить чудеса.     &lt;br /&gt;&lt;/em&gt;Глава 1. Слава, почет и деньги&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Не стоит забывать, что любой руководитель должен оценивать свои успехи исключительно по тому, насколько эффективно работают его подчиненные.     &lt;br /&gt;&lt;/em&gt;Глава 1. Слава, почет и деньги&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2511887169523302563?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2511887169523302563/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/1_06.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2511887169523302563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2511887169523302563'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/1_06.html' title='Как пасти котов. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S7sNLXl69-I/AAAAAAAAAS0/9t2ColgVbos/s72-c/Image.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1149591653116389096</id><published>2010-04-04T08:37:00.001-07:00</published><updated>2010-04-06T03:31:31.687-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Стив Макконнелл'/><title type='text'>Совершенный код. Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_paoZJwM8MDs/S7iyLKoTVPI/AAAAAAAAASo/6mQgx9M8nSI/s1600-h/CodeComplete%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="CodeComplete" border="0" alt="CodeComplete" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S7iyLzxqaXI/AAAAAAAAASs/JMip5Kjyn28/CodeComplete_thumb%5B1%5D.jpg?imgmax=800" width="172" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;В компьютерной индустрии существует не такое уж большое количество книг, не нуждающихся в представлении, и книга Стива Макконнелла “Совершенный код” входит в их число. Если в любой поисковой системе ввести название этой книги, то вы получите сотни отзывов и тысячи мнений. Мое мнение будет простым и коротким однозначно “Must have”, ну а приведенные цитаты смогут доказать (или опровергнуть) мое мнение по отношению к этой книге.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;С концептуальной точки зрения каждая программа уникальна, поэтому трудно или даже невозможно разработать общий набор директив, приводящих к решению во всех случаях. Так что знание общего подхода к проблеме не менее, а то и более ценно, чем знание точных решений конкретных проблем.      &lt;br /&gt;&lt;/em&gt;Глава 2.2 Как использовать метафоры?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Не зависимо от экономических подъемов и спадов хороших программистов всегда не хватает, а жизнь слишком коротка, чтобы тратить ее на работу в отсталом учреждении при наличии множества лучших вариантов.      &lt;br /&gt;&lt;/em&gt;Глава 3.1 Причины неполной подготовки     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Как сказал Дэвид Грайс, подход к программированию не должен определяться используемыми инструментами. В связи с этим он проводит различие между программированием на языке (programming in language) и программирование с использованием языка (programming into language). Разработчики, программирующие &amp;quot;на&amp;quot; языке, ограничивают свое мышление конструкциями, непосредственно поддерживаемым языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными.      &lt;br /&gt;Разработчики, программирующие &amp;quot;с использованием&amp;quot; языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка.       &lt;br /&gt;&lt;/em&gt;Глава 4.3 Волны развития технологий     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Хорст Риттел и Мелвин Беббер определили &amp;quot;грязную&amp;quot; проблему как проблему, которую можно ясно определить только путем полного или частичного решения. По сути данный парадокс подразумевает, что проблему нужно &amp;quot;решить&amp;quot; один раз, чтобы получить ее ясное определение, а затем еще раз для создания работоспособного решения.      &lt;br /&gt;&lt;/em&gt;Глава 5.1 Проектирование - &amp;quot;грязная&amp;quot; проблема     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Дейкстра пишет, что ни один человек не обладает интеллектом, способным вместить все детали современной компьютерной программы, поэтому нам - разработчикам ПО - не следует пытаться охватить всю программу сразу. Вместо этого мы должны попытаться организовать программы так, чтобы можно было безопасно работать с их отдельными фрагментами по очереди. Целью этого является минимизация объема программы, о котором нужно думать в конкретный момент времени. Можете считать это своеобразным умственным жонглированием: чем больше умственных шаров программа заставляет поддерживать в воздухе, тем выше вероятность того, что вы уроните один из них и допустите ошибку при проектировании или кодировании.&lt;/em&gt;     &lt;br /&gt;Глава 5.2 Важность управления сложностью&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1149591653116389096?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1149591653116389096/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1149591653116389096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1149591653116389096'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/04/1.html' title='Совершенный код. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S7iyLzxqaXI/AAAAAAAAASs/JMip5Kjyn28/s72-c/CodeComplete_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3138694371518142280</id><published>2010-03-31T00:22:00.001-07:00</published><updated>2010-03-31T00:22:46.440-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Объектно-ориентированный анализ и проектирование. Часть 4</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/_paoZJwM8MDs/S7L4QK6vuOI/AAAAAAAAASY/FXP940xi2_Q/s1600-h/OOA%20and%20OOP%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="OOA and OOP" border="0" alt="OOA and OOP" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S7L4RFbs_BI/AAAAAAAAASc/ASNaK8xabYM/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800" width="177" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Возвращаемся к замечательной книге Гради Буча “Объектно-ориентированный анализ и проектирование с примерами приложений”.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Как отмечает Дейкстра, &amp;quot;Способ управления сложными системами был известен еще в древности - &lt;strong&gt;divide et impera &lt;/strong&gt;(разделяй и властвуй)&amp;quot;. При проектировании сложной программной системы необходимо разделять ее на все меньшие и меньшие подсистемы, каждую из которых можно совершенствовать независимо.      &lt;br /&gt;&lt;/em&gt;Глава 1.3 Роль декомпозиции&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Объектная декомпозиция существенно снижает риск при создании сложной программной системы, так как она развивается из меньших систем, в которых мы уже уверены.     &lt;br /&gt;&lt;/em&gt;Глава 1.3 Роль декомпозиции&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Объекты обладают целостностью, которая не должна - а, в действительности, не может - быть нарушена. Объект может только менять состояние, вести себя, управляться или становиться в определенное отношение к другим объектам. Иначе говоря, свойства, которые характеризуют объект и его поведение, остаются неизменными     &lt;br /&gt;&lt;/em&gt;Глава 2.1 OOP, OOD и OOA&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Абстракция и икапсуляция дополняют друг друга: абстрагирование направлено на наблюдаемое поведение объекта, а инкапсуляция занимается внутренним устройством.&lt;/em&gt;    &lt;br /&gt;Глава 2.1 Инкапсуляция&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Лисков прямо утверждает, что &amp;quot;абстракция будет работать только вместе с инкапсуляцией&amp;quot;. Практически это означает наличие двух частей в классе: интерфейса и реализации. Интерфейс отражает внешнее поведение объекта, описывая абстракцию поведения всех объектов данного класса. Внутренняя реализация описывает представление этой абстракции и механизмы достижения желаемого поведения. Принцип разделения интерфейса и реализации соответствует сути вещей: в интерфейсной части собрано все, что касается взаимодействия данного объекта с любыми другими объектами; реализация скрывает от других объектов все детали, не имеющие отношения к процессу взаимодействия объектов.     &lt;br /&gt;&lt;/em&gt;Глава 2.1 Инкапсуляция&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разумная инкапсуляция локализует те особенности проекта, которые могут подвергнуться изменениям.     &lt;br /&gt;&lt;/em&gt;Глава 2.1 Инкапсуляция&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Сокрытие информации - понятие относительное: то, что спрятано на одном уровне абстракции, обнаруживается на другом уровне.&lt;/em&gt;    &lt;br /&gt;Глава 2.1 Инкапсуляция&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Деление программы на модули бессистемным образом иногда гораздо хуже, чем отсутствие модульности вообще.     &lt;br /&gt;&lt;/em&gt;Глава 2.1 Модульность&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Следует стремиться построить модули так, чтобы объединить логически связанные абстракции и минимизировать взаимные связи между модулями.     &lt;br /&gt;&lt;/em&gt;Глава 2.1 Модульность&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;При коллективной разработке программ распределение работы осуществляется, как правило, по модульному принципу и правильное разделение проекта минимизирует связи между его участниками.     &lt;br /&gt;&lt;/em&gt;Глава 2.1 Модульность&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Значительное упрощение в понимании сложных задач достигается за счет образования из абстракций иерархической структуры.&lt;/em&gt;    &lt;br /&gt;Глава 2.1 Иерархия&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3138694371518142280?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3138694371518142280/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/4.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3138694371518142280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3138694371518142280'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/4.html' title='Объектно-ориентированный анализ и проектирование. Часть 4'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S7L4RFbs_BI/AAAAAAAAASc/ASNaK8xabYM/s72-c/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5899558011953970398</id><published>2010-03-30T04:13:00.001-07:00</published><updated>2010-03-30T04:13:08.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Дон Бокс'/><title type='text'>Дон Бокс о переходе на новые технологии</title><content type='html'>&lt;p align="justify"&gt;В замечательной книге Дона Бокса “Основы платформы .NET” (Essential .NET) есть очень интересное высказывание о проблемах перехода разработчиков на платформу .NET. И хотя сейчас вопросы перехода на управляемый код уже отошли на второй план (хотя сегодня все еще существует мнение о том, что оверхед “управляемого” кода слишком высок). Главная мысль в том, что “управляемый” код наверняка не является последним витком эволюции разработки ПО, после него обязательно будут другие этапы и витки, к которым все так же будут относиться с недоверием.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Читателям, которых тревожит мысль о потере контроля над программой и передаче его инструментам, разработанным кем-то другим, советую вспомнить замену DOS платформой Windows NT. На первых порах было немало разработчиков, недовольных переходом от ручного управления физической памятью и прерываниями к виртуальной памяти и потокам. Они считали, что это замедлит выполнение программы, наложит дополнительные ограничения, что сыграет на руку только самым ленивым программистам. Многие из этих и подобных аргументов могут быть приведены и против CLR. Только время покажет, является ли среда CLR слишком “абстрактной”. Лично я, однако, убежден, что переход к средам с управляемым выполнением, таким, как CLR или виртуальная машина Java, – существенный шаг вперед, а не назад. Всякий раз, когда программисты оказываются перед выбором между производительностью своего труда и полнотой контроля над программой, в конечном итоге побеждают технологии, обеспечивающие более высокую производительность труда.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Дополнительные ссылки (подтверждающие то, что Дон Бокс не одинок в своих суждениях):&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/blog-post_03.html"&gt;Интервью Бярна Страуструпа&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Программист-прагматик. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5899558011953970398?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5899558011953970398/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/blog-post_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5899558011953970398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5899558011953970398'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/blog-post_30.html' title='Дон Бокс о переходе на новые технологии'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2876194248097217988</id><published>2010-03-30T01:38:00.001-07:00</published><updated>2010-03-30T01:38:31.162-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Эдвард Йордон'/><title type='text'>Путь камикадзе. Часть 2</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/S7G4gojd57I/AAAAAAAAASQ/yh721zyGPvc/s1600-h/Death%20March%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Death March" border="0" alt="Death March" align="left" src="http://lh5.ggpht.com/_paoZJwM8MDs/S7G4hbQGx2I/AAAAAAAAASU/DGXToauEWDw/Death%20March_thumb%5B1%5D.jpg?imgmax=800" width="157" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Что-то в последнее время у меня не доходили руки до Цитатника, о чем я прошу прощения и постараюсь исправиться.&lt;/p&gt;  &lt;p align="justify"&gt;Сегодня будет продолжение цитат из замечательной книги Эдварда Йордона “Путь камикадзе”.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Почему люди штурмуют такие опасные горы, как Эверест, несмотря на риск и мучения? Почему они участвуют в марафонских забегах и доводят себя до физического изнеможения в многоборье? Потому что этим они бросают вызов окружающим. Еще больше возбуждает, если ты пытаешься совершить то, что до тебя никто не смог сделать. Например, из пяти миллиардов людей на планете только один может сказать: «Я был первым человеком, ступившим на Луну». Кто-то может подумать, что даже сама попытка совершить нечто подобное - это безумие и эгоизм, а другие, наоборот, хотели бы бросить вызов всем преградам в надежде завоевать славу и общественное признание&lt;/em&gt;.    &lt;br /&gt;Глава 1.4.2 Синдром покорителей Эвереста    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Для проведения переговоров нелишними будут такие вопросы, как «обанкротится ли организация, если система будет готова не к 1-му сентября, а к 5-му?» или «все хотят, чтобы работа была сделана хорошо, быстро и дешево. Все знают, что реально можно выполнить только два требования из трех. Какие именно два для вас важнее?»&lt;/i&gt;    &lt;br /&gt;Глава 3.2 Допустимые компромиссы    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Преднамеренно или нет, но менеджера проекта часто ставят в положение, когда от него требуется быстро дать «грубую оценку» времени и количеству персонала, требуемым для реализации каких-либо частей проекта; и достаточно один раз сболтнуть об этом окружающим, как эти оценки могут превратиться в жесткие, не подлежащие изменению требования. Таким образом, в любой подобной ситуации менеджеру необходимо ответить что-либо наподобие: «Мне нужен один день (или неделя, или месяц - или даже час!), чтобы сделать необходимые расчеты, тогда я смогу дать оценку. Я отправлю ее по электронной почте».     &lt;br /&gt;&lt;/i&gt;Глава 3.4 Стратегии переговоров    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Будьте настойчивы в отстаивании права формировать свою собственную команду. Можно ожидать от команды сверхурочной работы, но при этом помните, что они участвуют в марафоне и могут пробежать в спринтерском темпе только последние 100 ярдов. Добейтесь для них щедрого вознаграждения, если проект закончится успешно, но не дразните их обещаниями будущих экстраординарных наград, потому что это только собьет их с толку. Приложите максимум усилий для создания спаянной и дружной команды, готовой к сотрудничеству; очень важно обладать необходимой квалификацией, однако еще более важно, чтобы она была дополнена психологической совместимостью. Все сказанное должно способствовать максимальному единению участников проекта.&lt;/i&gt;    &lt;br /&gt;Глава 4. Человеческий фактор в безнадежных проектах    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Один из ключевых моментов в безнадежных проектах состоит в том, что некоторые требования не просто останутся невыполненными до официального срока завершения проекта, но и не будут выполнены никогда. Если предположить, что известное правило «80-20» справедливо, то проектная команда сможет добиться 80 процентов «эффекта» от разработанной системы, реализовав 20 процентов требований к ней - при условии правильного выбора этих 20 процентов.     &lt;br /&gt;&lt;/i&gt;Глава 5.1 Концепция &amp;quot;triage&amp;quot;    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&amp;quot;Если единственным вашим инструментом является молоток, то все ваши проблемы выглядят как гвозди&amp;quot;     &lt;br /&gt;Поговорка ветеранов разработчиков      &lt;br /&gt;&lt;/i&gt;Глава 5.2 Важность управления требованиями    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;В действительности нужна система, которая достаточно дешева, достаточно производительна, обладает достаточными возможностями, достаточно устойчива и будет готова достаточно скоро - вот в чем заключается их определение «достаточно хорошего» ПО.     &lt;br /&gt;&lt;/i&gt;Глава 5.4 &amp;quot;Достаточно хорошее&amp;quot; программное обеспечение    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Мы предполагаем, что малое количество дефектов равносильно лучшему качеству, и полагаем, что пользователь всегда предпочитает такое качество - хотя существуют обстоятельства, когда пользователь готов пойти на компромисс и примириться с некоторыми ошибками в обмен на более скорое завершение работы или возможность продукта работать на различных программных/технических платформах и др.     &lt;br /&gt;&lt;/i&gt;Глава 5.4 &amp;quot;Достаточно хорошее&amp;quot; программное обеспечение&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2876194248097217988?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2876194248097217988/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/2_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2876194248097217988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2876194248097217988'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/2_30.html' title='Путь камикадзе. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_paoZJwM8MDs/S7G4hbQGx2I/AAAAAAAAASU/DGXToauEWDw/s72-c/Death%20March_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-8418603458036926610</id><published>2010-03-05T00:00:00.001-08:00</published><updated>2010-03-05T00:00:53.388-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Алан Шаллоуей'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джеймс Р. Тротт'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Несколько слов о работе с заказчиком</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/S5C5_Zl7iuI/AAAAAAAAAM0/qO08X8ZcklM/s1600-h/Design%20Patterns%20Explained%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Design Patterns Explained" border="0" alt="Design Patterns Explained" align="left" src="http://lh5.ggpht.com/_paoZJwM8MDs/S5C5_xY5KiI/AAAAAAAAAM4/n1fEQC-I-Js/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Это последняя цитата из замечательной книги Алана Шаллоуейа и Джеймса Тротта “Шаблоны проектирования”, которую я хотел бы здесь опубликовать. Честно говоря сам я не ожидал, что в такой небольшой книге как эта окажется такое количество интересных цитат, но перечитывая свои записи даже спустя года два после прочтения книги я все еще нахожу их весьма интересными.&lt;/p&gt;  &lt;p align="justify"&gt;Последняя цитата (да, всего одна) касается очень популярной темы среди авторов книг (но о которой все еще не знают все разработчики) - теме общения с заказчиком. Об этом действительно говорится много (отличная подборка высказываний есть у Джоэла Спольски, см. “Секреты айсберга”), но я об этом впервые прочел именно в этой книге.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Обширный опыт общения с заказчиками позволил мне понять несколько важных моментов.     &lt;br /&gt;- Как правило, заказчики знают проблемную область очень хорошо (более того, они знают ее лучше, чем я когда-либо буду знать).      &lt;br /&gt;- Чаще всего заказчики не воспринимают предметную область на концептуальном уровне, как это принято у разработчиков. Напротив, они говорят о конкретных проявлениях тех или иных частных случаев.      &lt;br /&gt;- Заказчики часто используют определение &amp;quot;всегда&amp;quot;, но на самом деле следовало бы говорить &amp;quot;обычно&amp;quot;.      &lt;br /&gt;- Также часто они используют определение &amp;quot;никогда&amp;quot;, подразумевая &amp;quot;редко&amp;quot;.      &lt;br /&gt;- Заказчики часто утверждают, что рассказали обо всех возможных ситуациях, тогда как в действительности речь шла только о том, что случается &lt;b&gt;обычно&lt;/b&gt;.      &lt;br /&gt;Подводя итог, можно сказать, что я полностью доверяю объяснениям заказчиков, когда они дают ответы на заданные мной конкретные вопросы, но с большим сомнением отношусь к их общим рассуждениям. Я всегда стараюсь вести диалог с заказчиком на максимально конкретном уровне. Даже те из заказчиков, которые полагают, что они способны осмыслить задачу на концептуальном уровне, в попытках оказать помощью разработчику часто переоценивают свои возможности.      &lt;br /&gt;&lt;/em&gt;Глава 20. Вариации в учебном примере - система международной электронной торговли&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги книги Алана Шаллоуейа и Джеймса Тротта “Шаблоны проектирования”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_14.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3_04.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/blog-post.html"&gt;Несколько слов о работе с заказчиком&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-8418603458036926610?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/8418603458036926610/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8418603458036926610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8418603458036926610'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/blog-post.html' title='Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Несколько слов о работе с заказчиком'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_paoZJwM8MDs/S5C5_xY5KiI/AAAAAAAAAM4/n1fEQC-I-Js/s72-c/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3119529845610524622</id><published>2010-03-04T23:51:00.001-08:00</published><updated>2010-03-05T00:02:00.792-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Алан Шаллоуей'/><category scheme='http://www.blogger.com/atom/ns#' term='Шаблоны проектирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джеймс Р. Тротт'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 3</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S5C372d7mZI/AAAAAAAAAMs/q96weI-rk8U/s1600-h/Design%20Patterns%20Explained%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Design Patterns Explained" border="0" alt="Design Patterns Explained" align="left" src="http://lh5.ggpht.com/_paoZJwM8MDs/S5C38ZjvxnI/AAAAAAAAAMw/sZlfyawruzY/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;Суждение о том, что некоторое здание является красивым, - это не просто вопрос вкуса. Красоту можно описать с помощью объективных критериев, которые могут быть измерены.&lt;/i&gt;     &lt;br /&gt;Кристофер Александер об объективных категориях качествах     &lt;br /&gt;Глава 5. Шаблоны проектирования пришли из области архитектуры и культурологии     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Каждый шаблон описывает проблему, которая возникает в данной среде снова и снова, а затем предлагает принцип ее решения таким способом, который можно будет применять многократно, получая каждый раз результаты, не повторяющие друг друга.&lt;/i&gt;     &lt;br /&gt;Глава 5. Шаблоны проектирования пришли из области архитектуры и культурологии     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Шаблоны проектирования предоставляют нам абстрактный высокоуровневый взгляд как на проблему, так и на весь процесс объектно-ориентированной разработки. Это помогает избежать излишней детализации на ранних стадиях проектирования.      &lt;br /&gt;&lt;/i&gt;Глава 5. Зачем нужно изучать шаблоны проектирования     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Шаблоны позволяют нам видеть лес за деревьями, поскольку помогают поднять уровень мышления.&lt;/i&gt;     &lt;br /&gt;Глава 5. Зачем нужно изучать шаблоны проектирования     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Наличие возможности реализовать что-либо вовсе не означает, что это обязательно должно быть выполнено.&lt;/i&gt;     &lt;br /&gt;Глава 13. Принцип проектирования от контекста&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги книги Алана Шаллоуейа и Джеймса Тротта “Шаблоны проектирования”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_14.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3_04.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/blog-post.html"&gt;Несколько слов о работе с заказчиком&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3119529845610524622?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3119529845610524622/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/3_04.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3119529845610524622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3119529845610524622'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/3_04.html' title='Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 3'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_paoZJwM8MDs/S5C38ZjvxnI/AAAAAAAAAMw/sZlfyawruzY/s72-c/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-951007397795586285</id><published>2010-03-04T23:49:00.001-08:00</published><updated>2010-03-05T00:01:40.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Алан Шаллоуей'/><category scheme='http://www.blogger.com/atom/ns#' term='Шаблоны проектирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джеймс Р. Тротт'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 2</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S5C3cxIzsjI/AAAAAAAAAMk/_MPzxmeajRQ/s1600-h/Design%20Patterns%20Explained%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Design Patterns Explained" border="0" alt="Design Patterns Explained" align="left" src="http://lh4.ggpht.com/_paoZJwM8MDs/S5C3dc4C7hI/AAAAAAAAAMo/BcYguOSWN4M/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;Связность (cohesion) определяет, насколько тесно внутренние элементы подпрограммы взаимодействуют между собой. Связанность (coupling) характеризует, насколько тесно подпрограмма связана с другими подпрограммами. При этом целью разработчика является создание подпрограмм, обладающих внутренней целостностью (сильной связностью) и слабой, прямой, явной и гибкой зависимостью от других подпрограмм (слабая связанность).&lt;/strong&gt;       &lt;br /&gt;&lt;/em&gt;Глава 1. Внесение изменений при использовании метода функциональной декомпозиции     &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;&lt;i&gt;На практике ошибки исправляются относительно быстро.        &lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;Я считаю, что на исправление ошибок затрачивается лишь незначительная часть времени всего процесса внесения изменений и их отладки. Основная часть времени при внесении изменений и их отладке тратиться на &lt;b&gt;обнаружение&lt;/b&gt; неполадок и выявление нежелательных побочных эффектов. Сам же процесс исправления ошибок относительно непродолжителен.       &lt;br /&gt;&lt;/i&gt;Глава 1. Внесение изменений при использовании метода функциональной декомпозиции     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;При использовании метода функциональной декомпозиции постоянное изменение требований сводило все мои усилия по разработке и сопровождению программного обеспечения на нет. Главные проблемы были связаны с функциями. Внесение изменений в одну группу функций или данных неизбежно приводило к необходимости внесения изменений в другую группу функций или данных, что, в свою очередь, затрагивало следующую группу функций и т.д. Функциональная декомпозиция приложения приводит к каскадным изменениям, подобным снежному кому, скатывающемуся с высокой горы, избежать которых достаточно сложно.&lt;/em&gt;     &lt;br /&gt;Глава 1. Внесение изменений при использовании метода функциональной декомпозиции     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Инкапсуляцию чаще всего определяют как сокрытие данных. Объекты обычно не разрешают доступ извне к своим внутренним данным-членам (т.е. для этих элементов указывается уровень доступа &lt;b&gt;защищенный&lt;/b&gt; или &lt;b&gt;закрытый&lt;/b&gt;). Однако инкапсуляция представляет собой нечто большее, чем просто сокрытие данных. В общем случае понятие инкапсуляции охватывает &lt;/i&gt;&lt;i&gt;&lt;b&gt;любой тип сокрытия&lt;/b&gt;.&lt;/i&gt;     &lt;br /&gt;Глава 1. Объектно-ориентированная парадигма     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&lt;b&gt;Руководствуйтесь своей интуицией&lt;/b&gt;&lt;/i&gt;     &lt;br /&gt;&lt;i&gt;Интуитивная оценка - это на удивление эффективный индикатор качества создаваемого проекта. Я полагаю, что будущих разработчиков программного обеспечения следует приучать полагаться на свою интуицию.      &lt;br /&gt;Под интуицией я здесь понимаю то особой ощущение, которое возникает у вас при взгляде на что-то такое, что вам не нравится. Я понимаю, что подобное определение звучит крайне ненаучно (и это действительно так), однако мой личный опыт убедительно доказывает, что если проектное решение мне интуитивно не нравится, то где-то рядом обязательно имеется лучшее. Безусловно, иногда можно предложить сразу несколько возможных направлений совершенствования, и выбор лучшего из них бывает не вполне очевиден.       &lt;br /&gt;&lt;/i&gt;Глава 4. Решение с обработкой особых случаев&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги книги Алана Шаллоуейа и Джеймса Тротта “Шаблоны проектирования”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_14.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3_04.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/blog-post.html"&gt;Несколько слов о работе с заказчиком&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-951007397795586285?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/951007397795586285/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/951007397795586285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/951007397795586285'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/2.html' title='Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/S5C3dc4C7hI/AAAAAAAAAMo/BcYguOSWN4M/s72-c/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-4156725445380530908</id><published>2010-03-03T04:24:00.001-08:00</published><updated>2010-03-03T04:25:34.569-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джоэл Спольски'/><title type='text'>Джоэл о программировании. Часть 3</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/_paoZJwM8MDs/S45U5uF9QuI/AAAAAAAAAMc/Ujn0nXihC8A/s1600-h/Joel%20On%20Software%5B7%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Joel On Software" border="0" alt="Joel On Software" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S45U7kpZVYI/AAAAAAAAAMg/L7BSJXZU5t8/Joel%20On%20Software_thumb%5B3%5D.jpg?imgmax=800" width="180" height="244" /&gt;&lt;/a&gt; Последняя пачка цитат из книги Джоэла Спольски “Джоэл о программировании”.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Пренебрежительное отношение к работникам, обладающим высочайшей квалификацией, не редкий случай. Почти во всех компаниях есть какая-нибудь оскорбительная и унизительная программа стимулов.     &lt;br /&gt;&lt;/em&gt;Глава 21. Поощрительные выплаты - это зло    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Действие, оказываемое оценками на моральный дух, однобоко: отрицательные оценки сильно ему вредят, а положительные не влияют на моральный дух или продуктивность. Те, кто получает положительную оценку, уже и так работают продуктивно. Положительные оценки вызывают у них ощущение, что ради этого они и стараются, как собаки Павлва, работающие в надежде на поощрение, а не как профессионалы, которых действительно волнует качество делаемой ими работы.     &lt;br /&gt;&lt;/em&gt;Глава 21. Поощрительные выплаты - это зло    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;...не менее двух десятков исследований, проведенных за последние тридцать лет, убедительно показали, что те, кто рассчитывает получить вознаграждение за выполнение задания или успешную работу над ним, работают просто хуже тех, кто не рассчитывает получить никакой награды.     &lt;br /&gt;&lt;/em&gt;Глава 21. Поощрительные выплаты - это зло    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Пятая причина (неуважительная), по которой у вас нет тестеров.     &lt;br /&gt;Я не могу себе этого позволить!      &lt;br /&gt;Эта отговорка самая глупая, и ее легче всего развенчать.      &lt;br /&gt;Как бы ни трудно было найти тестеров, они &lt;b&gt;все же&lt;/b&gt; дешевле, чем программисты. Гораздо дешевле. А если вы не наймете тестеров, вам придется заставить программистов заниматься тестированием. А если вам не нравится, что тестеры часто меняются, посмотрим, как вам понравится, если придется искать замену классному программисту, получающему 100 000 в год, которому надоело ваше требование &amp;quot;потратить несколько недель на тестирование перед выпуском нашего продукта&amp;quot; и который перешел в другую, более профессиональную компанию. Вы могли бы нанять трех тестеров на &lt;b&gt;год&lt;/b&gt; за гонорар агента по найму, который найдет вам программиста на замену.      &lt;br /&gt;Скупость на тестеров оказывается такой ложной экономией, что я просто поражаюсь, сколь многие люди этого не понимают.      &lt;br /&gt;      &lt;br /&gt;Мы программисты. Все программисты в глубине души - архитекторы, а первое, что хочет сделать архитектор, прибыв на строительный участок, - это выровнять его бульдозером и построить нечто грандиозное. Нас не воодушевляют частичная реконструкция: копаться, улучшать, разбирать цветочные клумбы.      &lt;br /&gt;Есть скрытая причина, по которой программисты всегда хотят выкинуть старый код и начать все сначала. Это происходит потому, что прежний код кажется им запутанным. Я так думаю, что &lt;b&gt;они, вероятно, ошибаются&lt;/b&gt;. Старый код кажется запутанным, потому что есть важный фундаментальный закон программирования.      &lt;br /&gt;&lt;/em&gt;&lt;em&gt;&lt;b&gt;Читать код труднее, чем писать его.       &lt;br /&gt;&lt;/b&gt;Глава&lt;/em&gt; 24. То, чего делать нельзя, часть первая&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Все счастливые условия работы похожи друг на друга (закрытые офисы, тихая обстановка, отличные инструменты, редкие отвлечения и даже редкие большие совещания). Каждая несчастная рабочая обстановка несчастна по-своему.     &lt;br /&gt;&lt;/em&gt;Глава 31. Стратегия 5: избавьтесь от отвлечений    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;&lt;b&gt;Берегись методологий.&lt;/b&gt; Они прекрасно обеспечивают жалкое, но терпимое качество труда каждого, но они раздражают людей талантливых, укладывая их в прокрустово ложе ограничений. Талантливый повар, конечно, не будет счастлив, испекая бургеры в Макдональдсе, именно &lt;b&gt;из-за&lt;/b&gt; инструкций, насаждаемых Макдональдсом. Почему же ИТ-консультанты так хвалятся своими методологиями? (Не могу понять.)      &lt;br /&gt;&lt;/em&gt;Глава 33. Биг-Маки против &amp;quot;Голодного повара&amp;quot;    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если вы хотя бы 20 минут в своей жизни писали код, то, вероятно, открыли для себя хорошее эмпирическое правило: &lt;b&gt;все не так просто, как может показаться.&lt;/b&gt;      &lt;br /&gt;&lt;/em&gt;Глава 34. Все не так просто, как может показаться    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Синдром &amp;quot;это изобретено не здесь&amp;quot; считается классической патологией менеджмента и состоит в том, что команда отказывается пользоваться технологией, которую создала не она сама. Очевидно, что люди с таким синдромом просто мелочны, не хотят делать того, что выгодно всей организации, потому что им это не принесет никакой славы. (Верно?)     &lt;br /&gt;&lt;/em&gt;Глава 35. В защиту синдрома &amp;quot;это придумали не здесь&amp;quot;    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Когда ваша компания растет быстрее, чем на 100 процентов в год, просто невозможно, чтобы наставники передавали новичкам корпоративную культуру. Если программист перемещен на должность руководителя и получил вдруг пятерых новых подчиненных, набранных за день до этого, просто невозможно осуществлять такое наставничество.     &lt;br /&gt;&lt;/em&gt;Глава 36. Первое письмо о стратегии: Ben &amp;amp; Jerry's против Amazon    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Идея рекламы состоит в том, чтобы врать и не быть пойманным.     &lt;br /&gt;&lt;/em&gt;Глава 37. Второе письмо о стратегии: что сначала - курица или яйцо.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Джоэла Спольски “Джоэл о программировании”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_09.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post.html"&gt;Справочник бойца по проведению собеседования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post_23.html"&gt;Секреты айсберга&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-4156725445380530908?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/4156725445380530908/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/4156725445380530908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/4156725445380530908'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/03/3.html' title='Джоэл о программировании. Часть 3'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S45U7kpZVYI/AAAAAAAAAMg/L7BSJXZU5t8/s72-c/Joel%20On%20Software_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1650800776652105818</id><published>2010-02-23T00:42:00.001-08:00</published><updated>2010-03-03T04:26:15.228-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джоэл Спольски'/><title type='text'>Джоэл о программировании. Секреты айсберга</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S4OVBaYaq3I/AAAAAAAAAMU/te2iQcqpKuM/s1600-h/Joel%20On%20Software%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Joel On Software" border="0" alt="Joel On Software" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S4OVCbzBLKI/AAAAAAAAAMY/v_11RXyrQCI/Joel%20On%20Software_thumb%5B1%5D.jpg?imgmax=800" width="180" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;Заказчики не знают, чего они хотят.        &lt;br /&gt;Не надейтесь, что заказчики будут знать, чего они хотят.         &lt;br /&gt;&lt;/strong&gt;Этого никогда не будет. Забудьте об этом.       &lt;br /&gt;Лучше исходить из того, что вам &lt;b&gt;все равно&lt;/b&gt; придется что-то написать, и это что-то должно понравиться заказчику, но он будет несколько удивлен. &lt;b&gt;Вы&lt;/b&gt; должны провести исследование. &lt;b&gt;Вы &lt;/b&gt;должны придумать, как решить проблемы заказчика удобным для него образом.       &lt;br /&gt;&lt;/em&gt;Глава 25. Секрет айсберга     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Вы знаете, что айсберг на 90% скрыт под водой? Так вот, программное обеспечение обычно на него похоже: в нем есть милый интерфейс пользователя, который требует процентов 10%, а 90% программистского труда скрыто от глаз. А если принять во внимание, что примерно половина времени уходит на отладку, то интерфейс требует лишь около 5% всех трудовых затрат. А если ограничить себя только &lt;b&gt;видимой&lt;/b&gt; часть интерфейса, пикселами, тем, что вы увидите в PowerPoint, то речь пойдет вообще об 1% и менее.       &lt;br /&gt;Но секрет не в этом. Секрет в том, что &lt;b&gt;люди, не являющиеся программистами, этого не понимают.&lt;/b&gt;       &lt;br /&gt;&lt;/em&gt;Глава 25. Секрет айсберга     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если вы покажете непрограммисту экран с интерфейсом, который будет выглядеть на 90% хуже, он решит, что программа на 90% хуже.      &lt;br /&gt;&lt;/em&gt;Глава 25. Важное следствие номер один     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если показать непрограммисту экран с интерфейсом пользователя, который на вид готов и красиво выглядит, то он решит, что программа почти готова.      &lt;br /&gt;&lt;/em&gt;Глава 25. Важное следствие номер два     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Интернет-компания, у которой есть феерический веб-сайт, состоящий из четырех или около того страниц, ценится дороже, чем компания с очень функциональным веб-сайтом, предоставляющим архивы за последние 3700 лет, но со стандартным серым фоном.      &lt;br /&gt;&lt;/em&gt;Глава 25. Важное следствие номер три     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если вам нужно произвести впечатление ожидаемыми результатами, то единственное, что имеет значение для успеха, это снимки экранов. Они должны быть как можно красивее.      &lt;br /&gt;&lt;/em&gt;Глава 25. Важное следствие номер пять&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Джоэла Спольски “Джоэл о программировании”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_09.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post.html"&gt;Справочник бойца по проведению собеседования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post_23.html"&gt;Секреты айсберга&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1650800776652105818?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1650800776652105818/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post_23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1650800776652105818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1650800776652105818'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post_23.html' title='Джоэл о программировании. Секреты айсберга'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S4OVCbzBLKI/AAAAAAAAAMY/v_11RXyrQCI/s72-c/Joel%20On%20Software_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2972442865932106757</id><published>2010-02-21T09:03:00.001-08:00</published><updated>2010-02-21T09:03:29.703-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Скотт Мейерс'/><category scheme='http://www.blogger.com/atom/ns#' term='С++'/><title type='text'>Скотт Мейерс. Эффективное использование С++</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;&lt;a href="http://lh4.ggpht.com/_paoZJwM8MDs/S4FnXdKVdWI/AAAAAAAAAMI/blmpyEIz5SE/s1600-h/Meyers%5B3%5D.jpg"&gt;&lt;img title="Meyers" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="244" alt="Meyers" src="http://lh4.ggpht.com/_paoZJwM8MDs/S4FnXyR_SmI/AAAAAAAAAMM/zAMRRbr--2w/Meyers_thumb%5B1%5D.jpg?imgmax=800" width="174" align="left" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/em&gt;На этот раз речь пойдет о замечательной книге Скотта Мейерса “&lt;a href="http://www.ozon.ru/context/detail/id/2610625/"&gt;Эффективное использование С++&lt;/a&gt;”. И хотя возможно эта книга (и цитаты из нее, соответственно) будут более интересны разработчикам, которые в своей профессиональной деятельности занимаются языком программирования С++, многие идеи положенные в основу некоторых правил будут актуальны и для разработчиков из других областей. &lt;/p&gt;  &lt;p align="justify"&gt;Мое развернутое мнение, в виде рецензии, можно почитать на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/08/blog-post_12.html"&gt;моем блоге&lt;/a&gt;, а также на сайте &lt;a href="http://rsdn.ru/res/book/cpp/effective_cpp2006.xml"&gt;rsdn.ru&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Независимо от вида ресурсов, важно, чтобы по окончании использования они были освобождены.     &lt;br /&gt;Попытки обеспечить это &amp;quot;вручную&amp;quot; представляет сложность при любых условиях, но если принять во внимание исключения, функции со многими путями возврата и приложения, модифицируемое программистами без отчетливого понимания последствий вносимых изменений, то становится ясно, что придумывать в каждом случае особый способ управления ресурсами нежелательно.      &lt;br /&gt;&lt;/em&gt;Глава 3. Управление ресурсами&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Любой интерфейс, который требует, чтобы пользователь что-то помнил, может быть использован неправильно, ибо пользователь вполне способен забыть, что от него требуется.     &lt;br /&gt;&lt;/em&gt;Правило 18. Проектируйте интерфейсы так, что их легко было использовать правильно и трудно – неправильно&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Женщина либо беременна, либо нет. Невозможно быть чуть-чуть беременной. Аналогично программная система является либо безопасной по исключениям, либо нет. Нет такого понятия, как частично безопасная система. Если система имеет всего одну небезопасную относительно исключений функцию, то она небезопасна и в целом, потому что вызов этой функции может привести к утечке ресурсов и повреждению структур данных. К несчастью, большинство унаследованного кода на С++ было написано без учета требований безопасности исключений, поэтому многие системы на сегодня являются в этом отношении небезопасными. Они включают код, написанный в небезопасной манере.     &lt;br /&gt;&lt;/em&gt;Правило 29. Стремитесь, чтобы программа была безопасна относительно исключений&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Сорок лет назад код, изобилующий операторами goto, считался вполне приемлемым. Теперь же мы стараемся писать структурированные программы. Двадцать лет назад глобальные данные ни у кого не вызывали возражений. Теперь мы стремимся данные инкапсулировать. Десять лет назад написание функций без учета влияния исключений было нормой. А сейчас мы боремся за достижение безопасности относительно исключений.      &lt;br /&gt;Времена меняются. Мы живем. Мы учимся.      &lt;br /&gt;&lt;/em&gt;Правило 29. Стремитесь, чтобы программа была безопасна относительно исключений&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Не забывайте об эмпирическом правиле &amp;quot;80-20&amp;quot;, которое утверждает, что типичная программа тратит 80% времени на исполнение 20% кода. Это важное правило, поскольку оно напоминает, что цель разработчика программного обеспечения - идентифицировать те 20% кода, которые действительно способны повысить производительность программы. Можно до бесконечности оптимизировать и объявлять функции inline, но все это будет пустой тратой времени, если только вы не сосредоточите усилия на &lt;b&gt;нужных&lt;/b&gt; функциях.      &lt;br /&gt;&lt;/em&gt;Правило 30. Тщательно обдумывайте использование встроенных функций&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Делая класс D закрытым наследником класса B, вы поступаете так потому, что заинтересованы в использовании некоторого кода, уже написанного для B, а не потому, что между объектами B и D существует некая концептуальная взаимосвязь. Таким образом, закрытое наследование - это исключительно прием реализации. Можно сказать, что закрытое наследование означает наследование &lt;b&gt;одной только &lt;/b&gt;реализации, без интерфейса. Если D закрыто наследует B, это означает, что объекты D реализованы посредством объектов B, и ничего больше. Закрытое наследование ничего не означает в ходе &lt;b&gt;проектирования&lt;/b&gt; программного обеспечения и обретает смысл только на этапе &lt;b&gt;реализации&lt;/b&gt;.      &lt;br /&gt;&lt;/em&gt;Правило 39. Продумывайте подход к использованию закрытого наследования&lt;/p&gt;  &lt;p align="justify"&gt;P.S. Спасибо Алексею Ершову за идею цитат из этой замечательной книги, и за отличную цитату об эволюции в области разработки ПО (вторая цитат из правила 29).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2972442865932106757?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2972442865932106757/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post_21.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2972442865932106757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2972442865932106757'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post_21.html' title='Скотт Мейерс. Эффективное использование С++'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/S4FnXyR_SmI/AAAAAAAAAMM/zAMRRbr--2w/s72-c/Meyers_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1599007402139901317</id><published>2010-02-08T04:18:00.001-08:00</published><updated>2010-03-03T04:26:51.057-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Джоэл Спольски'/><title type='text'>Джоэл о программировании. Справочник бойца по проведению собеседования</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S3ABKnjAqcI/AAAAAAAAALw/lacYjf_y9z0/s1600-h/Joel%20On%20Software%5B7%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Joel On Software" border="0" alt="Joel On Software" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S3ABLo3c16I/AAAAAAAAAL0/DJHrjtIGDyo/Joel%20On%20Software_thumb%5B5%5D.jpg?imgmax=800" width="180" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Сегодня я опять возвращаюсь к замечательной книге Джоэла Спольски “&lt;a href="http://www.ozon.ru/context/detail/id/2820575/"&gt;Джоэл о программировании&lt;/a&gt;”. &lt;/p&gt;  &lt;p align="justify"&gt;На этот раз здесь будут цитаты всего лишь из одной главы, главы 20 “Справочник бойца по проведению собеседования”. Мне кажется (хотя, нужно признать, что не только мне), что это одна из самых интересных и полезных глав из этой книги, в которой (спасибо, кэп) автор раскрывает проблемы проведения собеседований. Хотя эта тема достаточно избита, Джоэл умеет красиво (и главное с пользой дела) рассказать даже о таких, казалось бы банальных вещах.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Все соглашаются, что люди - самая главная часть программного проекта, но никто не знает толком, как &lt;b&gt;решить&lt;/b&gt; эту проблему. Первое, что надо правильно сделать, если вы хотите, чтобы у вас были хорошие программисты, - это &lt;b&gt;нанять&lt;/b&gt; правильных программистов. А это значит, что вы должны уметь определить, &lt;b&gt;какие&lt;/b&gt; программисты правильные, что обычно делается во время собеседования.       &lt;br /&gt;&lt;/em&gt;    &lt;br /&gt;&lt;em&gt;Всегда старайтесь, чтобы каждого кандидата на работу интервьюировало не меньше шести человек, причем не менее пяти из них должны иметь одинаковый с ним ранг (т.е. программисты, а не менеджеры).      &lt;br /&gt;&lt;/em&gt;    &lt;br /&gt;&lt;em&gt;Гораздо, &lt;b&gt;гораздо&lt;/b&gt; лучше отклонить хорошего кандидата, чем принять плохого. Плохой отнимет много денег и сил, а также время у других для исправления его ошибок. Увольнение нанятого по ошибке может отнять месяцы и оказаться очень сложным, если он будет склонен к сутяжничеству. Иногда просто невозможно кого-нибудь уволить. Плохие работники деморализуют хороших. При этом они могут быть плохими программистами, но &lt;b&gt;прекрасными людьми&lt;/b&gt;, или им &lt;b&gt;очень нужна эта работа&lt;/b&gt;, поэтому вам тяжело уволить их или их увольнение вызовет всеобщее неудовольствие, а могут быть и еще причины. Очень тяжелая ситуация.       &lt;br /&gt;&lt;/em&gt;    &lt;br /&gt;&lt;b&gt;&lt;em&gt;Как же определить, что этого человека надо принять?        &lt;br /&gt;В принципе просто. Искать надо тех, кто:         &lt;br /&gt;1. Умен         &lt;br /&gt;2. Доводит дело до конца         &lt;br /&gt;&lt;/em&gt;&lt;/b&gt;    &lt;br /&gt;&lt;em&gt;&lt;b&gt;На что нужно обращать внимание, задавая открытые вопросы?        &lt;br /&gt;Первое: Ищите увлеченность. &lt;/b&gt;Умный человек увлекается проектом, над которым работает. Он очень возбуждается, рассказывая о предмете... Плохие кандидаты просто равнодушны и не проявляют никакого энтузиазма во время интервью.       &lt;br /&gt;&lt;b&gt;Второе: хорошие кандидаты стараются понятно излагать вещи на любом уровне.&lt;/b&gt; Я отказываю некоторым кандидатам, потому что, рассказывая о своем недавнем проекте, они были не в состоянии описать его языком, понятным нормальному человеку... Вам не стоит брать их на работу, потому что у них не хватает ума, чтобы понять, как сделать свои мысли понятными другим.       &lt;br /&gt;&lt;b&gt;Третье: Если проект был групповым, посмотрите, есть ли у кандидата качества руководителя.&lt;/b&gt; Помните, &lt;b&gt;умен&lt;/b&gt; и &lt;b&gt;доводит дело до конца&lt;/b&gt;. Узнать о ком-либо, что он &lt;b&gt;доводит дело до конца&lt;/b&gt;, можно, только проследив, была ли у него в прошлом тенденция доводить дело до конца.       &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Джоэла Спольски “Джоэл о программировании”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_09.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post.html"&gt;Справочник бойца по проведению собеседования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post_23.html"&gt;Секреты айсберга&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1599007402139901317?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1599007402139901317/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1599007402139901317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1599007402139901317'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/02/blog-post.html' title='Джоэл о программировании. Справочник бойца по проведению собеседования'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S3ABLo3c16I/AAAAAAAAAL0/DJHrjtIGDyo/s72-c/Joel%20On%20Software_thumb%5B5%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6980369261260106729</id><published>2010-01-26T03:14:00.001-08:00</published><updated>2010-01-26T03:14:53.902-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Объектно-ориентированный анализ и проектирование. Часть 3. Объектная модель. Основные определения.</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S17OqtymR6I/AAAAAAAAAK0/fs2ofLxcLU4/s1600-h/OOA%20and%20OOP%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="OOA and OOP" border="0" alt="OOA and OOP" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S17OrNgYLXI/AAAAAAAAAK4/N57XREYwiXg/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800" width="177" height="244" /&gt;&lt;/a&gt; При использовании той или иной методологии очень важно разговаривать с собеседниками на одном языке. Для этого нужно одинаково понимать термины, на основе которых строится общение или выражение собственной точки зрения.&lt;/p&gt;  &lt;p align="justify"&gt;В мире объектно-ориентированного анализа и проектирования также есть своя терминология и ключевые определения. Что такое ООП, что такое абстракция, что такое инкапсуляция и т.д. Всего определений огромное количество, поэтому в этом сообщении я ограничусь лишь основными, взятыми из главы 2. “Объектная модель” замечательной книги Гради Буча “Объектно-ориентированный анализ и проектирование с примерами приложений”.   &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&lt;strong&gt;Объектно-ориентированное программирование &lt;/strong&gt;- это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образую иерархию наследования      &lt;br /&gt;      &lt;br /&gt;&lt;/i&gt;&lt;i&gt;&lt;strong&gt;Объектно-ориентированное проектирование&lt;/strong&gt; - это методология проектирования, соединяющая в себе процесс объектной декомпозиции и приемы представления логической и физической, а также статической и динамической моделей проектируемой системы.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;i&gt;&lt;strong&gt;Объектно-ориентированный анализ&lt;/strong&gt; - это методология, при которой требования к системе воспринимаются с точки зрения классов и объектов, выявленных в предметной области.      &lt;br /&gt;      &lt;br /&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Абстракция&lt;/strong&gt; выделяет существенные характеристики некоторого объекта, отличающие его от всех других видов объектов и, таким образом, четко определяет его концептуальные границы с точки зрения наблюдателя.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Инкапсуляция&lt;/strong&gt; - это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение; инкапсуляция служит для того, чтобы изолировать контрактные обязательства абстракции от их реализации.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Модульность&lt;/strong&gt; - это свойство системы, которая была разложена на внутренне связные, но слабо связанные между собой модули.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Иерархия&lt;/strong&gt; - это упорядочение абстракций, расположение их по уровням.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Типизация&lt;/strong&gt; - это способ защититься от использования объектов одного класса вместо другого, или по крайней мере управлять таким использованием.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Параллелизм (concurrency)&lt;/strong&gt; - это свойство, отличающее активные объекты от пассивных.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;&lt;strong&gt;Сохраняемость (persistence)&lt;/strong&gt; - способность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства.&lt;/i&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6980369261260106729?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6980369261260106729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6980369261260106729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6980369261260106729'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/3.html' title='Объектно-ориентированный анализ и проектирование. Часть 3. Объектная модель. Основные определения.'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S17OrNgYLXI/AAAAAAAAAK4/N57XREYwiXg/s72-c/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2303944134098530760</id><published>2010-01-20T03:54:00.001-08:00</published><updated>2010-01-20T03:54:44.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Эдвард Йордон'/><title type='text'>Путь камикадзе. Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;&lt;a href="http://lh6.ggpht.com/_paoZJwM8MDs/S1bvAToeb3I/AAAAAAAAAKs/yOZSEgoZMv8/s1600-h/Death%20March%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Death March" border="0" alt="Death March" align="left" src="http://lh4.ggpht.com/_paoZJwM8MDs/S1bvA6Amp-I/AAAAAAAAAKw/r0u_n7UwdZY/Death%20March_thumb%5B3%5D.jpg?imgmax=800" width="157" height="244" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Сложно сказать что-либо новое о легендарной книге Эда Йордона “Путь камикадзе”, т.к. она уже давно стала классической в своей области. В бумажном виде у меня есть только первое издание, а оригинал вышел еще в 1997 году (хотя автор вовсю уже работает над третьим, подробности можно почитать &lt;a href="http://sergeyteplyakov.blogspot.com/2009/09/death-march-3rd-edition-by-edward.html"&gt;здесь&lt;/a&gt;). Но если немного перефразировать Фредерика Брукса (правда он говорил это по отношению к другой легендарной книге в области управления проектами - “Peopleware”): этой книге уготована долгая жизнь по той же причине, почему рассказы Гомера пережили тысячи лет: эти рассказы о людях, и они также верны сегодня, как и тысячу лет назад.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В существовании безнадежных проектов виновато высшее руководство, а также наивность и безрассудство пользователей.     &lt;br /&gt;&lt;/em&gt;Предисловие    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Неразумное поведение корпораций заключается в том, что они делают одно и то же снова и снова, каждый раз ожидая различных результатов.&lt;/i&gt;    &lt;br /&gt;Глава 1.    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Под безнадежным проектом я понимаю такой проект, параметры которого отклоняются от нормальных значений по крайней мере на 50%.&lt;/i&gt;    &lt;br /&gt;Глава 1.1 Определение безнадежного проекта    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Другой способ охарактеризовать безнадежный проект заключается в следующем: беспристрастная, объективная оценка риска такого проекта (включая риск, связанный с техническими проблемами, человеческим фактором, законами, политикой и т.д.) определяет вероятность провала свыше 50%.&lt;/i&gt;    &lt;br /&gt;Глава 1.1 Определение безнадежного проекта    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Наверно, слишком тягостно представить себе, что вы идиот, окружены идиотами и руководят вами идиоты. Наверно, вы рассматриваете как оскорбление даже саму возможность такого предположения.     &lt;br /&gt;&lt;/i&gt;Глава 1.3 Почему существуют безнадежные проекты?    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Многие разработчики ПО клянутся, что не дадут втянуть себя в политические игры, поскольку они считают это не своим делом. Кроме того, они полагают, что все связанное с политикой, - отвратительно. Увы, уйти от политики невозможно; как только в какое-либо совместное предприятие войдут двое или более человек, тут же начнется политика.     &lt;br /&gt;&lt;/i&gt;Глава 1.3.1 Политика, политика, политика    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Если вы - революционер или мученик, то можете повоевать с корпоративной культурой, но вряд ли у вас при этом хоть что-нибудь получится.&lt;/i&gt;    &lt;br /&gt;Глава 1.3.5 Менталитет &amp;quot;Морского Корпуса&amp;quot;: Настоящие программисты могут работать без сна!    &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Вознаграждение бывает не только денежным. Иногда просто приятно получить похвалу от руководителя проекта или доказать самому себе, что вы можете не растеряться в сложившейся ситуации.     &lt;br /&gt;&lt;/i&gt;Глава 1.4.1 Риск высок, но и вознаграждение тоже&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2303944134098530760?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2303944134098530760/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2303944134098530760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2303944134098530760'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_20.html' title='Путь камикадзе. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/S1bvA6Amp-I/AAAAAAAAAKw/r0u_n7UwdZY/s72-c/Death%20March_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6939565419469371248</id><published>2010-01-17T05:49:00.001-08:00</published><updated>2010-03-03T04:27:29.825-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Тестирование и отладка'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джоэл Спольски'/><title type='text'>“Джоэл о программировании”. Часть 2.</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S1MVWQDS5-I/AAAAAAAAAKk/gWEpshl0eqc/s1600-h/JoelOnSoftware%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="JoelOnSoftware" border="0" alt="JoelOnSoftware" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S1MVXedZyrI/AAAAAAAAAKo/tusC9fh0uGs/JoelOnSoftware_thumb%5B1%5D.jpg?imgmax=800" width="180" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Вторая порция цитат из замечательной книги Джоэла Спольски “Джоэл о программировании”.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Вы хватаете за рукав первого попавшегося вам в коридоре человека и требуете, чтобы он поработал с кодом, который вы только что написали. Проделайте это пять раз и вы найдете 95% всех проблем с юзабилити в своем коде      &lt;br /&gt;(&amp;quot;Корридорное тестирование&amp;quot;)&lt;/em&gt;     &lt;br /&gt;Глава 3. Проводится ли юзабилити-тестирование на случайных людях?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Продвижение хороших кодеров выдвижением их на &lt;b&gt;другие должности&lt;/b&gt;, где требуется писать на человеческом языке, а не на С++, служит классической иллюстрацией принципа Питера: люди продвигаются по службе, пока не достигнут своего уровня некомпетентности.       &lt;br /&gt;&lt;/em&gt;Глава 7. Как принимать на работу менеджера программы?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Многие неопытные менеджеры полагают, что могут &amp;quot;стимулировать&amp;quot; более быструю работу своих программистов, если будут задавать для них трудные, &amp;quot;напряженные&amp;quot; (нереалистично быстрые) графики. Я думаю, что такого рода мотивация - глупость. Если я выбиваюсь из графика, я чувствую себя обреченным, подавленным и немотивированным. Если же я работаю с опережением графика, я чувствую себя бодрым и работоспособным. Психологические игры с графиком очень опасны.      &lt;br /&gt;&lt;/em&gt;Глава 9. Ни в коем случае не позволяйте программистам занижать оценку времени.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если у вас есть кучка деревянных кубиков, которые не помещаются в коробку, есть два выхода: взять коробку побольше или убрать некоторые кубики. Если вы думали, что сможете сделать продукт через 6 месяцев, а по графику получается 12, вам придется либо отложить выпуск продукта, либо отказаться от каких-то функций. Сделать кубики меньше вы не можете, а если вы считаете, что можете, значит, вы лишаете себя полезной возможности реально &lt;b&gt;смотреть в будущее&lt;/b&gt; и лжете себе о том, что вы там видите.       &lt;br /&gt;&lt;/em&gt;Глава 9. График похож на набор кубиков     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Исправлять ошибки необходимо только тогда, когда сохранение ошибки обходится дороже, чем ее исправление      &lt;br /&gt;&lt;/em&gt;Глава 11. Тотальное уничтожение ошибок     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я заметил, что начиная с самой первой моей работы я как разработчик в среднем лишь два или три часа могу продуктивно писать код, и это меня изумляет. Когда я летом стажировался в Microsoft, то мой коллега-стажер рассказал мне, что фактически он ежедневно активно работал с 12 до 5. Пять часов, минус обед, и его бригада &lt;b&gt;восхищалась&lt;/b&gt; им, потому что ему все удавалось сделать гораздо больше среднего. Я обнаружил, что со мной происходит то же самое. Я испытываю легкое чувство вины, замечая, как напряженно, по-видимому, работают все остальные, а у меня получается два или три часа настоящей работы в течение дня, и тем не менее я всегда был одним из самых результативных членов бригады. Видимо по этой причине &amp;quot;Peopleware&amp;quot; и экстремальное программирование настаивают на отмене сверхурочной работы и на строго 40-часовой рабочей неделе, будучи уверенными в том, что объем продукции команды от этого не уменьшится.       &lt;br /&gt;&lt;/em&gt;Глава 15. Огонь и движение&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Джоэла Спольски “Джоэл о программировании”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_09.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post.html"&gt;Справочник бойца по проведению собеседования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post_23.html"&gt;Секреты айсберга&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6939565419469371248?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6939565419469371248/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6939565419469371248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6939565419469371248'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2_17.html' title='“Джоэл о программировании”. Часть 2.'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S1MVXedZyrI/AAAAAAAAAKo/tusC9fh0uGs/s72-c/JoelOnSoftware_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7260941390622241206</id><published>2010-01-14T01:55:00.001-08:00</published><updated>2010-03-05T00:02:27.998-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Алан Шаллоуей'/><category scheme='http://www.blogger.com/atom/ns#' term='Шаблоны проектирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Джеймс Р. Тротт'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/_paoZJwM8MDs/S07qDS1CigI/AAAAAAAAAKc/FFTHmZ13_yc/s1600-h/Design%20Patterns%20Explained%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Design Patterns Explained" border="0" alt="Design Patterns Explained" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S07qEdneO3I/AAAAAAAAAKg/ZwS5DSrm8qo/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;В “природе” существует не такое большое количество книг по “классическим” шаблонам проектирования, впервые описанных в знаменитой книге Банды Четырех.&lt;/p&gt;  &lt;p align="justify"&gt;Одним из достойнейших представителей этой категории книг является книга Алана Шаллоуея и Джеймса Р. Тротта “Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию”.&lt;/p&gt;  &lt;p align="justify"&gt;В этой книге авторы касаются подмножества тех классических шаблонов, описанных бандой четырех, но в отличие от них, язык этой книги не такой сухой, что благоприятно влияет на понимание этой темы (в общем-то не такой и простой) начинающими разработчиками.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Множество ошибок появляется при внесении в текст программы изменений&lt;/em&gt;.       &lt;br /&gt;&lt;/strong&gt;&lt;i&gt;Попробуйте обосновать это утверждение исходя из собственного опыта. Вспомните, что всякий раз, когда в текст программы необходимо внести изменения, возникает опасение, что изменение текста программы в одном месте может привести к сбою в другом... Как это часто бывает с людьми, необходимость учесть при внесении изменений слишком много различных деталей обычно приводит к появлению ошибок.      &lt;br /&gt;&lt;/i&gt;Глава 1. Функциональная декомпозиция: в преддверии появления объектно-ориентированной парадигмы     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;И не имеет значения, сколько усилий было приложено, насколько тщательно был проведен анализ - пользователь просто не может сформулировать все необходимые требования сразу. Слишком много неизвестного несет в себе будущее. Времена меняются. И та было всегда...      &lt;br /&gt;&lt;b&gt;Ничто не может предотвратить наступление перемен. Однако это не значит, что к их приходу нельзя подготовиться.&lt;/b&gt;&lt;/i&gt;     &lt;br /&gt;Глава 1. Функциональная декомпозиция: в преддверии появления объектно-ориентированной парадигмы     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Любой опрос среди разработчиков программного обеспечения по качеству предоставленных им заказчиком требований к создаваемому программному продукту едва ли даст большое разнообразие ответов. Скорее всего они будут следующими.      &lt;br /&gt;- Требования являются неполными.       &lt;br /&gt;- Требования по большей части ошибочны.       &lt;br /&gt;- Требования (и пользователи) противоречивы.       &lt;br /&gt;- Требования не описывают поставленную задачу подробно.&lt;/i&gt;     &lt;br /&gt;Глава 1. Проблема формулирования требований к создаваемому программному обеспечению     &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;&lt;i&gt;Требования к программному обеспечению всегда изменяются.        &lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;Я также понял, что большинство разработчиков знают это обстоятельство и считают его весьма неприятным. Но лишь немногие из них действительно учитывают возможность изменения существующих требований при написании программы.      &lt;br /&gt;&lt;/i&gt;Глава 1. Проблема формулирования требований к создаваемому программному обеспечению     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Все это вовсе не значит, что можно опустить руки и отказаться от сбора полноценных требований пользователей к создаваемой системе. Напротив, это значит, что необходимо научиться приспосабливать создаваемый программный код к неизбежному внесению изменений. Это также значит, что необходимо прекратить обвинять себя (или заказчика) в том, что является совершенно закономерным.&lt;/i&gt;     &lt;br /&gt;Глава 1. Проблема формулирования требований к создаваемому программному обеспечению     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги книги Алана Шаллоуейа и Джеймса Тротта “Шаблоны проектирования”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_14.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3_04.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/blog-post.html"&gt;Несколько слов о работе с заказчиком&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-7260941390622241206?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/7260941390622241206/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_14.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7260941390622241206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/7260941390622241206'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_14.html' title='Алан Шаллоуей и Джеймс Р. Тротт. Шаблоны проектирования. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S07qEdneO3I/AAAAAAAAAKg/ZwS5DSrm8qo/s72-c/Design%20Patterns%20Explained_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5450948651862871312</id><published>2010-01-12T06:09:00.001-08:00</published><updated>2010-01-26T03:16:44.202-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Объектно-ориентированный анализ и проектирование. Часть 2. Пять признаков сложных систем</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_paoZJwM8MDs/S0yCm_8MhhI/AAAAAAAAAKU/zfx1M4L0i3M/s1600-h/OOA%20and%20OOP%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="OOA and OOP" border="0" alt="OOA and OOP" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S0yCnhi0paI/AAAAAAAAAKY/-oq4JjsYCR8/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800" width="177" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Продолжая тему сложности, начатую в &lt;a href="http://ru-quotes.blogspot.com/2010/01/1_12.html" target="_blank"&gt;первой части&lt;/a&gt; цитат из замечательной книги Гради Буча “Объектно-ориентированный анализ и проектирование с примерами приложений”, я хочу отдельно опубликовать пять признаков сложных систем, которые, по мнению автора, присущи &lt;strong&gt;любой&lt;/strong&gt; сложной системе.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;1. &amp;quot;Сложные системы часто являются иерархическими и состоят из взаимозависимых подсистем, которые в свою очередь также могут быть разделены на подсистемы, и т.д., вплоть до самого низкого уровням.&amp;quot;&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;2. Выбор, какие компоненты в данной системе считаются элементарными, относительно произволен и в большой степени оставляется на усмотрение исследователя.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;3. &amp;quot;Внутрикомпонентная связь обычно сильнее, чем связь между компонентами. Это обстоятельство позволяет отделять &amp;quot;высокочастотные&amp;quot; взаимодействия внутри компонентов от &amp;quot;низкочастотной&amp;quot; динамики взаимодействия между компонентами&amp;quot;.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;4. &amp;quot;Иерархические системы обычно состоят из немногих типов подсистем, по-разному скомбинированных и организованных&amp;quot;.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;5. &amp;quot;Любая работающая сложная система является результатом развития работавшей более простой системы... Сложная система, спроектированная &amp;quot;с нуля&amp;quot;, никогда не заработает. Следует начинать с работающей простой системы&amp;quot;.&lt;/i&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5450948651862871312?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5450948651862871312/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5450948651862871312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5450948651862871312'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2_12.html' title='Объектно-ориентированный анализ и проектирование. Часть 2. Пять признаков сложных систем'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S0yCnhi0paI/AAAAAAAAAKY/-oq4JjsYCR8/s72-c/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2128292956290224695</id><published>2010-01-12T06:05:00.001-08:00</published><updated>2010-01-26T03:17:53.805-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Гради Буч'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Объектно-ориентированный анализ и проектирование. Часть 1. Сложность</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S0yBi2THVQI/AAAAAAAAAKM/G040uQqLnmY/s1600-h/OOA%20and%20OOP%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="OOA and OOP" border="0" alt="OOA and OOP" align="left" src="http://lh4.ggpht.com/_paoZJwM8MDs/S0yBjugl3LI/AAAAAAAAAKQ/vz1pBEzWJNA/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800" width="177" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;В жизни многих разработчиков бывают моменты, кардинально изменившие их профессиональные взгляды, для одних – это изменение места работы, для других – курс в университете, для третьих – книги. &lt;/p&gt;  &lt;p align="justify"&gt;Мне повезло, т.к. эта замечательная книга Гради Буча попала мне в руки на заре моей профессиональной деятельности, когда у меня практически не было собственного мнения относительно того, что же такое процесс разработки, какие его основные сложности или какие плюсы и минусы разных методов проектирования. Поэтому, хорошо это или плохо, но мне не пришлось перестраивать свое мышление, чтобы проникнуться основными идеями этой книги.&lt;/p&gt;  &lt;p align="justify"&gt;Я остановился именно на втором издании книги, а не на третьем, т.к. с моей точки зрения основную ценность представляет первая часть, которая осталась практически без изменений, а также потому что третье издание на русский язык лучше бы вообще не переводили (см. мои замечания по поводу перевода на &lt;a href="http://rsdn.ru/forum/design/3026057.1.aspx" target="_blank"&gt;rsdn.ru&lt;/a&gt;). Мое развернутое мнение – как обычно на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/09/blog-post_15.html" target="_blank"&gt;блоге&lt;/a&gt; и на &lt;a href="http://rsdn.ru/res/book/oo/Booch_OOA_And_OOD_2007.xml" target="_blank"&gt;rsdn.ru&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;В этом сообщении речь пойдет об одном из самых интересных аспектах разработки ПО – о сложности.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;font face="Arial"&gt;&lt;font face="Georgia"&gt;&lt;em&gt;Врач, строитель и программистка спорили о том, чья профессия древнее. Врач заметил: &amp;quot;В Библии сказано, что Бог сотворил Еву из ребра Адама. Такая операция может быть проведена только хирургом, поэтому я по праву могу утверждать, что моя профессия самая древняя в мире&amp;quot;. Тут вмешался строитель и сказал: &amp;quot;Но еще раньше в Книге Бытия сказано, что Бог сотворил из хаоса небо и землю. Это было первое и, несомненно, наиболее выдающееся строительство. Поэтому, дорогой доктор, вы не правы. Моя профессия самая древняя в мире&amp;quot;. Программистка при этих словах откинулась в кресле и с улыбкой произнесла: &amp;quot;А кто же по-вашему сотворил хаос?&amp;quot;          &lt;br /&gt;&lt;/em&gt;Глава 1. Сложность&lt;/font&gt;       &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;i&gt;Звезда в преддверии коллапса; ребенок, который учится читать; клетки крови, атакующие вирус, - это только некоторые из потрясающе сложных объектов физического мира. Компьютерные программы тоже бывают сложными, однако их сложность совершенно другого рода. Брукс пишет: &amp;quot;Эйнштейн утверждал, что должны существовать простые объяснения природных процессов, так как Бог не действует из каприза или по произволу. У программиста нет такого утешения: сложность, с которой он должен справиться, лежит в самой природе системы&amp;quot;&lt;/i&gt;.     &lt;br /&gt;Глава 1.1. Простые и сложные программные системы     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Сложность промышленных программ превышает возможности человеческого интеллекта. Увы, но сложность, о которой мы говорим, по-видимому, присуща всем большим программных системам. Говоря &amp;quot;&lt;b&gt;присуща&lt;/b&gt;&amp;quot;, мы имеем в виду, что эта сложность здесь неизбежна: с ней можно справиться, но избавиться от нее нельзя. &lt;/i&gt;    &lt;br /&gt;Глава 1.1. Простые и сложные программные системы     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&amp;quot;Чем сложнее система, тем легче ее полностью развалить&amp;quot;. Строитель едва ли согласится расширить фундамент уже построенного 100-этажного здания. Это не просто дорого: делать такие вещи значит напрашиваться на неприятности. Но что удивительно, пользователи программных систем, не задумываясь, ставят подобные задачи перед разработчиками. Это, утверждают они, всего лишь технический вопрос для программистов. &lt;/i&gt;    &lt;br /&gt;Глава 1.1. Последствия неограниченной сложности     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Эксперименты психологов, например Миллера, показывают, что максимальное количество структурных единиц информации, за которыми человеческий мозг может одновременно следить, приблизительно равно семи плюс-минус два. Вероятно, это связано с объемом краткосрочной памяти у человека. Саймон также отмечает, что дополнительным ограничивающим фактором является скорость обработки мозгом поступающей информации: на восприятие каждой новой единицы информации ему требуется около 5 секунд.&lt;/i&gt;     &lt;br /&gt;Глава 1.2. Организованная и неорганизованная сложность     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;Люди развили чрезвычайно эффективную технологию преодоления сложности. Мы абстрагируемся от нее. Будучи не в состоянии полностью воссоздать сложный объект, мы просто игнорируем не слишком важные детали и, таким образом, имеем дело с обобщенной, идеализированной моделью объекта&lt;/i&gt;.     &lt;br /&gt;Глава 1.3. Роль абстракции     &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2128292956290224695?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2128292956290224695/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2128292956290224695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2128292956290224695'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_12.html' title='Объектно-ориентированный анализ и проектирование. Часть 1. Сложность'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/S0yBjugl3LI/AAAAAAAAAKQ/vz1pBEzWJNA/s72-c/OOA%20and%20OOP_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3610000409639270101</id><published>2010-01-11T03:13:00.001-08:00</published><updated>2010-01-11T05:29:44.335-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Джон Роббинс'/><category scheme='http://www.blogger.com/atom/ns#' term='Тестирование и отладка'/><title type='text'>Отладка приложений для Microsoft .NET. Об ошибках и отладке</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/S0sHyknXxgI/AAAAAAAAAKE/tgZSMD9Sdi8/s1600-h/DebuggingApplications%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="DebuggingApplications" border="0" alt="DebuggingApplications" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S0sHzJF2d6I/AAAAAAAAAKI/s_ga8hybaZI/DebuggingApplications_thumb%5B1%5D.jpg?imgmax=800" width="166" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;На этот раз речь пойдет о цитатах из книги Джона Роббинса “Отладка приложений для Microsoft .NET”. В целом, книга весьма не простая, помимо большого числа интересных тем, довольно часто встречаются и довольно “дремучие”. Подробное мнение об этой книге можно посмотреть на моем &lt;a href="http://sergeyteplyakov.blogspot.com/2009/02/microsoft-net.html" target="_blank"&gt;блоге&lt;/a&gt; или на &lt;a href="http://rsdn.ru/res/book/win32/Debugging_Applications_3nd.xml" target="_blank"&gt;rsdn.ru&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;i&gt;Ошибки - это мрак. Точка. Ошибки - вот из-за чего вы вкалываете на безнадежными проектами с давно просроченными сроками сдачи, просиживаете у компьютера ночи на пролет и ссоритесь с вечно ворчащими коллегами. Ошибки действительно могут превратить вашу жизнь в кошмар, если достаточное их количество обнаружится в вашем программном обеспечении. Клиенты могут прекратить использовать ваш продукт, а вы можете потерять работу.      &lt;br /&gt;&lt;/i&gt;&lt;/div&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;/div&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;i&gt;Ошибки - это серьезно!&lt;/i&gt; &lt;i&gt;Очень часто люди, работающий в нашей индустрии, представляют себе ошибки просто как досадные мелочи. Сильнее заблуждаться невозможно. Любой разработчик расскажет вам о проектах с немыслимым количеством ошибок и даже о компаниях, загнувшихся оттого, что их продукт содержал столько ошибок, что был непригоден. Когда я писал первое издание этой книги, NASA потеряла космический зонд, направленный на Марс, из-за ошибок, допущенных на этапе формулировки требований и проектирования ПО.      &lt;br /&gt;&lt;/i&gt;Введение     &lt;br /&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;/div&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;i&gt;Пока я писал второе издание на солдат американского спецназа упала бомба, направленная на другую цель. Причиной была программная ошибка, возникшая при смене источника питания в системе наведения. За неделю до того, как я написал это введение к третьему изданию, корпорация Microsoft выпустила пакет исправлений для пакета исправлений, который ранее создал огромную уязвимость, связанную с переполнением буфера в Microsoft Internet Explorer 6. &lt;/i&gt;&lt;/div&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Хотя к программным ошибкам уже начинают относится с бОльшим уважением, нам еще очень далеко до появления культуры разработки, в которой к ошибкам будут относиться чрезвычайно серьезно, а не как к незначительным проблемам, иногда возникающим в процессе разработки.&lt;/i&gt; &lt;i&gt;Ошибки – это круто! Они помогают залезть в самую глубину и понять, как работают вещи. Мы все попали в этот бизнес, потому что нам нравится учиться, выслеживание ошибок – неотъемлемая часть обучения… Ведь так здорово бывает найти и исправить ошибку! Конечно же, самые хорошие ошибки – это те, которые обнаруживаются до того, как заказчик увидит ваш продукт. Таким образом, вы должны успевать сделать свою работу и найти ошибки до того, как это сделают ваши заказчики. Видеть, как заказчики обнаруживают ошибки, - это совершенно не круто.&lt;/i&gt;     &lt;br /&gt;Введение     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Отладка - это очень захватывающая тема, независимо от того, какой язык вы используете и на какой платформе работаете. Это единственный этап процесса разработки программного обеспечения, на котором инженеры пинают свои компьютеры, орут на них и даже разбивают их об стену. Для обычно сдержанной замкнутой группы такой накал эмоций представляет собой что-то невероятное. Также отладка является тем этапом процесса разработки ПО, который чаще всего в нашем сознании связывается с &amp;quot;ночными бдениями&amp;quot;. Мне еще не встречался инженер, который бы позвонил домой, чтобы сказать: &amp;quot;Дорогая, я не могу прийти домой, потому что мы так веселимся, составляя UML-диаграммы, что хотим посвятить этому развлечению всю ночь!&amp;quot; Однако многие из знакомых инженеров имели опыт жалобных звонков домой в стиле: &amp;quot;Дорогая, я не могу прийти домой, потому что наткнулся на чудовищную ошибку в программе&amp;quot;.&lt;/em&gt;&lt;/div&gt;  &lt;p align="justify"&gt;Глава 1. Ошибки: откуда они берутся и как их устранять    &lt;br /&gt;&lt;/p&gt;  &lt;div style="text-align: justify" align="justify"&gt;&lt;em&gt;Как выяснилось, мои кошки – отличные отладчики, и они помогли мне решить огромное количество действительно неприятных ошибок. Собирая их вокруг своего рабочего места, я рисую проблему на белой доске и позволяю кошкам воздействовать на меня своими магическими лучами. Конечно же, однажды я делал это, не приняв душ и будучи одетым в одни шорты, - было немного трудно объяснить ситуацию курьеру службы доставки, который все это время ошеломленно стоял у двери.&lt;/em&gt;&lt;/div&gt;  &lt;p align="justify"&gt;Глава 1. Шаг 5. Думайте творчески    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Помните, что отладчик – это всего лишь инструмент, как например, отвертка. Он делает только то, что вы приказываете ему делать. Настоящий отладчик находится у вас в голове.      &lt;br /&gt;&lt;/em&gt;Глава 1. Последний секрет процесса отладки&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3610000409639270101?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3610000409639270101/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/microsoft-net.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3610000409639270101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3610000409639270101'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/microsoft-net.html' title='Отладка приложений для Microsoft .NET. Об ошибках и отладке'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S0sHzJF2d6I/AAAAAAAAAKI/s_ga8hybaZI/s72-c/DebuggingApplications_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-8098408067176908078</id><published>2010-01-09T04:24:00.001-08:00</published><updated>2010-03-03T04:29:18.527-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Джоэл Спольски'/><title type='text'>“Джоэл о программировании”. Часть 1.</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_paoZJwM8MDs/S0h1fzIgblI/AAAAAAAAAJ8/NKKQNWne6gw/s1600-h/JoelOnSoftware%5B5%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="JoelOnSoftware" border="0" alt="JoelOnSoftware" align="left" src="http://lh6.ggpht.com/_paoZJwM8MDs/S0h1gqJjA7I/AAAAAAAAAKA/rGJApKf5EJY/JoelOnSoftware_thumb%5B3%5D.jpg?imgmax=800" width="180" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Сегодня речь пойдет о цитатах из книги “Джоэл о программировании” известного&amp;#160; блогера Джоэла Спольски (&lt;a href="http://www.JoelOnSoftware.com"&gt;www.JoelOnSoftware.com&lt;/a&gt;). Это имя уже давно известно многим людям, занятым в области разработки ПО, да и не только в ней. Книга мне понравилась, она написана очень простым и интересным языком, охватывает множество самых разнообразных тем из области разработки программного обеспечения.&lt;/p&gt;  &lt;p align="justify"&gt;По-сути, эта книга является “блуком” (одно из новых веяний в литературе, которое пошло от английских слов book (книга) и blog) и построена на основе наиболее известных статей Джоэла, которые были опубликованы автором на своем сайте. Но несмотря на публичную доступность материала, я все же отдаю предпочтение печатным изданиям; как мне кажется подобную литературу удобнее читать на диване с карандашом, а не перед компьютером. Но не зависимо от формы носителя информации, здесь вы сможете ознакомиться с наиболее выдающимися ее фрагментами, что позволит точнее сформировать ваше собственное к ней отношение:)&lt;/p&gt;  &lt;p align="justify"&gt;Более развернутое мнение об этой книге можно почитать на моем &lt;a href="http://sergeyteplyakov.blogspot.com/2009/05/blog-post.html"&gt;блоге&lt;/a&gt; или, как обычно, на сайте &lt;a href="http://rsdn.ru/res/book/prog/Joel_On_Software.xml"&gt;rsdn.ru&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Кроме того, с этого сообщения я постараюсь уменьшить количество цитат на одно сообщение, чтобы их было не более 5-6-ти. Если такой формат будет более удачным (или наоборот – менее удачным) – вперед, высказывайте свое мнение в комментариях.&lt;/p&gt;  &lt;p align="justify"&gt;Ну что ж, приступим:)&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Ты никогда не &lt;b&gt;стремился&lt;/b&gt; стать менеджером. Как и большинство разработчиков программ, с которыми я знаком, ты был бы гораздо счастливее, если бы тебе позволили спокойно сидеть и писать код. Но ты лучший разработчик, и когда с Найджелом, прежним руководителем группы, произошел этот &lt;b&gt;несчастный&lt;/b&gt; случай на банджи и с лэптопом, всем показалось естественным, что на его место надо выдвинуть тебя, звезду команды.       &lt;br /&gt;&lt;/em&gt;Введение     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Знаете, что я вам скажу? Управление программными проектами не имеет &lt;b&gt;никакого&lt;/b&gt; отношения к программированию. Если вы до сих пор не занимались ничем, кроме написания кода, то вам предстоит открыть, что человеческие существа несколько менее предсказуемы, чем обычный процессор Intel.       &lt;br /&gt;&lt;/em&gt;Введение     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Управление программными проектами требует совершенно иных навыков и приемов, нежели написание кода; это два совершенно различных и не связанных между собой поля. Написание кода так же отличается от управления проектом, как нейрохирургия от выпекания кренделей. Нет никаких оснований полагать, что у блестящего нейрохирурга, каким-то образом попавшего на производство кренделей в результате некоего разрыва в пространственно-временном континууме, окажется хоть малейшее представление о том, как делать эти самые крендели, даже если он &lt;b&gt;окончил&lt;/b&gt; Гарвардский медицинский колледж. Но люди, однако, продолжают думать, что можно взять ведущего программиста и без какой-либо переподготовки перевести его в администраторы.       &lt;br /&gt;&lt;/em&gt;Введение     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я думаю, что некоторые крупнейшие ошибки - даже на самых верхних уровнях архитектуры - происходят из-за слабого или неверного понимания некоторых простых вещей на самых нижних уровнях. Вы построили замечательный дворец, но его фундамент никуда не годится. Вместо аккуратных бетонных плит навален булыжник. Здание выглядит прекрасно, но время от времени по совершенно непонятным причинам ванна начинает скользить по полу.      &lt;br /&gt;&lt;/em&gt;(О важности мышления на языке &lt;b&gt;&lt;i&gt;байтов&lt;/i&gt;&lt;/b&gt;)     &lt;br /&gt;Глава 2. Обращаясь к основам     &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;&lt;i&gt;В первоклассных командах не принято мучить программистов.&lt;/i&gt;&lt;/b&gt; &lt;em&gt;Даже мелкие неприятности, вызываемые плохим инструментом, копятся и делают программистов сердитыми и мрачными. А сердитый программист - малопродуктивный программист.      &lt;br /&gt;Вдобавок ко всему, программистов очень легко подкупать, приобретая для них самые крутые и новые вещицы. Это гораздо более экономный способ заставить их трудиться, чем платить им более высокие, по сравнению с другими фирмами, зарплаты!&lt;/em&gt;     &lt;br /&gt;Глава 3. Стараетесь ли вы использовать для работы лучшие инструменты?&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Джоэла Спольски “Джоэл о программировании”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1_09.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post.html"&gt;Справочник бойца по проведению собеседования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/02/blog-post_23.html"&gt;Секреты айсберга&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/03/3.html"&gt;Часть 3&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-8098408067176908078?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/8098408067176908078/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_09.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8098408067176908078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8098408067176908078'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1_09.html' title='“Джоэл о программировании”. Часть 1.'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/S0h1gqJjA7I/AAAAAAAAAKA/rGJApKf5EJY/s72-c/JoelOnSoftware_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2720954395080834395</id><published>2010-01-04T00:16:00.001-08:00</published><updated>2010-01-26T03:18:21.309-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Мартин Фаулер'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Рефакторинг. Улучшение существующего кода. Часть 2</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/S0Gjz9tK41I/AAAAAAAAAJ0/RQG2A1ncbvs/s1600-h/Refactoring%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Refactoring" border="0" alt="Refactoring" align="left" src="http://lh3.ggpht.com/_paoZJwM8MDs/S0Gj0QoEitI/AAAAAAAAAJ4/O9pVuIErTRQ/Refactoring_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Обещанное продолжение цитат из замечательной книги Мартина Фаулера “Рефакторинг. Улучшение существующего кода”.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Если что-то плохо пахнет, это что-то надо поменять      &lt;br /&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Мнение бабушки Бек, высказанное     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; при обсуждении проблем детского воспитания     &lt;br /&gt;Глава 3. Код с душком     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Увидев одинаковые структуры кода в нескольких местах, можно быть уверенным, что если удастся их объединить, программа от этого только выиграет      &lt;br /&gt;&lt;/em&gt;Глава 3. Дублирование кода     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Мы придерживаемся эвристического правила, гласящего, что если ощущается необходимость что-то прокомментировать, надо написать метод.      &lt;br /&gt;&lt;/em&gt;Глава 3. Длинный метод.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Весь смысл объектов в том, что они позволяют хранить данные вместе с процедурами их обработки. Классический пример дурного запаха - метод, который больше интересуется не тем классом, в котором он находится, а каким-то другим. Чаще всего предметом зависти являются данные. Не счесть случаев, когда мы сталкиваемся с методом, вызывающим полдюжины методов доступа к данным другого объекта, чтобы вычислить некоторое значение. К счастью, лечение здесь очевидно: метод явно напрашивается на перевод в другое место.&lt;/em&gt;     &lt;br /&gt;Глава 3. Завистливые функции     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Брайан Фут (Brian Foote) предложил название &amp;quot;теоретическая общность&amp;quot; (speculative generality) для запаха, к которому мы очень чувствительны. Он возникает, когда говорят о том, что в будущем, наверное, потребуется возможность делать такие вещи, и хотят обеспечить набор механизмов для работы с вещами, которые не нужны. То, что получается в результате, труднее понимать и сопровождать. Если бы все эти механизмы использовались, их наличие было бы оправдано, в противном случае они только мешают, поэтому избавляйтесь от них.      &lt;br /&gt;&lt;/em&gt;Глава 3. Теоретическая общность     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Цепочки сообщений появляются, когда клиент запрашивает у одного объекта другой, у которого клиент запрашивает еще один объект, у которого клиент запрашивает еще один объект и т.д. Это может выглядеть как длинный ряд методов getThis или последовательность временных переменных. Такие последовательности вызовов означают, что клиент связан с навигацией по структуре классов. Любые изменения промежуточных связей означают необходимость модификации клиента.&lt;/em&gt;     &lt;br /&gt;Глава 3. Цепочки сообщений     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Почувствовав потребность написать комментарий, попробуйте сначала изменить структуру кода так, чтобы любые комментарии стали излишними.      &lt;br /&gt;&lt;/em&gt;Глава 3. Комментарии     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Делайте все тесты полностью автоматическими, так чтобы они проверяли собственные результаты      &lt;br /&gt;&lt;/em&gt;Глава 4. Ценность самотестирующегося кода     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Получив сообщение об ошибке, начните с создания теста модуля, показывающего эту ошибку.      &lt;br /&gt;&lt;/em&gt;Глава 4. Тесты модулей и функциональные тесты     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Тестирование приносит ощутимую пользу, даже если осуществляется в небольшом объеме. Ключ к проблеме в том, чтобы тестировать те области, возможность ошибок в которых вызывает наибольшее беспокойство. При таком подходе затраты на тестирование приносят максимальную выгоду.      &lt;br /&gt;&lt;/em&gt;Глава 4. Добавление новых тестов     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Лучше написать и выполнить неполные тесты, чем не выполнить полные тесты      &lt;br /&gt;&lt;/em&gt;Глава 4. Добавление новых тестов     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Опасение по поводу того, что тестирование не выявит все ошибки, не должно помешать написанию тестов, которые выявят большинство ошибок.      &lt;br /&gt;&lt;/em&gt;Глава 4. Добавление новых тестов     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Всегда есть риск что-то пропустить, но лучше потратить разумное время, чтобы выявить большинство ошибок, чем потратить вечность, пытаясь найти их все.      &lt;br /&gt;&lt;/em&gt;Глава 4. Добавление новых тестов     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Маленькие методы действительно полезны, если выбирать для них хорошие имена. Иногда меня спрашивают, какой длины должно быть имя метода. Думаю, важна не длина, а семантическое расстояние между именем метода и телом метода. Если выделение метода делает код более понятным, выполните его, даже если имя метода окажется длиннее, чем выделенный код.      &lt;br /&gt;&lt;/em&gt;Глава 6. Выделение метода. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Данная книга учит тому, как использовать короткие методы с названиями, отражающими их назначение, что приводит к получению более понятного и легкого для чтения кода. Но иногда встречаются методы, тела которых столь же прозрачны, как названия, либо изначально, либо становятся таковыми в результате рефакторинга. В этом случае необходимо избавиться от метода. Косвенность может быть полезной, но излишняя косвенность раздражает.      &lt;br /&gt;&lt;/em&gt;Глава 6. Встраивание метода. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Когда код имеет четкую структуру, часто находятся более мощные оптимизирующие решения, которые без рефакторинга остались бы незамеченными.      &lt;br /&gt;&lt;/em&gt;Глава 6. Замена временной переменной вызовом метода. Техника.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Все переменные, выполняющие несколько функций, должны быть заменены отдельной переменной для каждой из этих функций. Использование одной и той же переменной для решения разных задач очень затрудняет чтение кода.      &lt;br /&gt;&lt;/em&gt;Глава 6. Расщепление временной переменной. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я никогда не пробовал спать на потолке. Говорят, есть несколько способов. Наверняка одни из них легче, чем другие. С алгоритмами то же самое. Если обнаруживается более понятный способ сделать что-либо, следует заменить сложный способ простым.      &lt;br /&gt;&lt;/em&gt;Глава 6. Замещение алгоритма. Мотивировка.     &lt;br /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разумное и правильное проектное решение через неделю может оказаться неправильным. Но проблема не в этом, а в том, чтобы не оставить это без внимания.&lt;/em&gt;     &lt;br /&gt;Глава 7. Перемещение объекта. Мотивировка&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;em&gt;Одним из ключевых свойств объектов является инкапсуляция. Инкапсуляция означает, что объектам приходится меньше знать о других частях системы. В результате при модификации других частей об этом требуется сообщить меньшему числу объектов, что упрощает внесение изменений.      &lt;br /&gt;&lt;/em&gt;Глава 7. Сокрытие делегирования. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Важно внести ясность в смысл слова неизменяемый (&lt;strong&gt;immutable&lt;/strong&gt;). Если есть класс, представляющий денежную сумму и содержащий тип валюты и величину, то обычно это объект с неизменяемым значением. Это не значит, что ваша зарплата не может измениться. Это значит, что для изменения зарплаты необходимо заменить существующий объект денежной суммы другим объектом денежной суммы, а не изменять значение в существующем объекте. Связь может измениться, но сам объект денежной суммы не изменяется.       &lt;br /&gt;&lt;/em&gt;Глава 8. Замена ссылки значением. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;В хорошо организованной многоуровневой системе код, обрабатывающий интерфейс пользователя, отделен от кода, обрабатывающего бизнес-логику. Это делается по нескольким причинам. Может потребоваться несколько различных интерфейсов пользователя для одинаковой бизнес-логики; интерфейс пользователя становится слишком сложным, если выполняет обе функции; сопровождать и развивать объекты предметной области проще, если они отделены от GUI; с разными частями приложения могут иметь дело разные разработчики.      &lt;br /&gt;&lt;/em&gt;Глава 8. Дублирование видимых данных. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Одна точка входа обеспечивается современными языками, а в правиле одной точки выхода на самом деле пользы нет. Ясность - главный принцип: если метод понятнее, когда в нем одна точка выхода, сделайте ее единственной, в противном случае не стремитесь к этому.      &lt;br /&gt;&lt;/em&gt;Глава 9. Замена вложенных условных операторов граничным оператором. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;В компьютерах, как и в жизни, иногда происходят неприятности, на которые надо как-то реагировать. Проще всего остановить программу и вернуть код ошибки. Это компьютерный эквивалент самоубийства из-за опоздания на самолет. Хотя я и пытаюсь снова шутить, но в решении компьютера о самоубийстве есть свои достоинства. Если потери от краха программы невелики, а пользователь терпелив, то можно и остановить программу. Однако в важных программах должны приниматься более радикальные меры.      &lt;br /&gt;&lt;/em&gt;Глава 10. Замена кода ошибки исключительной ситуацией. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Преимущество исключительных ситуаций в том, что они четко отделяют нормальную обработку от обработки ошибок. Благодаря этому облегчается понимание программ, а создание понятных программ, как, я надеюсь, вы теперь верите, это достоинство, которое уступает только благочестию.      &lt;br /&gt;&lt;/em&gt;Глава 10. Замена кода ошибки исключительной ситуацией. Мотивировка.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Ральф Джонсон преподал мне важный урок, касающийся исследований: когда кто-то (рецензент статьи, участник конференции) заявляет, что он не понимает, или просто &amp;quot;не врубается&amp;quot;, это &lt;strong&gt;наша &lt;/strong&gt;вина. &lt;strong&gt;Наша &lt;/strong&gt;обязанность постараться развить и донести свои идеи.&lt;/em&gt;     &lt;br /&gt;Глава 13. Проверка в реальных условиях     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Это типичная дилемма исследователя, когда современное состояние науки опережает современное состояние практики.&lt;/em&gt;     &lt;br /&gt;Глава 13. Проверка в реальных условиях     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Рефакторинг это ритм, а не отдельные ноты.      &lt;br /&gt;Как узнать, что вы действительно начали его понимать? Вы узнаете об этом, когда на вас снизойдет спокойствие. Когда вы почувствуете абсолютную уверенность, что как бы ни был закручен код, который вам достался, вы можете сделать его лучше, настолько лучше, чтобы развивать его дальше.       &lt;br /&gt;&lt;/em&gt;Глава 15. Складывая все вместе     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Крупный рефакторинг - это способ навлечь на себя катастрофу. Каким бы ужасным ни выглядел беспорядок, приучите себя ограничиваться краями проблемы.&lt;/em&gt;     &lt;br /&gt;Глава 15. Складывая все вместе&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Мартина Фаулера “Рефакторинг. Улучшение существующего кода”.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2720954395080834395?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2720954395080834395/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2720954395080834395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2720954395080834395'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/2.html' title='Рефакторинг. Улучшение существующего кода. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/S0Gj0QoEitI/AAAAAAAAAJ4/O9pVuIErTRQ/s72-c/Refactoring_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1951621590091947844</id><published>2010-01-04T00:09:00.001-08:00</published><updated>2010-01-26T03:18:47.937-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Мартин Фаулер'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Рефакторинг. Улучшение существующего кода. Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/S0GiSBj_MiI/AAAAAAAAAJs/OxCCoMd8Bqs/s1600-h/Refactoring%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Refactoring" border="0" alt="Refactoring" align="left" src="http://lh4.ggpht.com/_paoZJwM8MDs/S0GiSv0QA4I/AAAAAAAAAJw/hwWQ2fGsjfE/Refactoring_thumb%5B1%5D.jpg?imgmax=800" width="170" height="244" /&gt;&lt;/a&gt; С момента выхода оригинального издания этой книги прошло десять лет и уже давно понятия &amp;quot;рефакторинга&amp;quot; стало неотъемлемой частью арсенала каждого разработчика. Также уже довольно давно сбылась мечта авторов этой книги и поддержка рефакторинга уже не ограничивается единственной IDE для Smalltalk, а доступна практически в каждой современной IDE. Некоторые разработчики могут подумать, что в связи с этим ценность этой книги стала уменьшаться, но это не так. Главная ее ценность была и остается в том, что такое &amp;quot;код с душком&amp;quot;, почему важно качество кода, какое влияние оказывает рефакторинг на процесс проектирования, какова роль модульных тестов, понять когда следует проводить рефакторинг, а когда от него вообще стоит отказаться и многое другое.     &lt;br /&gt;Поскольку цитат, как обычно для хорошей книги, набралось довольно много, то я разбил их на две части.     &lt;br /&gt;Итак, приступим, часть первая.     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Компилятору все равно, красив код или нет. Но в процессе внесения изменений в систему участвуют люди, которым это не безразлично. Плохо спроектированную систему трудно модифицировать. Трудно потому, что нелегко понять, где изменения нужны. Если трудно понять, что должно быть изменено, то есть большая вероятность, что программист ошибется.&lt;/em&gt;     &lt;br /&gt;Глава 1. Комментарии к исходной программе     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Обнаружив, что в программу необходимо добавить новую функциональность, но код программы не структурирован удобным для добавления этой функциональности образом, сначала произведите рефакторинг программы, чтобы упростить внесение необходимых изменений, а только потом добавьте функцию.&lt;/em&gt;     &lt;br /&gt;Глава 1. Комментарии к исходной программе     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Перед началом рефакторинга убедитесь, что располагаете надежным комплектом тестов. Эти тесты должны быть самопроверяющимися.      &lt;br /&gt;&lt;/em&gt;Глава 1. Первый шаг рефакторинга     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;При применении рефакторинга программа модифицируется небольшими шагами. Ошибку нетрудно обнаружить.      &lt;br /&gt;&lt;/em&gt;Глава 1. Декомпозиция и перераспределение метода statement     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Стоит ли заниматься переименованием? Без сомнения, стоит. Хороший код должен ясно сообщать о том, что он делает, и правильные имена переменных составляют основу понятного кода. Не бойтесь изменять имена, если в результате код становится более ясным.      &lt;br /&gt;&lt;/em&gt;Глава 1. Декомпозиция и перераспределение метода statement     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям.      &lt;br /&gt;&lt;/em&gt;Глава 1. Декомпозиция и перераспределение метода statement     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Очень важно, чтобы код сообщал о своей цели. Я часто провожу рефакторинг, когда просто читаю некоторый код. Благодаря этому свое понимание работы программы я отражаю в коде, чтобы впоследствии не забыть понятое.      &lt;br /&gt;&lt;/em&gt;Глава 1. Декомпозиция и перераспределение метода statement     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&lt;b&gt;Рефакторинг &lt;/b&gt;(Refactoring) (сущ.): изменение во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения.&lt;/i&gt;     &lt;br /&gt;Глава 2. Определение рефакторинга     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Цель рефакторинга - упростить понимание и модификацию программного обеспечения      &lt;br /&gt;&lt;/em&gt;Глава 2. Определение рефакторинга     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Рефакторинг напоминает наведения порядка в коде. Убираются фрагменты, оказавшиеся не на своем месте. Утрата кодом структурности носит кумулятивный характер. Чем сложнее разобраться во внутреннем устройстве кода, тем труднее его сохранить и тем быстрее происходит его распад. Регулярно проводимый рефакторинг помогает сохранять форму кода.      &lt;br /&gt;&lt;/em&gt;Глав 2. Рефакторинг улучшает композицию программного обеспечения     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Беда в том, что когда вы бьетесь над тем, чтобы заставить программу работать, то совсем не думаете о разработчике, который будет заниматься ею в будущем. Надо сменить ритм, чтобы внести в код изменения, облегчающие его понимание. Рефакторинг помогает сделать код более легким для чтения.      &lt;br /&gt;&lt;/em&gt;Глава 2. Рефакторинг облегает понимание программного обеспечения     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я не считаю себя замечательным программистом. Я просто хороший программист с замечательными привычками      &lt;br /&gt;&lt;/em&gt;Высказывание Кента Бека     &lt;br /&gt;Глава 2. Рефакторинг помогает найти ошибки     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Как правило, я против откладывания рефакторинга &amp;quot;на потом&amp;quot;. На мой взгляд, это не тот вид деятельности. Рефакторингом следует заниматься постоянно понемногу. Надо не решать проводить рефакторинг, а проводить его, потому что необходимо сделать что-то еще, а поможет в этом рефакторинг.      &lt;br /&gt;&lt;/em&gt;Глава 2. Когда следует проводить рефакторинг?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Делая что-то в первый раз, вы просто это делаете. Делая что-то аналогичное во второй раз, вы морщитесь от необходимости повторения, но все-таки повторяете то же самое. Делая что-то похожее в третий раз, вы начинаете рефакторинг.      &lt;br /&gt;&lt;/em&gt;Глава 2. Правило трех ударов     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Подрывная деятельность? Не думаю. Разработчики программного обеспечения - профессионалы. Наша работа состоит в том, чтобы создавать эффективные программы как можно быстрее. По моему опыту, рефакторинг значительно способствует быстрому созданию приложений. Если мне надо добавить новую функцию, а проект плохо согласуется с модификацией, то быстрее сначала изменить его структуру, а потом добавлять новую функцию. Если требуется исправить ошибку, то необходимо сначала понять, как работает программа, и я считаю, что быстрее всего можно сделать это с помощью рефакторинга. Руководитель, подгоняемый графиком работ, хочет, чтобы я сделал свою работу как можно быстрее; как мне это удастся - мое дело. Самый быстрый путь - рефакторинг, поэтому я и буду им заниматься.      &lt;br /&gt;&lt;/em&gt;Глава 2. Как объяснить это своему руководителю?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Вычислительная техника - это дисциплина, в которой считается, что все проблемы можно решить благодаря введению одного или нескольких уровней косвенности.      &lt;br /&gt;&lt;/em&gt;Деннис Де Брюле     &lt;br /&gt;Глава 2. Косвенность и рефакторинг     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;В некоторых случаях рефакторинг вообще не нужен. Основной пример - необходимость переписать программу с нуля. Иногда имеющийся код настолько запутан, что подвергнуть его рефакторингу, конечно, можно, но проще начать все с самого начала.      &lt;br /&gt;&lt;/em&gt;Глава 2. Когда рефакторинг не нужен?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;С применением рефакторинга акценты смещаются. Предварительное проектирование сохраняется, но теперь оно не имеет целью найти единственно правильное решение. Все, что от него требуется, - это найти приемлемое решение. По мере реализации решения, с углублением понимания задачи становится ясно, что наилучшее решение отличается от того, которое было принято первоначально. Но в этом нет ничего страшного, если в процессе участвует рефакторинг, потому что модификация не обходится слишком дорого.      &lt;br /&gt;&lt;/em&gt;Глава 2. Проектирование и рефакторинг     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Рефакторинг позволяет создавать более простые проекты, не жертвуя гибкостью, благодаря чему процесс проектирования становится более легким и менее напряженным. Научившись в целом распознавать то, что легко поддается рефакторингу, о гибкости решений даже перестаешь задумываться. Появляется уверенность в возможности применения рефакторинга, когда это понадобится. Создаются самые простые решения, которые могут работать, а гибкие и сложные решения по большей части не потребуются.      &lt;br /&gt;&lt;/em&gt;Глава 2. Проектирование и рефакторинг     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Секрет создания быстрых программ, если только они не предназначены для работы в жестком режиме реального времени, состоит в том, чтобы сначала написать программу, которую можно настраивать, а затем настроить ее так, чтобы достичь приемлемой скорости.      &lt;br /&gt;&lt;/em&gt;Глава 2. Рефакторинг и производительность     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Хорошее разделение программы на компоненты способствует оптимизации такого рода в двух отношениях. Во-первых, благодаря ему появляется время, которое можно потратить на оптимизацию. Имея хорошо структурированный код, можно быстрее добавлять новые функции и выиграть время для того, заняться производительностью. (Профилирование гарантирует, что это время не будет потрачено зря.) Во-вторых, хорошо структурированная программа обеспечивает более высокое разрешение для анализа производительности. Профайлер указывает на более мелкие фрагменты кода, которые легче настроить. Благодаря большей понятности кода лекче осуществить выбор возможных вариантов и разобраться в том, какого рода настройка может оказаться действенной.      &lt;br /&gt;&lt;/em&gt;Глава 2. Рефакторинг и производительность&lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;  &lt;p&gt;Все цитаты из книги Мартина Фаулера “Рефакторинг. Улучшение существующего кода”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/1.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2010/01/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1951621590091947844?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1951621590091947844/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1951621590091947844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1951621590091947844'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2010/01/1.html' title='Рефакторинг. Улучшение существующего кода. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/S0GiSv0QA4I/AAAAAAAAAJw/hwWQ2fGsjfE/s72-c/Refactoring_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5791210420229505212</id><published>2009-12-25T14:07:00.001-08:00</published><updated>2009-12-26T00:31:05.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Том Демарко'/><title type='text'>Deadline. Роман об управлении проектами. Часть 2</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/SzU3ildn9iI/AAAAAAAAAJk/_0Q-8U8-90E/s1600-h/Deadline3.jpg"&gt;&lt;img title="Deadline" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="244" alt="Deadline" src="http://lh5.ggpht.com/_paoZJwM8MDs/SzU3jBpnn8I/AAAAAAAAAJo/NGfEr9q43no/Deadline_thumb1.jpg?imgmax=800" width="168" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;В этом сообщении я опубликую фрагменты диалогов и другие интересные цитаты из замечательной книги Тома Демарко “Deadline. Роман об управлении проектами”.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;- Некоторые думать вообще не умеют. Такие люди обычно становятся директорами крупных компаний, вроде этой.      &lt;br /&gt;&lt;/em&gt;Лакса Хулигэн в разговоре с мистером Томпкинсом     &lt;br /&gt;Глава 1. Широчайшие возможности&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;- Найдите правильных людей. Потом, что бы вы ни делали, какие бы ошибки ни допускали, люди вытащат вас из любой передряги. В этом и заключается работа руководителя.      &lt;br /&gt;&lt;/em&gt;Томпкинс о роли руководителя     &lt;br /&gt;Глава 1. Широчайшие возможности&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Он и раньше сталкивался с идиотскими и губительными для команды «наказаниями за отставание от графика», и сегодняшний разговор разбередил в нем эти воспоминания. Откуда у некоторых руководителей эта слепая вера в кнуты и штрафы? Неужели из них получаются такие же ужасные родители? Скорее всего, да.      &lt;br /&gt;&lt;/em&gt;Мысли мистер Томпкинса о пользе наказания     &lt;br /&gt;Глава 4. Завод по изготовлению CD-ROM&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;— Если вдуматься, для руководства проектом голова вообще не больно-то нужна. Больше всего нужны нутро, сердце и душа.      &lt;br /&gt;— Нутро, сердце и душа?       &lt;br /&gt;— Да. Настоящий руководитель чувствует ситуацию нутром, управляет людьми исключительно сердцем и может вдохнуть живую душу в проект, команду или всю организацию.       &lt;br /&gt;&lt;/em&gt;Диалог Белинды Бинды и мистера Томпкинса о роли руководителя     &lt;br /&gt;Глава 6. Лучший в мире руководитель&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Душа команды - это как песчинка в ракушке, вокруг которой начинает нарастать самое ценное. Сообщество.      &lt;br /&gt;&lt;/em&gt;Белинда Бинда о душе команды     &lt;br /&gt;Глава 6. Лучший в мире руководитель&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;- Давайте знакомиться с людьми, а не с их резюме.      &lt;br /&gt;&lt;/em&gt;Белинда о подборе персонала     &lt;br /&gt;Глава 7. Подбор персонала&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;— Мы ищем таких руководителей, которые настолько хорошо подходят для своей работы, что могут менять мир вокруг себя и добиваться гармонии между этим миром и тем, что они делают вместе со своей командой.      &lt;br /&gt;&lt;/em&gt;Белинда о подборе руководителей     &lt;br /&gt;Глава 7. Подбор персонала&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;— Иногда бывает трудно смотреть в глаза своему начальнику и говорить, что не сможешь сделать работу вовремя. Куда проще взять и опоздать. Но тогда твой босс узнает об опоздании на четыре недели позже, и у него просто не останется возможности хоть как-то исправить ситуацию. Именно поэтому мы выработали такую вот полуанонимную систему. Конечно же, я знаю, кто сейчас приходил на «исповедь», но делаю вид, что он мне не знаком. А в результате всегда узнаю плохие новости вовремя.      &lt;br /&gt;&lt;/em&gt;Молли Макмора об общении разработчиков с их руководителями     &lt;br /&gt;Глава 7. Подбор персонала&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В этом и заключается наша работа — находить для своих подчиненных такую должность, на которой проявятся все их скрытые способности. А в чем еще заключается руководство, если не в этом?      &lt;br /&gt;&lt;/em&gt;Белинда о роли руководителя     &lt;br /&gt;Глава 12. Человек, который умел считать&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;— Да ладно вам, — вмешался Аристотель. — Как будто вы раньше этого не знали. Наверняка в глубине души каждый из нас знает, что сверхурочная работа — верный способ снизить производительность.      &lt;br /&gt;— Да, в общем-то, это так, — задумчиво сказала Белинда. — Недостатки сверхурочной работы хорошо всем известны: усталость, отсутствие творческой энергии, ошибки…       &lt;br /&gt;— А также потеря времени в течение обычного рабочего дня, — добавил Аристотель.       &lt;br /&gt;— А это почему?       &lt;br /&gt;— Потому что люди знают, что все равно будут работать допоздна. Поэтому они могут позволить себе долгие и не очень нужные совещания, перерывы и тому подобное.       &lt;br /&gt;— Да уж точно. А если запретить работать сверхурочно, то им волей-неволей придется использовать рабочее время более эффективно.       &lt;br /&gt;— Именно.       &lt;br /&gt;— Значит, в список недостатков сверхурочной работы можно добавить еще и это. А те данные, которые привел нам Вальдо, ясно показывают: недостатки сверхурочной работы все равно перевешивают пользу от дополнительных усилий разработчиков. Как правильно сказал Аристотель, все мы в глубине души знаем       &lt;br /&gt;это.       &lt;br /&gt;— Так что же делать руководителю в трудной ситуации? — взволнованно спросил мистер Томпкинс.       &lt;br /&gt;— Что-то другое, — ответила ему Белинда. — Что-то более сложное: принимать на работу новых сотрудников, придумывать способы мотивации персонала, развивать командные отношения и поддерживать боевой дух, привлекать к проекту грамотных людей, устранять из процесса разработки все малоэффективные действия, реже устраивать совещания, не давать людям Том ДеМарко: «Deadline. Роман об управлении проектами» 121       &lt;br /&gt;работать сверхурочно, сократить работу над документацией. Однако мистера Томпкинса это ничуть не успокоило.       &lt;br /&gt;&lt;/em&gt;Диалог Аристотеля, Томпкинса и Белинды о вреде сверхурочных     &lt;br /&gt;Глава 15. Думать быстрее!&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Не мне объяснять тебе, что когда разработчики не чувствуют поддержки и признания начальства, они редко создают сильные сплоченные команды.      &lt;br /&gt;&lt;/em&gt;Мелисса Альбер о кристаллизации команд     &lt;br /&gt;Глава 16. План работы по подготовке к летним Олимпийским играм&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Я считаю, что в каждом из нас, в душе или на уровне подсознания, живет тайный страх: мы боимся показать, что соображаем хуже других. Вся наша раса заражена этим страхом. Каждый готов предположить, что его мыслительные способности ниже средних, поэтому ему надо прикладывать дополнительные усилия, чтобы разобраться в том, в чем другие разбираются с ходу. А теперь возьмем нашу ужасную спецификацию. Ты читаешь ее целый день и обнаруживаешь, что ничего не понимаешь. И тут приходит начальник и спрашивает: «Ну как? Как вам спецификация?» Что сказать? И мы врем! «Все в порядке, босс. То есть я хочу сказать, что документ этот весьма непростой, но дайте нам еще немного времени, и мы во всем разберемся…» И так поступает каждый!&lt;/em&gt;     &lt;br /&gt;Белинда о корпоративном мышлении и отношению к руководству     &lt;br /&gt;Глава 16. План работы по подготовке к летним Олимпийским играм&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Кстати, у меня есть твердое убеждение: любую сложную вещь можно описать простыми словами. Если нам это не удается, значит, нужно либо развивать в себе способность четко излагать мысли, либо учиться решать конфликты.      &lt;br /&gt;&lt;/em&gt;Белинда о спецификациях     &lt;br /&gt;Глава 16. План работы по подготовке к летним Олимпийским играм&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;Дорога к мудрости проста,        &lt;br /&gt;Как этот краткий стих:         &lt;br /&gt;Ошибки смело совершай -         &lt;br /&gt;И станет меньше их.         &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Пит Хайн     &lt;br /&gt;Глава 18. Маэстро Диеньяр &lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Все цитаты из книги Тома Демарко “Deadline. Роман об управлении проектами”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/deadline-1.html"&gt;Часть 1. Из записной книжки мистера Томпкинса&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/deadline-2.html"&gt;Часть 2. Остальные цитаты&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5791210420229505212?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5791210420229505212/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/deadline-2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5791210420229505212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5791210420229505212'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/deadline-2.html' title='Deadline. Роман об управлении проектами. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_paoZJwM8MDs/SzU3jBpnn8I/AAAAAAAAAJo/NGfEr9q43no/s72-c/Deadline_thumb1.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6540346962952999846</id><published>2009-12-25T11:36:00.001-08:00</published><updated>2009-12-26T00:27:35.123-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Том Демарко'/><title type='text'>Deadline. Часть 1. Из записной книжки мистера Томпкинса</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_paoZJwM8MDs/SzUUQqFrfhI/AAAAAAAAAJc/AZyEOtlOgBM/s1600-h/Deadline%5B3%5D.jpg"&gt;&lt;img title="Deadline" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="244" alt="Deadline" src="http://lh4.ggpht.com/_paoZJwM8MDs/SzUURi6c7WI/AAAAAAAAAJg/g5FEbBq4dlQ/Deadline_thumb%5B1%5D.jpg?imgmax=800" width="168" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Немногие знают, что помимо книг по управлению проектами и структурному анализу Том Демарко написал сборник рассказов под названием “Lieutenant America and Miss Apple Pie” и повесть “Dark Harbor House”.&lt;/p&gt;  &lt;p align="justify"&gt;Помимо компьютерных книг и художественной литературы у Тома Демарко есть и промежуточный вариант - “Deadline. Роман об управлении проектами”, в котором автор рассказывает историю мистера Томпкинса, менеджера проектами, который сталкивается с типичными проблемами управления программными проектами. &lt;/p&gt;  &lt;p align="justify"&gt;Во многом, темы этой книги пересекаются с темами из ставшей давно классической книги Демарко и Листера “Peopleware”. И хотя “Peopleware” написана замечательным языком и сама читается как художественное произведение, Демарко решил, что этого недостаточно и решил описать проблемы управления в виде настоящего романа.&lt;/p&gt;  &lt;p align="justify"&gt;Цитаты из этой книги я разбил на два сообщения, в этом сообщении я опубликую записи, который делал мистер Томпкинс в своей записной книжке, а отдельным сообщением я опубликую другие интересные цитаты.&lt;/p&gt;  &lt;p align="justify"&gt;Итак, перед вами целиком записная книжка мистера Томпкинса.&lt;/p&gt;  &lt;h5&gt;Глава 4. Четыре основных правила менеджмента&lt;/h5&gt;  &lt;p align="justify"&gt;&lt;em&gt;1. Найти нужных людей.      &lt;br /&gt;2. Дать им ту работу, для которой они лучше всего подходят.       &lt;br /&gt;3. Не забывать о мотивации.       &lt;br /&gt;4. Помогать им сплотиться в одну команду и работать так дальше.       &lt;br /&gt;&lt;strong&gt;(Все остальное - административная ерундистика.)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 4. Безопасность и перемены&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Если человек не чувствует, что находится в безопасности, он будет противиться переменам.      &lt;br /&gt;2. Перемены необходимы руководителю для успешной работы (наверняка они необходимы и в любой другой деятельности).       &lt;br /&gt;3. Неуверенность заставляет человека избегать риска.       &lt;br /&gt;4. Избегая риска, человек упускает все новые возможности и выгоды, которые могли бы принести ему перемены.       &lt;br /&gt;5. Человека легко запугать прямыми угрозами, но также можно просто дать ему понять, что при случае с ним могут обойтись грубо и жестоко. Эффект будет таким же.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 5. Отрицательная мотивация&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Угрозы — самый неподходящий вид мотивации, если вас волнует производительность сотрудников.      &lt;br /&gt;2. Чем бы вы ни угрожали, задача все равно не будет выполнена, если с самого начала вы отвели на ее выполнение слишком мало времени.       &lt;br /&gt;3. Более того, если люди не справятся, вам придется выполнить свои обещания.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 6. Части тела, необходимые для управления проектами&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Для руководства нужны сердце, нутро, душа и нюх.      &lt;br /&gt;2. Так что:       &lt;br /&gt;• руководить надо сердцем;       &lt;br /&gt;• чувствовать нутром;       &lt;br /&gt;• вкладывать в команду и проект душу;       &lt;br /&gt;• иметь нюх на всякую ерунду и бессмыслицу.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 8. Повышение производительности&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Не существует никаких краткосрочных мер, которые позволили бы быстро повысить производительность роботы.      &lt;br /&gt;2. Повышение производительности — результат долгосрочных усилий.       &lt;br /&gt;3. Любые средства для повышения производительности, которые обещают немедленный результат, на самом деле не что иное, как «птичье молоко»&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 8. Управление рисками&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Чтобы управлять проектом, достаточно управлять его рисками.      &lt;br /&gt;2. Создайте список рисков для каждого проекта.       &lt;br /&gt;3. Отслеживайте те риски, которые являются причиной провала проекта, а не только конечные риски.       &lt;br /&gt;4. Оцените вероятность возникновения и стоимость каждого риска.       &lt;br /&gt;5. Для каждого риска определите показатель — симптом, по которому можно определить, что риск превращается в проблему.       &lt;br /&gt;6. Назначьте специального человека для управления рисками, и пусть он не поддерживает девиз «Мы можем все!», который культивирует начальство.       &lt;br /&gt;7. Создайте доступные (возможно, анонимные) каналы для сообщения плохих новостей руководству.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 9. Играй в защите&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Сокращайте потери.      &lt;br /&gt;2. Успех проекта можно скорее обеспечить сокращением ненужных усилий, чем стремлением к новым победам.       &lt;br /&gt;3. Чем раньше вы прекратите ненужную работу, тем лучше для всего проекта.       &lt;br /&gt;4. Не пытайтесь создавать новые команды без необходимости; поищите в коллективе уже сложившиеся и сработавшиеся команды.       &lt;br /&gt;5. Оставляйте команды работать вместе и после окончания проекта (если они сами того хотят), чтобы у пришедших вам на смену руководителей было меньше проблем с плохо срабатывающимися командами.       &lt;br /&gt;6. Считайте, что команда, которая хочет продолжать работать вместе и дальше, — это одна из основных целей любого проекта.       &lt;br /&gt;7. День, который мы теряем в начале проекта, значит так же много, как и день, потерянный в конце.       &lt;br /&gt;8. Есть тысяча и один способ потратить день зря и ни одного, чтобы вернуть этот день обратно.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 12. Сбор метрических данных&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Определяйте размер каждого проекта.      &lt;br /&gt;2. Не усердствуйте поначалу с выбором единицы измерения — если впоследствии вам предстоит работать с реальными данными, для начала сойдут и абстрактные единицы.       &lt;br /&gt;3. Стройте сложные метрики на основе простых (тех, которые легко подсчитать в любом программном продукте).       &lt;br /&gt;4. Собирайте архивные данные, чтобы считать производительность труда по уже законченным проектам.       &lt;br /&gt;5. Работайте над формулами вычисления сложных синтетических метрик до тех пор, пока полученные результаты не будут наиболее точно отражать отношение абстрактных единиц к указанному в архивных данных объему работ.       &lt;br /&gt;6. Проведите через всю архивную базу данных линию тренда, которая будет показывать ожидаемый объем работ в виде отношения значений сложных синтетических метрик.       &lt;br /&gt;7. Теперь для каждого нового проекта достаточно будет высчитать значение синтетической метрики и использовать ее при определении ожидаемого объема работ.       &lt;br /&gt;8. Не забывайте об «уровне помех» на линии производительности и используйте его, как индикатор при определении допустимых отклонений от общей траектории.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 15. Что дает давление сверху&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Люди не начнут быстрее соображать, если руководство будет давить на них.      &lt;br /&gt;2. Чем больше сверхурочной работы, тем ниже производительность.       &lt;br /&gt;3. Немного давления и сверхурочной работы могут помочь сконцентрироваться на проблеме, понять и почувствовать ее важность, но длительное давление всегда плохо.       &lt;br /&gt;4. Возможно, руководство так любит применять давление, потому что просто не знает, как еще можно повлиять на ситуацию, или же потому, что альтернативные решения кажутся им слишком       &lt;br /&gt;сложными.       &lt;br /&gt;5. Ужасная догадка: давление и сверхурочная работа призваны решить только одну проблему — сохранить хорошую мину при плохой игре.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 16. Сердитый начальник&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Злость и неуважение заразительны. Когда высшее руководство демонстрирует злость и неуважение к подчиненным, руководители среднего звена начинают копировать их поведение. Точно так же дети, которых наказывали в детстве, часто впоследствии становятся жестокими родителями.      &lt;br /&gt;2. Неуважение и злоба, по мнению некоторых начальников, должны заставить подчиненных лучше работать. Это типичная политика «кнута и пряника». Но разве когда-нибудь неуважение со стороны начальства приводило к тому, что люди начинали лучше работать?       &lt;br /&gt;3. Если начальник демонстрирует неуважение к подчиненным, это признак того, что он не может больше занимать свою должность (а вовсе не признак того, что у него плохие подчиненные).&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 16. Туманные спецификации&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Неясность спецификации говорит о том, что между участниками проекта есть неразрешенные конфликты.      &lt;br /&gt;2. Спецификация, в которой нет списка типов входящей и исходящей информации, не должна даже приниматься к       &lt;br /&gt;рассмотрению. Это значит, что она попросту ничего не специфицирует.       &lt;br /&gt;3. Никто никогда не скажет вам, что спецификация плоха. Люди скорее будут обвинять себя в неспособности понять написанное, чем ругать авторов спецификации.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 17. Конфликт&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Проект, в котором участвуют несколько сторон, обязательно столкнется с конфликтом интересов.      &lt;br /&gt;2. Процесс создания и распространения программных систем — прямо-таки рассадник всевозможных конфликтов.       &lt;br /&gt;3. В большинстве компаний, где создается программное обеспечение, никто специально не занимается вопросом решения конфликтов.       &lt;br /&gt;4. Конфликт заслуживает понимания и уважительного отношения. Конфликт не имеет ничего общего с       &lt;br /&gt;непрофессиональным поведением.       &lt;br /&gt;5. Донесите до каждого, что постараетесь учитывать интересы всех участников, и проследите, чтобы так оно и было.       &lt;br /&gt;6. Тяжело договариваться. Гораздо легче выступать посредником.       &lt;br /&gt;7. Объявите заранее, что если интересы конфликтующих сторон полностью или частично противоположны, то поиск решения будет переложен на посредника.       &lt;br /&gt;8. Не забывайте: мы находимся по одну сторону баррикад. По другую сторону находится сама проблема.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 18. Кто такой катализатор проекта&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Существуют люди-катализаторы. Они помогают создать здоровую команду, отношения, боевой дух. Даже если бы они больше ничего не делали (а как правило, они делают куда как много), их роль в проекте остается одной из наиболее важных.      &lt;br /&gt;2. Посредничество — еще одна сфера, в которой люди-катализаторы просто незаменимы. Впрочем, посредничеству можно научиться, это не очень сложно.       &lt;br /&gt;3. Первым шагом к посредничеству должна быть маленькая церемония. Например, можно произнести фразу: «Вы позволите мне попробовать помочь вам решить этот спор?»&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 18. Человеку свойственно ошибаться&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Нам кажется, что самое страшное — не знать чего-то. На самом деле гораздо хуже быть уверенным, что знаешь, когда на самом деле это не так.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 19. О персонале&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Если в самом начале проект делает большая команда, это снижает эффективность самой ответственной части работы — определения архитектуры системы (потому что всем разработчиком надо скорее дать какую-то работу).      &lt;br /&gt;2. Если работу раздать людям и командам еще до того, как завершится стадия дизайна продукта, не получится создать простые и эффективные модели взаимодействия между людьми и рабочими группами.       &lt;br /&gt;3. Это приведет к потере независимости, увеличению числа собраний и совещаний, общему недовольству.       &lt;br /&gt;4. В идеале было бы хорошо сначала набрать маленькую команду, которая создала бы продуманную архитектуру системы, а уже потом, на последнюю, шестую часть времени разработки в эту команду можно было бы добавить новый персонал (который работал бы непосредственно над кодированием).       &lt;br /&gt;5. Ужасное предположение: кажется, те команды, перед которыми не ставят жестких сроков, заканчивают работу быстрее!&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 20. Проблемы социологии&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Собрания должны быть небольшими. Для этого нужно сделать так, чтобы люди не боялись пропускать ненужные им собрания. Самый простой способ — заранее опубликовать повестку дня, а потом всегда строго ее придерживаться.      &lt;br /&gt;2. Каждому проекту нужна какая-то церемония или ритуал.       &lt;br /&gt;3. С помощью церемоний можно концентрировать внимание собравшихся на основных целях и задачах совещания: сократить состав рабочей группы, повысить качество программного кода и т.п.       &lt;br /&gt;4. Защищайте людей от оскорблений и ругани Начальства.       &lt;br /&gt;5. Запомните: в работе страх = гнев. Те руководители, которые любят кричать на своих подчиненных и всячески унижают и оскорбляют их, на самом деле просто чего-то очень боятся.       &lt;br /&gt;6. Наблюдение: если бы для всех проявление грубости и злости к подчиненным всегда значило бы, что начальник просто боится, то никто из начальников не стал бы так себя вести просто из страха, что его страх станет заметен! (Это, конечно, не решает проблем такого руководителя, но, по крайней мере, оберегает его подчиненных.)&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 21. О патологической политике (еще раз)&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Эту патологию невозможно вылечить снизу.      &lt;br /&gt;2. Не стоит терять время или подвергать себя опасности, чтобы проверить предыдущий постулат на собственном опыте.       &lt;br /&gt;3. Иногда единственным выходом из ситуации становится выжидание. Попробуйте подождать, пока проблема не разрешится сама по себе или пока вы не найдете способ уйти от нее в сторону.       &lt;br /&gt;4. Чудеса, конечно, случаются, но лучше все же на них не рассчитывать.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 22. Злоба и скупость&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. Злоба и скупость — вот формула, которую начинают применять в плохих компаниях те, кто несет ответственность за неудачи в бизнесе.      &lt;br /&gt;2. Злоба и скупость прямо противоположны истинным целям любой хорошей компании — быть щедрыми и заботливыми по отношении к своим сотрудникам.       &lt;br /&gt;3. Когда вы подмечаете в компании проявления злобы и скупости, знайте, их настоящая причина — страх и боязнь провала.&lt;/em&gt;&lt;/p&gt;  &lt;h5 align="justify"&gt;Глава 23. Основы здравого смысла&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;1. У проекта должно быть два срока сдачи — запланированный и желаемый.      &lt;br /&gt;2. Эти сроки должны быть разными.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Все цитаты из книги Тома Демарко “Deadline. Роман об управлении проектами”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/deadline-1.html"&gt;Часть 1. Из записной книжки мистера Томпкинса&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/deadline-2.html"&gt;Часть 2. Остальные цитаты&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6540346962952999846?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6540346962952999846/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/deadline-1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6540346962952999846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6540346962952999846'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/deadline-1.html' title='Deadline. Часть 1. Из записной книжки мистера Томпкинса'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/SzUURi6c7WI/AAAAAAAAAJg/g5FEbBq4dlQ/s72-c/Deadline_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3830343084368446017</id><published>2009-12-21T12:56:00.001-08:00</published><updated>2009-12-21T12:56:11.399-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Роберт Гласс'/><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Роберт Гласс. Факты и заблуждения профессионального программирования</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/Sy_g5zxWqSI/AAAAAAAAAJU/e7BIcOXc270/s1600-h/Facts_and_Fallacies%5B5%5D.jpg"&gt;&lt;img title="Facts_and_Fallacies" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="244" alt="Facts_and_Fallacies" src="http://lh3.ggpht.com/_paoZJwM8MDs/Sy_g6ZHOhBI/AAAAAAAAAJY/QXtth5tbU3M/Facts_and_Fallacies_thumb%5B3%5D.jpg?imgmax=800" width="193" align="left" border="0" /&gt;&lt;/a&gt;Совсем недавно я дочитал книгу Роберта Гласса “Факты и&amp;#160;&amp;#160; заблуждения профессионального программирования”. В целом, книга понравилась, интересное и качественное произведение. Мое развернутое мнение можно почитать на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/12/blog-post_21.html"&gt;моем блоге&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Ну а здесь, как не сложно догадаться, понравившиеся цитаты.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В книгах о менеджменте (которые я читал), говорится, что на 95% он (менеджмент) состоит из здравого смысла и на 5% - из советов не первой свежести, перекочевавших из прошлого десятилетия.     &lt;br /&gt;&lt;/em&gt;Глава 1. О менеджменте&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Успех или провал проекта в первую очередь зависит от того, &lt;strong&gt;кто&lt;/strong&gt; выполняет работу, а не от того, &lt;strong&gt;как&lt;/strong&gt; она выполняется.      &lt;br /&gt;&lt;/em&gt;Глава 1. О менеджменте&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В создании ПО важен человеческий фактор. ... Свою роль играют инструментальные средства. Важны и методы. И процессы. Но роль людей намного более значима.     &lt;br /&gt;&lt;/em&gt;Факт №1. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разработка ПО - это интенсивная умственная деятельность, и среда, в которой она проходит, должна способствовать мышлению. Теснота и вызванные ею помехи в работе (намеренные или нет) сказываются на результатах весьма пагубно.     &lt;br /&gt;&lt;/em&gt;Факт №4. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В нашей современной культуре принято во что бы то ни стало укладываться в сроки (невозможные), жертвуя ради этого завершенностью и качеством.     &lt;br /&gt;&lt;/em&gt;Факт №12. Источник&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Управление, сосредоточенное на контроле, не обязательно делает проект лучшим или даже более производительным.     &lt;br /&gt;&lt;/em&gt;Факт №13. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Если код программной системы предстоит модифицировать на 20-25% или больше, то проще и дешевле начать все заново и создать новый продукт. Этот порог низок (на самом деле он удивительно низок).     &lt;br /&gt;&lt;/em&gt;Факт №19. Источники&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Некоторые исследователи говорят, что переизбыток паттернов (попытка применить их в тех программах, для которых они не подходят) может привести к появлению &amp;quot;непонятного ...кода, ...декораций на фасадах, построенных фабричным способом&amp;quot;.     &lt;br /&gt;&lt;/em&gt;Факт №20. Полемика&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Каждые 25% увеличения сложности задачи обусловливают 100% увеличения сложности программного решения. И еще запомните, что против этого нет никакого противоядия. Программные решения сложны, поскольку такова их природа.     &lt;br /&gt;&lt;/em&gt;Факт 21. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Чаще всего проекты, выходящие из-под контроля, на самом деле никогда и не были управляемыми.     &lt;br /&gt;&lt;/em&gt;Факт 23. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Если в комнате сидят несколько классных проектировщиков ПО и двое из них согласны друг с другом, то они образуют большинство.     &lt;br /&gt;&lt;/em&gt;Факт 27. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В целом считается, что переход от проектирования к кодированию проходит гладко. И зачастую это так и есть - до тех пор, пока код пишет тот же человек, который проектировал приложение.     &lt;br /&gt;&lt;/em&gt;Факт 29. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Обычно от проектировщика ожидают, что он спустится на тот уровень, где единицы кодирования представляют собой так называемые примитивы - фундаментальные программные единицы, которые хорошо известны и легко программируются. Это звучит очень просто. Но на самом деле это упрощенный взгляд. Трудности обусловлены тем, что у разных людей разные наборы примитивов. Что является фундаментальной программной единицей для одного, может не быть таковой для другого.     &lt;br /&gt;&lt;/em&gt;Факт 29. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Полное покрытие структурным тестированием гарантирует обнаружение лишь 25% ошибок в программном продукте.     &lt;br /&gt;&lt;/em&gt;Факт 33. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Закон Линуса: все ошибки становятся заметными, если на них обращено достаточно много глаз - with enough eyeballs, all bugs are shallow.     &lt;br /&gt;&lt;/em&gt;Факт 34. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Процесс отладки - это детективный жанр программирования. Преследуя неуловимую программную ошибку, вы перевоплощаетесь в Шерлока Холмса. И подобно Шерлоку Холмсу, вы должны призвать на помощь свой интеллект и любые поддерживающие его и доступные вам средства.     &lt;br /&gt;&lt;/em&gt;Факт 36. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Самое трудное в сопровождении ПО - это понять, как работает уже имеющийся продукт.     &lt;br /&gt;&lt;/em&gt;Факт 44. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;О качестве (ПО) мы говорим так: &amp;quot;Когда я его увижу, я пойму, что это оно&amp;quot;.     &lt;br /&gt;&lt;/em&gt;Глава 3. О качестве&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Такое ощущение, что придумывание лозунгов (&amp;quot;Качество - задача номер один!&amp;quot;) и методологий (&amp;quot;Тотальное управление качеством&amp;quot;) есть главное средство руководителей в деле обеспечения качества программного продукта. Все это чуждо техническим специалистам и настраивает их враждебно. Не помогает делу и то, что в роли главного врага качества в большинстве программных проектов выступают сроки. Одной рукой менеджмент мотивирует и внедряет методики, а другой - держит сроки, под давлением которых и гибнет качество. Нельзя, как говорится, &lt;strong&gt;&amp;quot;и на елку забраться, и ничего себе не расцарапать&lt;/strong&gt;&amp;quot;. А большинство технарей достаточно умны, чтобы понимать это.      &lt;br /&gt;&lt;/em&gt;Заблуждение 2. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Человеку свойственно предсказывать будущее, опираясь на опыт прошлого. В конце концов, нельзя точно предсказать будущее, глядя в него же. Поэтому мы исходим из предположения, что вероятные события будущего будут похожи на те события, которые уже произошли. Иногда это предположение оправдывается. На самом деле довольно часто. Но иногда оно не оправдывается совершенно.     &lt;br /&gt;&lt;/em&gt;Заблуждение 9. Обсуждение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Реальность - это убийство прекрасной теории бандой мерзких фактов.       &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Выводы&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3830343084368446017?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3830343084368446017/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_21.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3830343084368446017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3830343084368446017'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_21.html' title='Роберт Гласс. Факты и заблуждения профессионального программирования'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_paoZJwM8MDs/Sy_g6ZHOhBI/AAAAAAAAAJY/QXtth5tbU3M/s72-c/Facts_and_Fallacies_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5192141560381529547</id><published>2009-12-17T03:04:00.001-08:00</published><updated>2009-12-17T05:33:29.953-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Стив Макконнелл'/><title type='text'>Остаться в живых. Часть 2</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/SyoQPfAZsFI/AAAAAAAAAIU/6ylqiYRreKM/s1600-h/Survival_Guide%5B3%5D.jpg"&gt;&lt;img title="Survival_Guide" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="244" alt="Survival_Guide" src="http://lh6.ggpht.com/_paoZJwM8MDs/SyoQQahieNI/AAAAAAAAAIY/D5OiPmoeeSA/Survival_Guide_thumb%5B1%5D.jpg?imgmax=800" width="169" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Продолжение цитат из книги Стива Макконнелла &amp;quot;Остаться в живых! Руководство для менеджера программных проектов&amp;quot;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Успешный программный проект не содержит секретов. Как хорошие, так и плохие новости должны распространяться вверх и вниз по иерархии проекта без ограничений.&lt;/em&gt;     &lt;br /&gt;Глава 7. Общедоступность индикаторов развития&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Лучше подождать, пока продуктивный программист не станет доступным, чем ждать, пока первый доступный программист не станет продуктивным&lt;/em&gt;     &lt;br /&gt;Глава 7. Новые разработчики: доступные и хорошие&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разработка и обеспечение качества не должны выполняться одними и теми же людьми. Ответственный за обеспечение качества играет роль &amp;quot;адвоката дьявола&amp;quot;, которую трудно или невозможно совместить с деятельностью разработчиков.&lt;/em&gt;     &lt;br /&gt;Глава 7. Организация команды проекта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Используя лишь самых продуктивных разработчиков, руководители проекта способны свести их с ума постоянными отвлечениями от основной работы, существенно замедляющими развитие проекта.&lt;/em&gt;     &lt;br /&gt;Глава 7. &amp;quot;Команды тигров&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Самой трудной частью сбора требований является не запись пожеланий пользователей, а исследовательская деятельность, направленная на помощь пользователям в определении своих пожеланий.&lt;/em&gt;     &lt;br /&gt;Глава 8. Разработка требований&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Объясните пользователям, что прототип - это &amp;quot;не более чем прототип&amp;quot;. Один из рисков, связанных с созданием прототипа пользовательского интерфейса, состоит в появлении нереалистичных ожиданий пользователей по поводу будущего развития проекта.&lt;/em&gt;     &lt;br /&gt;Глава 8. Создание простого прототипа пользовательского интерфейса&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Качество - это степень удовлетворения программным продуктом требований, как утвержденных официально, так и подразумеваемых.&lt;/em&gt;     &lt;br /&gt;Глава 9. Обеспечение качества&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Для высококачественного программного продукта число тестировщиков должно равняться числу разработчиков.&lt;/em&gt;     &lt;br /&gt;Глава 9. Тестирование системы&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Тестирование представляет собой способ определения уровня качества программного продукта, а не способ его обеспечения.&lt;/em&gt;     &lt;br /&gt;Глава 9. Тестирование системы&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Поскольку целью архитектуры является упрощение программного продукта, архитектор должен сконцентрировать свое внимание на том, что можно исключить из продукта, а не на том, что можно включить в него.&lt;/em&gt;     &lt;br /&gt;Глава 10. Подсистемы и организация&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В погоне за лучшим вы рискуете остаться ни с чем. Придерживайтесь минимализма, простоты, удовлетворяйте все требования и не пытайтесь найти единственное идеальное решение.&lt;/em&gt;     &lt;br /&gt;Глава 9. Определение готовности архитектуры&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Лучше работать разумно и много, чем неразумно много!        &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Глава 12. Если микровеховый план не выполняется&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В зависимости от длительности и предметной области проекта, период после выпуска - хорошее время для того, чтобы предложить команде ланч, предоставить дополнительный выходной или вовсе отправить ее в оплачиваемый отпуск на Гавайи. Ну а на досуге следует сделать выводы из накопленного опыта и заложить основу для будущего успеха.&lt;/em&gt;     &lt;br /&gt;Глава 18. Хронология проекта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;Поощрение команды никогда не приведет к провалу, а ее угнетение - к успеху.&lt;/strong&gt;&lt;/em&gt;     &lt;br /&gt;Глава 19. Желательные действия&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты книги Стива Макконнелла &amp;quot;Остаться в живых! Руководство для менеджера программных проектов&amp;quot;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_17.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5192141560381529547?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5192141560381529547/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5192141560381529547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5192141560381529547'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_17.html' title='Остаться в живых. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_paoZJwM8MDs/SyoQQahieNI/AAAAAAAAAIY/D5OiPmoeeSA/s72-c/Survival_Guide_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6156606674567766053</id><published>2009-12-17T02:58:00.001-08:00</published><updated>2009-12-17T05:30:56.492-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Стив Макконнелл'/><title type='text'>Остаться в живых! Часть 1</title><content type='html'>&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_paoZJwM8MDs/SyoO5PrBUwI/AAAAAAAAAIE/JHVdlnXbDH4/s1600-h/Survival_Guide%5B3%5D.jpg"&gt;&lt;img title="Survival_Guide" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="244" alt="Survival_Guide" src="http://lh4.ggpht.com/_paoZJwM8MDs/SyoO6AlNohI/AAAAAAAAAII/6VY_YSG_4TE/Survival_Guide_thumb%5B1%5D.jpg?imgmax=800" width="169" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Сегодня я решил опубликовать цитаты из книги Стива Макконнелла &amp;quot;&amp;quot;Остаться в живых! Руководство для менеджера программных продуктов&amp;quot;. Книгу я читал уже довольно давно (года три назад) и тогда она на меня произвела двоякое впечатление. Первая часть книги, в которой автор сосредотачивается на общих сведениях, мне очень понравилась, а вот вторая, более конкретная, мне понравилась не очень сильно и я не решился применять советы автора на практике. Хотя у вас может быть и другое мнение:)&lt;/p&gt;  &lt;p align="justify"&gt;В целом, нужно сказать, что интересных мыслей в книге достаточно, о чем можно будет убедиться по цитатам. Цитат набралось много, поэтому я разбил их на две части.&lt;/p&gt;  &lt;p align="justify"&gt;На первой цитате я хочу остановиться подробнее. Во-первых, автором этой цитаты является не Стив Макконнелл, а Александр Милн, а во вторых, ее нельзя публиковать без рисунка, а в третьих, несмотря на то, что Милн, мягко говоря, не имеет никакого отношения к компьютерам, эта фраза имеет непосредственное отношение к разработке ПО.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_paoZJwM8MDs/SyoO7IxaSAI/AAAAAAAAAIM/-9RdJiLEEtc/s1600-h/pooh%5B4%5D.gif"&gt;&lt;img title="pooh" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="266" alt="pooh" src="http://lh5.ggpht.com/_paoZJwM8MDs/SyoO7rmoKuI/AAAAAAAAAIQ/_TaEm7zWKGQ/pooh_thumb%5B2%5D.gif?imgmax=800" width="207" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Плюшевый медвежонок вслед за Кристофером Робином спускается по лестнице, считая затылком ступеньки - бум, бум, бум. Он знает - это единственный способ перемещаться с этажа на этаж, хотя иногда ему кажется, что должен быть и другой. И он бы догадался, что это за способ, если б его перестали колотить затылком о ступени и дали хоть чуточку подумать. Но чаще ему кажется, что никакого другого способа просто нет.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Об авторе&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Исследователи обнаружили, что стоимость позднего исправления ошибки, внесенной в проект на ранней стадии (например, при формировании требований или архитектуры), в 50-200 раз выше, чем стоимость ее исправления сразу же после внесения.&lt;/em&gt;     &lt;br /&gt;Глава 3. &amp;quot;В начале потока&amp;quot; и &amp;quot;в конце потока&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Конус неопределенности задает ряд жестких предпосылок для оценки проектов. Так, он подразумевает, что на ранних стадиях проекта точно оценить проект не просто трудно, а теоретически невозможно. После окончания формирования требований область действия проекта будет зависеть от огромного числа решений на этапах создания архитектуры, детального проектирования и конструирования. Если кто-то берется оценить влияние этих решений до их принятия, то возможны два варианта: либо этот человек обладает даром предвидения, либо попросту плохо осведомлен о сущности программной разработки      &lt;br /&gt;&lt;/em&gt;Глава 3. Предпосылки для оценки проекта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;&lt;strong&gt;В начале проекта вы можете определить для него либо фиксированные сроки и бюджет, либо фиксированный функциональный набор. Определить и то и другое одновременно - невозможно.        &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;Глава 3. Предпосылки для оценки проекта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Добиться успеха в небольших проектах можно при благоприятном стечении обстоятельств простым напряжением силы воли, однако средние и крупные проекты требуют более систематического подхода      &lt;br /&gt;&lt;/em&gt;Глава 4. Навыки выживания&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В некоторых организациях проблема финансирования программных проектов состоит в том, что менеджеры вынуждены делать запросы финансирования раньше, чем у них появляется возможность завершить значительную часть исследовательских работ. Такие запросы обречены на &amp;quot;промах&amp;quot;, поскольку для осмысленного расчета оценок бюджета и сроков проекта о желаемом продукте известно слишком мало. Опыт программной индустрии свидетельствует о том, что оценки, создаваемые на ранних стадиях проектов, могут отличаться от действительных в большую или меньшую сторону до четырех раз.      &lt;br /&gt;&lt;/em&gt;Глава 4. Двухэтапный подход к финансированию&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Любой участник среднего или крупного проекта не понаслышке знает, что очень многое в нем может пойти &amp;quot;не так&amp;quot;&lt;/em&gt;     &lt;br /&gt;Глава 4. Управление рисками&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В силу загадочных для меня причин люди полагают, что можно контролировать проект, не выделяя для этой цели какую-то группу или отдельное лицо. Мое мышление и опыт говорят, что это невозможно      &lt;br /&gt;&lt;/em&gt;Глава 4. Контроль над проектом&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разработка программных продуктов требует творчества, интеллекта, инициативности, настойчивости и значительной степени внутренней мотивации. Любой эффективный подход к разработке программного обеспечения должен подразумевать, что в отсутствие интереса команды к проекту его успех сомнителен.      &lt;br /&gt;&lt;/em&gt;Глава 4. &amp;quot;Человеческое обеспечение&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Не пытайтесь мотивировать разработчиков эффективными выступлениями, недостижимыми результатами или денежными вознаграждениями      &lt;br /&gt;&lt;/em&gt;Глава 4. &amp;quot;Человеческое обеспечение&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Разработка программных продуктов - это процесс постоянных исследований и поиска, поэтому лучшая его поддержка - это спокойная обстановка, располагающая к размышлениям. Эффективная разработка программ требует от разработчиков такого же уровня концентрации, как от математиков или физиков. Можете ли вы представить Альберта Эйнштейна, сидящего за рабочим столом, вокруг которого ходит менеджер и раздраженно повторяет: &amp;quot;Альберт, теория относительности нужна нам прямо сейчас! Поторопись!&amp;quot;      &lt;br /&gt;&lt;/em&gt;Глава 4. &amp;quot;Человеческое обеспечение&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Работа среднестатистического менеджера требует переключения внимания каждые несколько минут. Работа среднестатистического разработчика требует, чтобы переключение внимания происходило не чаще, чем раз в несколько часов.      &lt;br /&gt;&lt;/em&gt;Глава 4. &amp;quot;Человеческое обеспечение&amp;quot;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;С точки зрения сложности компонентов программного продукта и их функциональности, успешная разработка проекта подчиняется принципу &amp;quot;чем меньше, тем лучше&amp;quot;, действующему на всех этапах - от формирования требований до выпуска. Поскольку разработка программного продукта требует значительных интеллектуальных усилий, становится важно, чтобы участники проекта активно способствовали его максимальному упрощению, избавляя проект от излишней сложности.      &lt;br /&gt;&lt;/em&gt;Глава 4. Минимализм продукта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Французский писатель Вольтер говорил, что рассказ закончен не тогда, когда в него нечего добавить, а тогда, когда из него нечего больше выкинуть. Этот подход применим и к программному проекту.&lt;/em&gt;     &lt;br /&gt;Глава 4. Минимализм продукта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Эффективные проекты контролируют изменения; неэффективные проекты находятся под контролем изменений.      &lt;br /&gt;&lt;/em&gt;Глава 6. Стрельба по движущейся цели&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Хорошо организованные проекты неизбежно ищут компромисс между функциональным набором, бюджетом и расписанием      &lt;br /&gt;&lt;/em&gt;Глава 7. Цели в области действия проекта&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты книги Стива Макконнелла &amp;quot;Остаться в живых! Руководство для менеджера программных проектов&amp;quot;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_17.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_17.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6156606674567766053?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6156606674567766053/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6156606674567766053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6156606674567766053'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_17.html' title='Остаться в живых! Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_paoZJwM8MDs/SyoO6AlNohI/AAAAAAAAAII/6VY_YSG_4TE/s72-c/Survival_Guide_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3603810041742942645</id><published>2009-12-16T05:09:00.000-08:00</published><updated>2009-12-16T05:09:07.125-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Опрос'/><title type='text'>Голосование: Нужен ли рисунок с обложкой книги в начале сообщения с циатами?</title><content type='html'>Уважаемые, читатели. У меня к вам вопрос: нужно ли в начале сообщения с цитатами вставлять рисунок с обложкой?&lt;br /&gt;Я создал голосование, но т.к. большинство пользуется различного рода ридерами, то на главную страницу форума попадают редко, поэтому я прошу вас обратить на это внимание.&lt;br /&gt;Можно обсуждать здесь, а можно просто проголосовать на главной странице блога.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3603810041742942645?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3603810041742942645/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_16.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3603810041742942645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3603810041742942645'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_16.html' title='Голосование: Нужен ли рисунок с обложкой книги в начале сообщения с циатами?'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3093383727444303192</id><published>2009-12-14T10:19:00.001-08:00</published><updated>2009-12-14T10:19:18.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Джеймс Коплиен'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Джеймс Коплиен. Программирование на С++</title><content type='html'>&lt;div style="text-align: justify"&gt;Хотя книга Джеймса Коплиена “Программирование на С++. Классика CS” вышла уже более 15 лет назад, в ней находится немало количество интересных, способных заинтересовать современного программиста.&lt;/div&gt;  &lt;div style="text-align: justify"&gt;Более подробно об этой книге я писал на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/07/c-cs.html"&gt;своем блоге&lt;/a&gt;, ну а здесь сосредоточатся исключительно цитаты.&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&lt;em&gt;Синтаксис языка до определенной степени формирует наше восприятие, но простое описание синтаксиса в &amp;quot;руководстве пользователя&amp;quot; станет всего лишь отправной точкой. Структура наших программ (а следовательно, и тех систем, которые мы строим) в основном определяется &lt;strong&gt;стилем&lt;/strong&gt; и &lt;strong&gt;идиомами&lt;/strong&gt;, используемыми для выражения архитектурных концепций.       &lt;br /&gt;Стиль отличает истинное мастерство от простой удачи. Эффективный стиль воспитания ребенка, программирования и вообще всего на свете строится на основе личного опыта или опыта других. Программист, который умеет правильно связывать возможности языка программирования с потребностями приложения, пишет превосходные программы. Но чтобы выйти на этот уровень, необходимо от правил и механического запоминания перейти к идиомам и стилю, а в конечном счете - к концептуальным и структурным абстракциям.&lt;/em&gt;&lt;/div&gt;  &lt;div style="text-align: justify"&gt;Предисловие. Изучение языка программирования&lt;/div&gt;  &lt;div style="text-align: justify"&gt;   &lt;br /&gt;&lt;em&gt;Изучение языка программирования имеет много общего с изучением естественного языка. Знание базового синтаксиса позволяет программисту писать простые процедуры и строить из них нетривиальные программы - подобно тому, как человек со словарным запасом в несколько тысяч иностранных слов способен написать нетривиальный рассказ. Но настоящее мастерство - совсем другое дело. Рассказ может быть нетривиальным, но от этого он не станет читаться &amp;quot;на одном дыхании&amp;quot;, подчеркивая свободу владения языком его автора. Изучение синтаксиса и базовой семантики языка сродни 13-часовым курсам немецкого для начинающих: после прохождения таких курсов вы сможете заказать колбаски в ресторане, но для работы в Германии журналистом или поэтом их наверняка окажется недостаточно. Различие кроется в &lt;strong&gt;идиоматике&lt;/strong&gt; языка.       &lt;br /&gt;&lt;/em&gt;Предисловие. Изучение языка программирования&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&lt;em&gt;В программировании, как и в естественных языках, пригодность и выразительность языковых конструкций базируется на важных идиомах. Хорошие идиомы упрощают работу прикладного программиста, подобно тому как идиомы любого языка обогащают общение. Программные идиомы являются &amp;quot;выражениями&amp;quot; семантики программирования, пригодными для многократного использования в том же смысле, в котором классы служат для многократного использования архитектурных решений и кода. В программировании, как и в естественных языках, пригодность и выразительность языковых конструкций базируется на важных идиомах. Хорошие идиомы упрощают работу прикладного программиста, подобно тому как идиомы любого языка обогащают наше общение. Программные идиомы являются &amp;quot;выражениями&amp;quot; семантики программирования, пригодными для многократного использования в том же смысле, в котором классы служат для многократного использования архитектурных решений и кода. &lt;/em&gt;    &lt;br /&gt;Предисловие. Изучение языка программирования&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&lt;em&gt;Как сказал Страуструп, хорошие навыки программирования и проектирования являются результатом личного вкуса, проницательности и опыта.      &lt;br /&gt;&lt;/em&gt;Глава 1. Проектирование и язык&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify"&gt;&lt;em&gt;&lt;strong&gt;Принцип замещения Барбары Лисков:&lt;/strong&gt; ...если для каждого объекта o1 типа S существует объект o2 типа T такой, что для всех программ P, определенных в контексте T, поведение P не изменяется при замене o1 на o2, то S является базовым типом для T.       &lt;br /&gt;&lt;/em&gt;Глава 6. Случайное наследование – омонимы в мире типов&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3093383727444303192?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3093383727444303192/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_541.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3093383727444303192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3093383727444303192'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_541.html' title='Джеймс Коплиен. Программирование на С++'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-6415430124984540404</id><published>2009-12-14T09:59:00.001-08:00</published><updated>2009-12-14T10:04:29.337-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Фредерик Брукс'/><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Мифический человеко-месяц. Радости профессии</title><content type='html'>&lt;p&gt;Один из комментариев к первой части цитат книги Фредерика Брукса “Мифический человеко-месяц” навела на мысль, что одной цитаты из раздела “Радости профессий” недостаточно. Но этот раздел настолько потрясен, что я думаю будет не лишним выделить его в отдельное сообщение.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Почему заниматься программированием интересно? Какими радостями вознаграждаются те, кто им занимается?      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Во-первых, это просто радость, получаемая при создании чего-либо своими руками. Как ребенок радуется, делая куличики из песка, так и взрослый получает удовольствие, создавая какие-либо вещи, особенно если сам их и придумал. Я думаю, что этот восторг - отражение восторга Господа, творящего мир, восторга, проявляющегося в индивидуальности и новизне каждого листочка и каждой снежинки.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Во-вторых, это удовольствие создавать вещи, которые могут быть полезны другим людям. Глубоко в душе мы испытываем потребность в том, чтобы другие использовали результаты нашего труда и считали их полезными. В этом отношении программная система по своей сути - то же, что и изготовленная ребенком подставка для карандашей &amp;quot;папе в подарок&amp;quot;.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; В-третьих, это очарование создания сложных головоломных объектов, состоящих из взаимодействующих движущихся частей и наблюдения за их работой, круг за кругом демонстрирующей результаты изначально заложенных принципов. Компьютер с работающей на нем программой обладает доведенным до высшего предела очарованием игорного или музыкального автомата.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; В-четвертых, это радость, получаемая от неизменного узнавания нового, проистекающего из неповторимой природы задачи. В том или ином отношении задача всегда ставится по-новому, и тот, кто ее решает, получает новые знания - либо практические, либо теоретические, либо те и другие вместе.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Наконец, наслаждение доставляет работа со столь податливым материалом. Программист, подобно поэту, работает почти непосредственно с чистой мыслью. Он строит свои замки в воздухе и из воздуха, творя силой воображения. Трудно найти другой материал, используемый в творчестве, который столь же гибок, прост для шлифовки или переработки и доступен для воплощения грандиозных замыслов. (Как мы позднее увидим, такая податливость таит свои проблемы.)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Однако программная конструкция, в отличие от поэтических творений, реальна, в том смысле, что она движется и работает, производя видимые результаты, которые отделимы от самой конструкции. Она печатает результаты, рисует картинки, производит звуки, приводит в движение рычаги. В наше время осуществилось волшебство мифа и легенды. С клавиатуры вводится верное заклинание, и экран монитора оживает, показывая то, чего никогда не было и не могло быть.       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Таким образом, программирование доставляет удовольствие, поскольку отвечает глубокой внутренней потребности в творчестве и удовлетворяет чувственные потребности, которые есть у всех нас. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Все цитаты из книги Фредерика Брукса “Мифический человеко-месяц”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/blog-post_14.html"&gt;Радости профессии&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-6415430124984540404?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/6415430124984540404/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_14.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6415430124984540404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/6415430124984540404'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_14.html' title='Мифический человеко-месяц. Радости профессии'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-3221390356388971721</id><published>2009-12-13T03:15:00.001-08:00</published><updated>2009-12-14T09:48:31.121-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><title type='text'>Программист-прагматик. Часть 6. Управление проектами</title><content type='html'>&lt;p align="justify"&gt;Помимо философских высказываний, в книге Дейва Томаса и Энди Ханта можно найти немало полезной информации и по управлению проектами.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Поскольку вы не работаете в безвоздушном пространстве, вам необходимо уметь общаться. Чем эффективнее это общение, тем более влиятельным вы становитесь.&lt;/em&gt;     &lt;br /&gt;Глава 1. Обращайтесь к людям&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Одной из интересных особенностей оценки является тот факт, что интерпретация ее результата зависит от используемых вами единиц измерения. Если вы говорите, что для некоего действия потребуется 130 рабочих дней, то люди будут ожидать наступления этого события в достаточно узком интервале. Но если вы скажете «около шести месяцев», они будут знать, что этого события следует ожидать чрез 5-7 месяцев. Обе цифры обозначают одну и ту же продолжительность, но «130 дней», вероятно, подразумевает большую точность, чем вы полагаете.&lt;/em&gt;     &lt;br /&gt;Глава 2. Насколько точной является “приемлемая точность”?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Что сказать, если вас просят оценить что-либо?      &lt;br /&gt;Говорите: «Я вернусь к вам с этим позже».       &lt;br /&gt;Вы почти всегда можете добиться лучших результатов, если не будете торопиться… К оценкам, сделанным на ходу (например, у офисной кофеварки), придется возвращаться вновь и вновь (как, впрочем, и к кофе), теряя при этом покой.       &lt;br /&gt;&lt;/em&gt;Глава 2. Что сказать, если вас просят оценить что-либо&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Всегда используйте управление исходным текстом программы      &lt;br /&gt;Всегда. Даже если ваша команда состоит из одного человека и продолжительность проекта составляет одну неделю. Даже если это прототип на выброс. Даже если материал, с которым вы работаете, не является исходным текстом программы. Убедитесь, что все находится под контролем – документация, номера телефонов, записки поставщикам, сборочные файлы, процедуры сборки и выпуска, крохотный сценарий (в оболочке), прожигающий эталонный компакт-диск, словом – все.&lt;/em&gt;     &lt;br /&gt;Глава 3. Управление исходным текстом программ&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Многие книги и учебные пособия относят процедуру сбора исходных требований к начальной фазе проекта. Термин «сбор» напоминает о племени счастливых аналитиков, занимающихся собирательством камней-самородков мудрости, разбросанных по земле на фоне приглушенного звучания &amp;quot;Пасторальной симфонии&amp;quot;. Этот термин напоминает о том, что все требования уже имеются в наличии, нужно лишь отыскать их, положить в корзину и весело шагать дальше.      &lt;br /&gt;Это не совсем так. Требования редко лежат на поверхности. Обычно они находятся глубоко под толщей предположений, неверных представлений и политики.       &lt;br /&gt;Не собирайте требования – выискивайте их       &lt;br /&gt;&lt;/em&gt;Глава 7. Карьер для добычи требований&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Важно обнаружить основополагающую причину того, почему пользователи поступают определенным образом, а не так, как они привыкли это делать. В конечном итоге разрабатываемой программе придется решать проблемы их бизнеса, а не просто отвечать их заявленным требованиям. Документируя причины, по которым были выдвинуты требования, команда разработчиков получит бесценную информацию, необходимую для принятия ежедневных решений, связанных с реализацией.      &lt;br /&gt;&lt;/em&gt;Глава 7. В поисках требований&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Очень сложно создать успешный проект, в котором пользователи и разработчики обращаются к одному и тому же предмету под разными именами или, что еще хуже, обращаются к разным предметам, используя одно и тоже имя.      &lt;br /&gt;&lt;/em&gt;Глава 7. Поддержка глоссария&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Однажды царь Фригии Гордий завязал узел, который никто не мог развязать. Было предсказано, что тот, кто сможет развязать его, станет властелином всей Азии. И вот пришел Александр Македонский, который разрубил узел своим мечом. Несколько иная интерпретация требований и все – он стал властителем всей Азии.&lt;/em&gt;     &lt;br /&gt;Глава 7. Разгадка невероятных головоломок&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Не забывайте, что формальные методы разработки – это лишь один инструмент из вашего арсенала. Если после тщательного анализа вы почувствуете, что вам необходим формальный метод, берите его на вооружение, но помните, что несете ответственность. Никогда не становитесь рабом методологии, ведь кружки и стрелки обедняют своих хозяев. Прагматики смотрят на методологии критическим взглядом, затем берут лучшее из каждой и преобразуют их в набор практических технологий, который улучшается каждый месяц. Это является решающим моментом. Вы должны постоянно работать над усовершенствованием процессов. Никогда не делайте жесткие рамки методологии границами вашего собственного мира.      &lt;br /&gt;&lt;/em&gt;Глава 7. Должны ли мы использовать формальные методы?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Информация, вводящая в заблуждение, хуже, чем отсутствие какой бы то ни было информации вообще.      &lt;br /&gt;&lt;/em&gt;Глава 8. Генерирование web-сайта&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html"&gt;Часть 1. Философия программирования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html"&gt;Часть 2. Дублирование информации&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Часть 3. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html"&gt;Часть 4. Проектирование&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html"&gt;Часть 6. Управление проектами&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-3221390356388971721?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/3221390356388971721/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/6.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3221390356388971721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/3221390356388971721'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/6.html' title='Программист-прагматик. Часть 6. Управление проектами'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-711255743240413885</id><published>2009-12-13T03:12:00.001-08:00</published><updated>2009-12-16T23:40:29.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Тестирование и отладка'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><title type='text'>Программист-прагматик. Часть 5. Тестировние и отладка</title><content type='html'>&lt;div align="justify"&gt;&lt;i&gt;&lt;/i&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;Тестирование и отладка занимает в книге достойное место. Книга не заменит специализированную литературу по отладке, но все же будет полезна многим разработчикам.&lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Английское слово bug (ошибка) используется для описания &amp;quot;объекта, вызывающего ужас&amp;quot; уже начиная с XIV века. Контр-адмирал д-р Грэйс Хоппер (создатель языка COBOL) оказалась первой, кто наблюдала компьютерного «жучка», буквально – моли, попавшей в одно из электромеханических реле, из которых состояли первые вычислительные системы. Когда техника попросили объяснить, почему машина ведет себя не так, как надо, он сообщил, что в системе &amp;quot;завелся жучок&amp;quot;, и в соответствии со своими должностными обязанностями приклеил его клейкой лентой вместе с крылышками и всем остальным в рабочий журнал.&lt;/i&gt;     &lt;br /&gt;Глава 3. Отладка&lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Очень простая, но весьма полезная методика поиска причины проблемы, состоит в том, чтобы разъяснить ее кому-либо. Ваш собеседник должен заглядывать через ваше плечо на экран монитора и время от времени утвердительно кивать головой (подобно резиновому утенку, ныряющему и выныривающему в ванне). Ему не нужно говорить ни слова; простое, последовательное объяснение того, что же должна делать ваша программа, часто приводит к тому, что проблема выпрыгивает из монитора и объявляет во всеуслышанье: &amp;quot;А вот и я!&amp;quot;.*      &lt;br /&gt;Звучит просто, но разъясняя проблему вашему собеседнику, вы должны явно заявить о тех вещах, которые считаете само собой разумеющимися при просмотре текста вашей программы. Поскольку вам приходится озвучивать некоторые из этих положений, вы можете по-новому взглянуть на суть данной проблемы – неожиданно для самого себя. &lt;/i&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;em&gt;&lt;/em&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;* Почему &amp;quot;резиновый утенок&amp;quot;? Один из авторов книги, Дэйв Хант, учился в лондонском Империал колледже и много работал совместно с аспирантом, которого звали Грег Паг и которого Д. Хант считает одним из лучших известных ему разработчиков. На протяжении нескольких месяцев Грег носил при себе крохотного желтого резинового утенка, которого он ставил на край монитора во время работы. Прошло некоторое время, пока Дэйв не отважился спросить…      &lt;br /&gt;&lt;/i&gt;&lt;/div&gt;  &lt;div align="justify"&gt;Примечание: один очень известный bug-slayer (речь идет о Джоне Роббинсе), считает, что лучшие отладчики – это кошки, а не утята… Но это уже, скорее, дело вкуса :-)    &lt;br /&gt;Глава 3. Рассказ о резиновом утенке&lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Вероятно, ошибка кроется в операционной системе, компиляторе или продукте независимого производителя – но это не должно быть первой мыслью, приходящей вам на ум. Скорее всего, ошибка существует в тексте разрабатываемого приложения. Обычно выгоднее полагать, что прикладная программа некорректно обращается к библиотеке, нежели то, что нарушена сама библиотека. Даже если проблема заключается в продукте независимого производителя, то перед тем, как представлять отчет об ошибках, вам в любом случае надлежит исключить ошибки в вашей собственной программе.      &lt;br /&gt;&lt;/i&gt;Глава 3. Процесс исключения &lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Если ваша программа обнаруживает, что произошло событие, которое считалось невозможным, программа теряет жизнеспособность. Начиная с этого момента, все действия, которые она совершает, попадают под подозрение, так что выполнение программы необходимо прервать как можно быстрее. В большинстве случаев мертвая программа приносит намного меньше вреда, чем испорченная.      &lt;br /&gt;&lt;/i&gt;Глава 4. Аварийное завершение не означает “отправить в корзину для мусора” &lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Предположим, Фреду дано задание написать программу. Фред составляет некую программу, пробует ее запустить, и она вроде бы работает. Фред пишет еще один фрагмент, пробует его запустить, и снова все работает. В такой обстановке проходит еще несколько недель, но внезапно программа прекращает работать, и, потратив несколько часов на устранение дефекта, Фред все еще не знает, в чем причина. Фред может потратить много времени, копаясь с этим фрагментом, без перспективы на восстановление работы программы. И что бы он ни делал, кажется, что программа никогда не будет работать правильно.      &lt;br /&gt;Фред не знает, почему программа сбоит, потому что не знает, почему она работала вначале. Она лишь казалась работающей в условиях ограниченного «тестирования», которое проводил Фред, но это было лишь стечением обстоятельств. Находясь в плену ложной уверенности, Фред впал в забытье. Большинству интеллектуалов знаком этот образ Фреда, но мы знаем его лучше. Мы ведь не полагаемся на стечение обстоятельств, не так ли?       &lt;br /&gt;&lt;/i&gt;Глава 6. Программирование в расчете на стечение обстоятельств &lt;/div&gt;  &lt;div align="justify"&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Тестируйте ваши программы, в противном случае это сделают ваши пользователи      &lt;br /&gt;&lt;/i&gt;Глава 6. Культура тестирования &lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Большинство разработчиков ненавидят тестирование. Они стремятся тестировать осторожно, подсознательно ощущая, в каком месте программа может сбоить, и избегая слабых мест.      &lt;br /&gt;&lt;/i&gt;Глава 8. Безжалостное тестирование &lt;/div&gt;  &lt;div align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;i&gt;Несоответствие критериям удобства использования является дефектом такого же порядка, как деление на ноль.&lt;/i&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;  &lt;div align="justify"&gt;Глава 8. Тестирование удобства использования &lt;/div&gt;  &lt;div align="justify"&gt;   &lt;br /&gt;&lt;i&gt;Если тестировщик обнаруживает дефект, это должно быть в первый и последний раз – обнаружение дефекта человеком. Автоматизированные тесты должны быть модифицированы для проверки наличия этого дефекта, начиная с момента его первоначального обнаружения, всякий раз, без каких-либо исключений, не обращая внимания на степень тривиальности, жалобы разработчика и его фразу &amp;quot;Этого больше не случится&amp;quot;.      &lt;br /&gt;&lt;/i&gt;Глава 8. Кольцо сжимается &lt;/div&gt;  &lt;div align="justify"&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;Все цитаты из книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”:    &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html"&gt;Часть 1. Философия программирования&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html"&gt;Часть 2. Дублирование информации&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Часть 3. Инструменты&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html"&gt;Часть 4. Проектирование&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html"&gt;Часть 6. Управление проектами&lt;/a&gt;     &lt;br /&gt;&lt;/div&gt;  &lt;div align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html" target="_blank"&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-711255743240413885?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/711255743240413885/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/5.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/711255743240413885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/711255743240413885'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/5.html' title='Программист-прагматик. Часть 5. Тестировние и отладка'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1316137711291308231</id><published>2009-12-13T03:09:00.001-08:00</published><updated>2010-01-26T03:19:34.468-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><category scheme='http://www.blogger.com/atom/ns#' term='ООП'/><title type='text'>Программист-прагматик. Часть 4. Проектирование</title><content type='html'>&lt;p align="justify"&gt;Проблема сцепления (cohesion) и связности (coupling) беспокоит архитекторов в самых различных областях уже много лет; в области разработки ПО эта тема поднималась еще Эдвардом Йордоном и Ларри Константайном тридцать лет назад. И хотя тема построения слабосвязного ПО не является единственной темой по проектированию ПО, именно она проходит красной нитью через всю книгу “Программист-прагматик”.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Термин «ортогональность» заимствован из геометрии. Две линии являются ортогональными, если они пересекаются под прямым углом, например оси координат на графике. В терминах векторной алгебры две такие линии являются независимыми. Если двигаться вдоль одной из линий, то проекция движущейся точки на другую линию не меняется.      &lt;br /&gt;Этот термин был введен в информатике для обозначения некой разновидности независимости или несвязанности. Два или более объекта ортогональны, если изменения, вносимые в один из них, не влияют на любой другой.       &lt;br /&gt;&lt;/em&gt;Глава 2. Что такое ортогональность?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Ничто не вечно, и если вы всерьез полагаетесь на некоторое явление, то этим вы практически гарантируете, что оно непременно изменится.      &lt;br /&gt;&lt;/em&gt;Глава 2. Обратимость&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Вместо того, чтобы высекать решения на камне, рассматривайте их так, как будто они начерчены на морском песке. В любой момент может накатить волна и смыть их.      &lt;br /&gt;&lt;/em&gt;Глава 2. Обратимость&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Перед тем как вы займетесь созданием любого прототипа, основанного на программе, убедитесь, что все понимают – вы пишите одноразовую программу. Прототипы могут быть обманчиво привлекательными для людей, которые не знаю, что это всего лишь прототипы. Вы должны очень четко уяснить – эта программа одноразовая, незавершенная и не может быть завершена.      &lt;br /&gt;Легко впасть в заблуждение из-за очевидной завершенности демонстрационного прототипа, и спонсоры проекта или менеджмент могут настаивать на развертывании прототипа (или его потомства), если вы заранее не определите, что можно ожидать от прототипа. Напомните им, что вы, конечно, можете создавать великолепный прототип новой модели автомобиля из бальзовой древесины и клейкой ленты, но вы же не поедете на нем в час пик!&lt;/em&gt;     &lt;br /&gt;Глава 2. Как не надо использовать прототипы&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Жизнь не стоит не месте.      &lt;br /&gt;Не могут стоять на месте и программы, которые мы пишем. Чтобы не отставать от сегодняшнего, близкого к кошмару, темпа изменений, необходимо приложить все усилия для написания программ слабосвязанных и гибких, насколько это возможно. В противном случае мы придем к тому, что наша программа быстро устареет или станет слишком хрупкой, что не позволит устранять ошибки, и может в конечном итоге оказаться в хвосте сумасшедшей гонки в будущее.&lt;/em&gt;     &lt;br /&gt;Глава 5. Гибкость против хрупкости&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Шпионы, диссиденты, революционеры и им подобные часто организованы в небольшие группы, называемые ячейками. Хотя отдельные личности в каждой ячейке могут знать друг о друге, они не знают ничего об участниках других ячеек. Если одна ячейка раскрыта, то никакое количество &amp;quot;сыворотки правды&amp;quot; неспособно выбить из ее участников информацию об их сподвижниках вне пределов ячейки. Устранение взаимодействий между ячейками убережет всех.      &lt;br /&gt;Мы полагаем, что этот принцип хорошо бы применить и к написанию программ. Разбейте вашу программу на ячейки (модули) и ограничьте взаимодействие между ними. Если один модуль находится под угрозой и должен быть заменен, то другие модули должны быть способны продолжить работу.&lt;/em&gt;     &lt;br /&gt;Глава 5. Несвязанность и закон Деметера&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Когда мы запрашиваем у объекта определенную услугу, то мы хотим, что бы эта услуга оказывалась от нашего имени. Мы не хотим, чтобы данный объект предоставлял нам еще какой-то объект, подготовленный третьей стороной, с которым нам придется иметь дело для получения необходимой услуги.&lt;/em&gt;     &lt;br /&gt;Глава 5. Сведение связанности к минимуму&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html"&gt;Часть 1. Философия программирования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html"&gt;Часть 2. Дублирование информации&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Часть 3. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html"&gt;Часть 4. Проектирование&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html"&gt;Часть 6. Управление проектами&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1316137711291308231?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1316137711291308231/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/4.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1316137711291308231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1316137711291308231'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/4.html' title='Программист-прагматик. Часть 4. Проектирование'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2099470009773058907</id><published>2009-12-13T03:06:00.001-08:00</published><updated>2009-12-13T03:41:03.594-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Программист-прагматик. Часть 3. Инструменты</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Многие авторы говорят о важности инструментов, но так, как об этом сказали Хант и Томас не может написать никто. Мне эта мысль авторов настолько понравилась, что я решил выделить ее в отдельное сообщение.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Каждый ремесленник отправляется на поиски заработка, имея при себе походный набор инструментов. Столяру могут пригодиться линейки, шаблоны, пара ножовок, несколько рубанков, тонкие стамески, сверла и зажимы, киянки и струбцины. Эти инструменты он будет тщательно выбирать и настраивать, каждому из них будет уготована определенная работа, и, что наверное самое важное, каждый из них, оказавшись в умелых руках столяра, найдет свое место под солнцем.      &lt;br /&gt;После этого придет черед обучению и притирке. Каждому инструменту будут присущи свои особенности (и хитрости), и каждый из них потребует, чтобы с ним обращались по-своему. При работе столяр держит каждый инструмент особым образом и затачивает его под особым углом. Пройдет время, и от работы инструмент износится до того, что рукоятка превратится в слепок руки столяра, а режущая поверхность сравнится с углом, под которым столяр держит инструмент относительно рабочей плоскости. В этот момент инструменты станут проводниками идей от головы столяра к конечному продукту – они станут продолжением рук мастера. Со временем в арсенале столяра прибавятся новые орудия – резальные машины, лазерные станки для резки под углом, направляющие шаблоны &amp;quot;ласточкин хвост&amp;quot; – все это чудеса технологического прогресса. Но можно поспорить, что по-настоящему столяр счастлив только тогда, когда держит в руках инструмент из старого походного набора и слышит, как рубанок поет свою песню, выстругивая деревянную заготовку.       &lt;br /&gt;Инструменты – средство усиления вашего таланта. Чем они лучше и чем лучше вы ими владеете, тем больше вы сможете сделать. Начните с походного универсального набора инструментов. По мере того как вы приобретаете опыт и сталкиваетесь с специальными требованиями, ваш набор пополняется. Стоит уподобиться ремесленнику и пополнять набор регулярно. Старайтесь не прекращать поисков лучшего способа сделать что-либо. Оказавшись в ситуации, когда вы обнаруживаете, что ваших инструментов недостаточно, поищите иное, возможно, более мощное средство для осуществления задуманного. Ваши приобретения должны исходить из существующей необходимости.       &lt;br /&gt;&lt;/em&gt;Глава 3. Походный набор инструментов&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html" target="_blank"&gt;Часть 1. Философия программирования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html" target="_blank"&gt;Часть 2. Дублирование информации&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html" target="_blank"&gt;Часть 3. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html" target="_blank"&gt;Часть 4. Проектирование&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html" target="_blank"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html" target="_blank"&gt;Часть 6. Управление проектами&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2099470009773058907?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2099470009773058907/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2099470009773058907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2099470009773058907'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/3.html' title='Программист-прагматик. Часть 3. Инструменты'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-5693173522895899819</id><published>2009-12-13T03:02:00.001-08:00</published><updated>2009-12-14T09:49:38.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Программист-прагматик. Часть 2. Дублирование информации</title><content type='html'>&lt;p align="justify"&gt;Это вторая часть цитат из книги Энди Ханта и Дейва Томаса “Программист-прагматик. Путь от подмастерья к мастеру”.&lt;/p&gt;  &lt;p align="justify"&gt;Тема дублирования информации занимает в книги авторов значительное место, поэтому я решил выделить цитаты по этой теме в отдельное сообщение.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Принцип “Не повторяй себя” (DRY – Don’t Repeat Yourself):      &lt;br /&gt;&lt;strong&gt;Каждый фрагмент знания должен иметь единственное однозначное, надежное представление в системе        &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;Глава 2. Пороки дублирования&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Если меняется одно, придется вспомнить и об изменении других, или же ваша программа будет поставлена на колени ввиду противоречий. Вопрос не в том, вспомните ли вы о необходимом изменении или нет; вопрос в том, когда вы об этом забудете.      &lt;br /&gt;&lt;/em&gt;Глава 2. Пороки дублирования&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Программистов учат комментировать создаваемый ими текст программы: удачный текст программы снабжен большим количеством комментариев. К сожалению, им никогда не объясняли, зачем тексту программы нужны комментарии: неудачному тексту требуется большое количество комментариев.… Комментарии неизбежно устаревают, а ненадежные комментарии хуже, чем отсутствие комментариев вообще.      &lt;br /&gt;&lt;/em&gt;Глава 2. Навязанное дублирование&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Вы пишите документацию, затем создаете текст программы. Что-то меняется, и вы исправляете документацию и обновляете текст программы. Что-то меняется, и вы исправляете документацию и обновляете текст. И документация, и текст содержат представления одного и того же знания. И все мы знаем, что в суматохе, когда приближается контрольный срок, а важные заказчики высказывают требования, обновление документации стараются отложить.      &lt;br /&gt;&lt;/em&gt;Глава 2. Навязанное дублирование&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Каждый проект испытывает давление времени – силы, которая может двигать лучшими из нас, заставляя идти напролом.      &lt;br /&gt;&lt;/em&gt;Глава 2. Нетерпеливое дублирование&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Все, что вы пытаетесь делать, способствует развитию среды, где проще находить и многократно использовать существующий материал, чем создавать его самому. Но если это непросто (имеется ввиду непросто повторно использовать существующий код), люди просто не будут этого делать. И если вы будете не в состоянии многократно использовать этот материал, вы рискуете заняться дублированием знаний.      &lt;br /&gt;&lt;/em&gt;Глава 2. Коллективное дублирование&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Программа должна иметь комментарии, но слишком большое их количество может быть так же плохо, как и малое.      &lt;br /&gt;В общем, комментарии должны обсуждать, почему выполняется та или иная операция, ее задачу и ее цель. Программа всегда демонстрирует, как это делается, поэтому комментирование – избыточная информация и нарушение принципа DRY.       &lt;br /&gt;&lt;/em&gt;Глава 8. Комментарии в программе&lt;/p&gt;  &lt;p align="justify"&gt;Все цитаты из книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html"&gt;Часть 1. Философия программирования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html"&gt;Часть 2. Дублирование информации&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Часть 3. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html"&gt;Часть 4. Проектирование&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html"&gt;Часть 6. Управление проектами&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-5693173522895899819?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/5693173522895899819/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5693173522895899819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/5693173522895899819'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_13.html' title='Программист-прагматик. Часть 2. Дублирование информации'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2150071022600111468</id><published>2009-12-13T02:59:00.001-08:00</published><updated>2009-12-14T09:49:15.403-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Дейв Томас'/><category scheme='http://www.blogger.com/atom/ns#' term='Энди Хант'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Программист-прагматик. Часть 1. Философия программирования</title><content type='html'>&lt;p align="justify"&gt;Сегодня я хочу опубликовать цитаты из замечательной книги Дейва Томаса и Энди Ханта “Программист-прагматик. Путь от подмастерья к мастеру”. Это одна из наиболее цитируемых и популярных книг в компьютерной индустрии, популярность которой обусловлена потрясающим стилем изложения и, что самое главное, огромным количество умных мыслей.&lt;/p&gt;  &lt;p align="justify"&gt;Мое более развернутое мнение можно посмотреть на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/09/blog-post.html"&gt;моем блоге&lt;/a&gt; или на сайте &lt;a href="http://rsdn.ru/res/book/prog/The_Pragmatic_Programmer.xml"&gt;rsdn.ru&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;В предыдущих сообщениях, если в книге встречалось слишком большое количество цитат, я разбивал на части таким образом, чтобы в первой части была первая часть книги, а во второй части – вторая и т.д.. В этой книге цитат особенно много, но в отличие от других книг они покрывают разную тематику. Поэтому я разбил цитаты по темам, но т.к. философия программирования занимает центральное место книги, этой теме посвящено целых три части (части 2 и 3 относятся к философии программирования).&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1_13.html"&gt;Часть 1. Философия программирования&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2_13.html"&gt;Часть 2. Дублирование информации&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/3.html"&gt;Часть 3. Инструменты&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/4.html"&gt;Часть 4. Проектирование&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/5.html"&gt;Часть 5. Тестирование и отладка&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html"&gt;Часть 6. Управление проектами&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/6.html" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Итак, начнем. Часть 1. Философия программирования.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Программирование - это прикладное искусство. Простейший его смысл заключается в следующем: заставить компьютер делать то, что вам нужно (или то, что нужно пользователю, работающему с вашей программой). Программист – он и слушатель, он и советник, он и переводчик и даже диктатор. Вы пытаетесь ухватить суть не совсем ясных требований и найти такой способ их выражения, что только машина сможет оценить их по достоинству. Вы пытаетесь задокументировать работу так, чтобы она была понятна другим, спроектировать ее так, чтобы другие могли на нее положиться. Кроме того, вы пытаетесь сделать все это вопреки безжалостному ходу стрелки часов, отсчитывающих время, отпущенное на проект. Каждый день вы совершаете по маленькому чуду.      &lt;br /&gt;&lt;/em&gt;От авторов&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Многие предлагают вам помощь. Фирмы-поставщики инструментальных средств настойчиво говорят о чудесах, которые творят их программы. Мудрецы от методологий заверяют в том, что их средства гарантируют результаты. Каждый считает свой язык программирования лучшим из лучших, а операционную систему – панацеей.      &lt;br /&gt;Разумеется, эти утверждения неверны. Простых ответов не существует. Не существует такого понятия, как наилучшее решение, будь то инструментальное средство, язык или операционная система. Существует лишь некие системы, которые являются более приемлемыми при конкретном стечении обстоятельств.       &lt;br /&gt;И в этот момент на сцену выходит прагматизм. Стоит избегать обряда венчания с конкретной технологией, но при этом необходимо обладать подготовкой и опытом, настолько обширным, что это позволит выбрать верные решения в конкретных ситуациях. Ваша подготовка происходит из понимания основных принципов информатики, а опыт основывается на разнообразных практических проектах. Теория и практика сочетаются, придавая вам силу.       &lt;br /&gt;&lt;/em&gt;От авторов&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Авторы призывают вас во время работы думать только о работе – только так вы останетесь программистом-прагматиком. Это не случайная оценка существующей практики, а критическая оценка каждого принимаемого вами решения – в течение каждого рабочего дня и по каждому проекту. Никогда не пользуйтесь автопилотом. Думайте постоянно, критикуя свою работу в реальном масштабе времени. Старый девиз фирмы IBM “ДУМАЙ!” является своего рода мантрой для программиста-прагматика.      &lt;br /&gt;&lt;/em&gt;Думай! О своей работе&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Во время экскурсии по Итонскому колледжу в Англии турист спросил садовника, как ему удается содержать лужайки в столь идеальном состоянии. «Это несложно, - ответил садовник, вы просто стряхиваете росу каждое утро, выкашиваете лужайку через день и утрамбовываете раз в неделю».      &lt;br /&gt;«И это все?» - спросил турист.       &lt;br /&gt;«Абсолютно все, - ответил садовник, - если заниматься этим на протяжении 500 лет, то ваша лужайка будет не хуже».       &lt;br /&gt;Великие лужайки, как и великие программисты, нуждаются в ежедневном уходе. В ходе беседы консультанты в области менеджмента не преминут вставить японское слово «кайдзен». «Кайдзен» - японский термин, означающий политику непрерывного внедрения большого количества мелких усовершенствований. Считается, что «кайдзен» стала одной из основных причин резкого роста производительности и качества в японской промышленности, и эту политику стали применять во многих странах. «Кайдзен» применима и к отдельным личностям. Каждый день необходимо работать, оттачивая свои навыки и добавляя в свой репертуар новые произведения. В отличие от итонских газонов, для достижения результата потребуются дни. Годы спустя вы будете поражаться своему преуспеванию и карьерному росту.       &lt;br /&gt;&lt;/em&gt;От авторов. Непрерывность процесса&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Некоторые здания, расположенные в старых кварталах города, находятся в хорошем состоянии и чистоте, тогда как другие представляют собой жуткие развалины. Почему? Исследователи в области преступности и упадка больших городов открыли удивительный механизм, запускающий процесс быстрого превращения чистенького, нетронутого жилого дома в полуразрушенную и заброшенную трущобу.      &lt;br /&gt;Причина – одно-единственное разбитое окно.       &lt;br /&gt;Одно разбитое окно, стекло в котором не меняется в течение длительного времени, развивает в обитателях здания ощущение заброшенности – ощущение, что властям нет дела до того, что происходит со зданием. Затем разбивается другое окно. Люди начинают мусорить. На стенах появляются похабные надписи. Возникают серьезные повреждения строительной конструкции. За относительно короткое время здание портится, несмотря на стремление владельца отремонтировать его, и ощущение заброшенности становится реальностью.       &lt;br /&gt;«Теория разбитого окна» дала полицейским участкам в Нью-Йорке и других больших городах стимул: навалиться всем миром на решение малых проблем ради сдерживания больших. И это срабатывает: сосредоточение усилий на первоочередном решении проблем разбитых окон, похабных надписей и других малых правонарушений привело к сокращению уровня тяжких преступлений.       &lt;br /&gt;&lt;/em&gt;Глава 1. Энтропия в программах&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2150071022600111468?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2150071022600111468/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2150071022600111468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2150071022600111468'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_13.html' title='Программист-прагматик. Часть 1. Философия программирования'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2204660031858645862</id><published>2009-12-07T01:00:00.001-08:00</published><updated>2009-12-07T01:00:28.663-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Том Демарко'/><category scheme='http://www.blogger.com/atom/ns#' term='Тим Листер'/><title type='text'>Человеческий фактор. Успешные проекты и команды. Часть 2</title><content type='html'>&lt;p align="justify"&gt;&lt;em&gt;Результат любого предприятия скорее зависит от того, кто делает работу, а не от того, как она делается. Однако современная теория управления почти не обращает внимания на поиск и сохранение подходящих людей. На какие бы курсы по управлению вы ни пошли, вы мало что услышите об этом.     &lt;br /&gt;Теория управления намного больше интересуется ролью начальника как главного стратега и тактика предприятия. Вас учат, что руководить – все равно что играть в военную настольную игру. В такой игре нет необходимости считаться с личностями или отдельными талантами; победа или поражение зависит от ваших решений, где и когда расставить свои безликие пешки      &lt;br /&gt;&lt;/em&gt;Часть 3. Подходящие люди&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Слово &lt;strong&gt;непрофессиональный&lt;/strong&gt;&amp;#160; часто употребляется для обозначения неожиданного и угрожающего поведения. Все, что может обеспокоить слабого руководителя, непрофессионально почти по определению. Так что попкорн – это непрофессионально. Длинные волосы – непрофессионально, если растут на мужской голове, но совершенно приемлемо, если на женской. Плакаты любого вида – это непрофессионально. Удобная обувь – непрофессионально. Танцы вокруг стола, когда происходит что-то хорошее, – непрофессионально. Хихикать и смеяться – непрофессионально. (Улыбаться можно, но не слишком часто.)&lt;/em&gt;    &lt;br /&gt;Глава 14. Кодовое слово: Профессионализм&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Наш бизнес не столько технологический, сколько социологический, он больше зависит от способностей сотрудников общаться между собой, чем от их способности общаться с машинами. Поэтому в процессе найма необходимо уделять главное внимание хотя бы некоторым аспектам социологии и человеческого взаимодействия     &lt;br /&gt;&lt;/em&gt;Глава 15. Организация проб&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Мы избегаем измерения текучки по той же причине, по которой заядлые курильщики избегают долго и всерьёз беседовать со своими докторами о долголетии: много хлопот, а в результате все равно плохие новости     &lt;br /&gt;&lt;/em&gt;Глава 16. Счастливы работать здесь&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В наших организациях более всего раздражает, что они хороши лишь настолько, насколько хороши люди, набирающие в них сотрудников     &lt;br /&gt;&lt;/em&gt;Глава 17. Тайный смысл Методологии&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Объемная документация - часть проблемы, а не часть решения     &lt;br /&gt;&lt;/em&gt;Глава 17. Безумие Методологии&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Ничто не может лишить сотрудников мотивации настолько эффективно, насколько это сделает осознание ими того факта, что руководство считает их некомпетентными     &lt;br /&gt;&lt;/em&gt;Глава 17. Безумие Методологии&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Испытывая недоверие со стороны начальства, люди не слишком склонны объединяться в команду     &lt;br /&gt;&lt;/em&gt;Глава 20. Оборонительная позиция руководства&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Типичные шаги, направленные на ускорение сдачи продукта, обычно приводят к снижению качества     &lt;br /&gt;&lt;/em&gt;Глава 20. Снижение качества продукта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Определенно существуют случаи, когда сжатые, но не запредельно, сроки могут быть для команды приятным вызовом. Но что никогда не будет полезным, так это идиотские сроки сдачи&lt;/em&gt;    &lt;br /&gt;Глава 20. Идиотские сроки сдачи&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Большинство организаций не стремятся к разрушению команд сознательно. Просто они так себя ведут     &lt;br /&gt;&lt;/em&gt;Глава 20. И опять на ту же грустную тему&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Успех порождает успех, а продуктивная гармония - еще более продуктивную гармонию     &lt;br /&gt;&lt;/em&gt;Глава 21. Что здесь происходит?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Лучший успех – тот, в котором нет очевидного участия руководства, а команда работает как содружество равных. Лучший начальник – тот, кто может повторять это раз за разом, не давая участникам команды догадаться, что ими «руководят». Таких руководителей их собственные коллеги считают просто удачливыми. У них все получается словно само собой. У них есть команды, рвущиеся в бой, проекты, быстро набирающие ход, и до самого конца все вокруг такого руководителя работают с энтузиазмом. Эти руководители никогда не напрягаются. Выглядит все настолько просто, что никто не верит, что они вообще руководят.     &lt;br /&gt;&lt;/em&gt;Глава 21. Что здесь происходит?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Визуальное наблюдение просто смешно для сотрудников проекта по разработке. Визуальное наблюдение - это для заключенных     &lt;br /&gt;&lt;/em&gt;Глава 22. Освобождающие уловки&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Между превосходным ремесленником и подмастерьем существует связь естественного авторитетного характера – учитель знает, как делать работу, а ученик – нет. Подчинение такому авторитету не роняет ничьего достоинства, не исключает инициативу, не делает невозможным установление связей с коллегами. Неуверенность, требующая повиновения, есть полная противоположность естественному авторитету. Она гласит: «Я существо другой касты, я руководитель. Я принадлежу к классу мыслящих. Мои подчинённые наняты лишь для того, чтобы выполнять мои решения».     &lt;br /&gt;&lt;/em&gt;Глава 22. Кто здесь главный?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Команда - это сеть, а не иерархия. Несмотря на уважение к понятию &lt;strong&gt;лидерства&lt;/strong&gt; (культовое слово в нашей области), лидерству здесь просто нет места.      &lt;br /&gt;&lt;/em&gt;Глава 23. Сетевая модель поведения команды&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Где-то в глубинах нашей родовой памяти затаилась мысль, что работа должна быть в тягость. Если вам нравится делать что-либо, это уже не работа. Если вам это очень нравится, то это, должно быть, греховное занятие. Вам не следует этим заниматься слишком много, а может быть, и вообще. А уж платить за это вам точно не следует. Вам, наверное, следует найти что-то другое, что больше похоже на работу. Тогда вы будете уставать, скучать и вообще будете несчастны – как все остальные.     &lt;br /&gt;&lt;/em&gt;Часть 5. Удовольствие от работы? Здесь?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Препятствуйте критическим замечаниям вроде &amp;quot;Это дурацкая идея&amp;quot;, поскольку дурацкие идеи часто наводят других людей на умные мысли.     &lt;br /&gt;&lt;/em&gt;Глава 24. Мозговой штурм&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Здравый смысл и порядок - несомненно, желанные составляющие рабочего дня. Но еще остается время для приключений, глупостей и небольших доз созидательного беспорядка.     &lt;br /&gt;&lt;/em&gt;Глава 24. Обучение, путешествия, конференции, торжества, отдых&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Социология имеет большее значение, чем технология или даже деньги. Работа должна приносить продуктивное удовлетворение. Если работа не приносит радости, ничто другое уже не стоит внимания.     &lt;br /&gt;&lt;/em&gt;Глава 26. Как пробудить Хольгера&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Люди ненавидят перемены…&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Дело в том, что люди ненавидят перемены…&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Я хочу убедиться, что вы меня поняли.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Люди действительно ненавидят перемены.&lt;/em&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Очень сильно ненавидят.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Стив Мак – Менамин ( Steve McMenamin ) The Atlantic Systems Guild      &lt;br /&gt;&lt;/em&gt;Глава 30. Как сделать перемены возможными&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;И следует учесть, нет занятия более сложного, более сомнительного в перспективе, более опасного, чем быть во главе новых порядков. Врагами тебе становятся все те, кому на руку прежние порядки, а робкими защитниками – все те, кто может получить выгоду от новых.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Никколо Макиавелли «Государь» (1513)      &lt;br /&gt;&lt;/em&gt;Глава 30. А теперь послушаем другого знаменитого системного консультанта&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Основная реакция на перемены не логическая, но эмоциональная.     &lt;br /&gt;&lt;/em&gt;Глава 30. Классная идея, босс. Займусь немедленно&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Неспособный измениться никогда не станет лучше.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Том Демарко (1997)      &lt;br /&gt;&lt;/em&gt;Глава 30. Классная идея, босс. Займусь немедленно&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Как ни парадоксально, изменения могут быть успешными лишь в том случае, если неудача (хотя бы до некоторой степени) также допустима.     &lt;br /&gt;&lt;/em&gt;Глава 30. Безопасность прежде всего&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Предприятия интеллектуальной сферы должны осознавать, что именно вложения в человеческий капитал важнее всего. Хорошие компании давно это поняли     &lt;br /&gt;&lt;/em&gt;Глава 31. Под дудку Уолл-стрит&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Обучение ограничено способностью организации сохранять своих людей     &lt;br /&gt;&lt;/em&gt;Глава 32. Опыт и обучение&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Дробление особенно вредоносно, когда две задачи требуют качественно различных рабочих привычек. Так, смешивание проектирования (требующего много времени на погружение, относительной тишины и качественного времени взаимодействия с небольшой группой людей) с задачей поддержки по телефону (требующей постоянного прерывания, постоянной доступности, быстрой смены фокуса) гарантированно минимизирует ход работы над той из задач, которая требует большего сосредоточения.     &lt;br /&gt;&lt;/em&gt;Глава 33. Снова дробление&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2204660031858645862?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2204660031858645862/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_07.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2204660031858645862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2204660031858645862'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2_07.html' title='Человеческий фактор. Успешные проекты и команды. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-1127163313838661485</id><published>2009-12-07T00:55:00.001-08:00</published><updated>2009-12-14T09:50:47.210-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='Том Демарко'/><category scheme='http://www.blogger.com/atom/ns#' term='Тим Листер'/><title type='text'>Человеческий фактор. Успешные проекты и команды. Часть 1</title><content type='html'>&lt;p class="MsoNormal" style="font-family: verdana" align="justify"&gt;&lt;font face="Georgia"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Сегодня я хочу опубликовать цитаты из замечательной книги Тома Демарко и Тимоти Листера &amp;quot;Человеческий фактор: успешные проекты и команды&amp;quot; (рецензия на &lt;a href="http://sergeyteplyakov.blogspot.com/2008/12/blog-post.html"&gt;моем блоге&lt;/a&gt; и сайте &lt;a href="http://rsdn.ru/res/book/prog/peopleware.xml"&gt;rsdn.ru&lt;/a&gt;). Как и книга Фредерика Брукса, эта книга произвела на меня сильное впечатление и является одной из самых любимых в библиотеке компьютерной литературы. В очередной раз перелистывая ее, понимаешь, насколько много в ней интересных мыслей и насколько эти мысли редко доходят до нужных голов и еще реже воплощаются на практике.&lt;/p&gt;  &lt;p align="justify"&gt;Из-за огромного количества, цитаты этой книги я также разбил на два сообщения, примерно пополам. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Серьёзные проблемы в нашей работе имеют не столько технологическую сколько социологическую природу.&lt;/em&gt;&amp;#160;&amp;#160; &lt;br /&gt;Глава 1. Суть вопроса &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Главная причина, по которой мы склонны сосредоточивать усилия на технической, а не на человеческой стороне работы, – вовсе не приоритет первой перед второй. Технические вопросы проще решать. Гораздо проще организовать установку нового оптического привода, чем выяснить, почему Хорас в замешательстве или почему Сьюзен выражает недовольство компанией уже после нескольких месяцев работы. Человеческие взаимодействия сложны, их проявления не бывают очевидными и прозрачными, но они имеют большее значение, чем любой другой аспект работы.      &lt;br /&gt;&lt;/em&gt;Глава 1. Миражи высоких технологий &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Если вы концентрируетесь больше на технологии, чем на социологии, то уподобляетесь персонажу водевиля, который потерял ключи на тёмной улице, а ищет их на соседней, потому что, как объясняет он сам: «Там не так темно».      &lt;br /&gt;&lt;/em&gt;Глава 1. Миражи высоких технологий &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Нет ничего более обескураживающего для любого работника, чем чувство, что его собственной мотивации не хватает и потому требуются «добавки» со стороны начальства.      &lt;br /&gt;&lt;/em&gt;Глава 2. Менеджмент, простецкое определение &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Вена, которая, по словам Билли Джоэла, ждёт тебя, – это последняя остановка на твоём жизненном пути. Когда ты окажешься там, все будет кончено. Если вам кажется, что участников проекта никогда не интересуют такие серьёзные вещи, подумайте получше. Ваши люди очень остро понимают, что человеку дана лишь одна короткая жизнь, и они слишком хорошо знают, что в этой жизни должно быть что-то поважнее, чем их глупая работа.      &lt;br /&gt;&lt;/em&gt;Глава 3. Письмо из дома &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Сверхурочные сотрудников, сидящих на окладах, – это плод воображения наивного руководителя. Да, в паре лишних субботних часов, позволяющих уложиться в сроки и сдать проект в понедельник, может быть очевидная польза, но за ними всегда следует равносильный период компенсации, сокращения рабочего времени, позволяющий сотрудникам вернуться в ритм привычной жизни. В конечном итоге каждый час сверхурочных компенсируется часом недоработки. В краткосрочной перспективе такой компромисс может принести пользу проекту, но в долгосрочной польза нивелируется.      &lt;br /&gt;&lt;/em&gt;Глава 3. Сверхурочные не существуют &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Сверхурочные похожи на спринт: он имеет смысл на последней стометровке марафонской дистанции для тех людей, у которых ещё остались силы, но если начать спринт на первом километре, вы только зря потеряете время. Если заставлять людей постоянно бежать в темпе спринта, они лишь потеряют уважение к руководителю. Лучшие из сотрудников уже все это проходили – они будут молчать и закатывать глаза, пока руководитель бредит, что эту работу просто необходимо закончить к апрелю. После этого они воспользуются компенсирующими недоработками и в конечном итоге каждую неделю будут работать не более сорока часов. Так реагируют лучшие; все остальные – просто трудоголики.&lt;/em&gt;     &lt;br /&gt;Глава 3. Сверхурочные не существуют &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Осознание того, что б&lt;strong&gt;о&lt;/strong&gt;льшие ценности (семья, любовь, дом, молодость) принесены в жертву меньшим (работа), разрушительно. Оно заставляет человека, совершившего столь глупую жертву, искать отмщения. Он не пойдёт к шефу, чтобы спокойно и вдумчиво объяснить, что положение вещей должно измениться; он просто уйдёт – ещё один человек, который сгорел на работе. Так или иначе, его больше не будет.&lt;/em&gt;     &lt;br /&gt;Глава 3. Трудоголики &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В личной жизни причины эмоциональных реакций многочисленны и разнообразны, но на рабочем месте главным источником душевных потрясений является самооценка, находящаяся под угрозой.      &lt;br /&gt;&lt;/em&gt;Глава 4. Качество? Если успеем &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;«Рынку абсолютно плевать на такой уровень качества». Прочтите эти слова и прослезитесь, потому что они почти всегда правдивы. Люди могут с пеной у рта говорить о качестве и горько жаловаться на его отсутствие, но когда приходит время платить за качество, их действительные ценности выходят на поверхность.&lt;/em&gt;     &lt;br /&gt;Глава 4. Бегство от совершенства &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;В 1954 году англичанин Сирил Паркинсон выразил мнение, что работа растёт, заполняя любое отведённое под неё время. Сейчас это мнение известно как закон Паркинсона.      &lt;br /&gt;&lt;/em&gt;Глава 5. Еще раз о законе Паркинсона &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Даже в тех редких случаях, когда давление на человека остаётся единственным вариантом, руководитель должен это давление оказывать последним. Эффект гораздо сильнее, когда давление исходит от команды. Нам встречались случаи однородных команд, где руководителям пришлось бы занимать очередь, чтобы покричать на единственного человека, который не старается вмести со всеми.      &lt;br /&gt;&lt;/em&gt;Глава 5. А нашего Ивана вы видели?! &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Решение о том, оказывать ли временное давление на проект, следует принимать так же, как решение о наказании ребёнка. Если вы безупречно выбираете время и правомерность очевидна, положительный эффект вероятен. Если же вы делаете это постоянно, то это уже признак ваших собственных проблем.      &lt;br /&gt;&lt;/em&gt;Глава 5. Университет Нового Южного Уэльса: некоторые данные &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Назначение руководителя не в том, чтобы заставить людей работать, а в том, чтобы создать им условия для работы      &lt;br /&gt;&lt;/em&gt;Глава 6. Это и есть руководство &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Есть миллион способов потерять рабочий день и ни одного, который бы компенсировал потерю      &lt;br /&gt;&lt;/em&gt;Часть 2. Офисная среда &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Необходимость оставаться дома, задерживаться на работе, приходить раньше, чтобы спокойно поработать, – убийственное обвинительное заключение против офисной среды. Поразительно не то, что так часто нет возможности поработать на своём рабочем месте, поразительно, что все знают об этом и ничего никогда не делают, чтобы исправить положение      &lt;br /&gt;&lt;/em&gt;Глава 8. «С девяти до пяти здесь совершенно невозможно работать» &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Поток – это состояние глубокого, почти медитативного погружения в работу. В этом состоянии человек испытывает лёгкое чувство эйфории и не замечает течения времени: «Я начал работать. Когда оторвался, прошло уже три часа». Человек не прикладывает сознательных усилий, потому что работа, кажется, идёт потоком.      &lt;br /&gt;&lt;/em&gt;Глава 10. Поток &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;К сожалению, поток нельзя «включать» по желанию. Требуется медленное погружение в предмет, не менее пятнадцати минут концентрации, прежде чем появится это состояние. В период погружения вы особенно чувствительны к шуму и остановкам. Шумная среда может затруднить или сделать невозможным вход в поток      &lt;br /&gt;&lt;/em&gt;Глава 10. Поток&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-1127163313838661485?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/1127163313838661485/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_07.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1127163313838661485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/1127163313838661485'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1_07.html' title='Человеческий фактор. Успешные проекты и команды. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2284279945907316444</id><published>2009-12-04T01:13:00.001-08:00</published><updated>2009-12-14T10:05:30.784-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Фредерик Брукс'/><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><title type='text'>Мифический человеко-месяц. Часть 2</title><content type='html'>&lt;p align="justify"&gt;Обещанная вторая часть цитат из замечательной книги Фредерика Брукса.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;Как оказывается, что проект запаздывает на год?        &lt;br /&gt;... Сначала он запаздывает на один день.         &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Глава 14. Назревание катастрофы     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Никто не любит и сам приносить дурные вести, поэтому они смягчаются без злого намерения ввести в заблуждение.&lt;/em&gt;     &lt;br /&gt;Глава 14. Вехи или помехи?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Каждому начальнику нужно два вида данных: информация о срывах плана, которая требует вмешательства, и картина состояния дел, чтобы быть в курсе.      &lt;br /&gt;&lt;/em&gt;Глава 14. Под ковром     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Компьютерная программа - это послание человека машине. Строго выстроенный синтаксис и тщательные определения нацелены на то, чтобы бездумной машине стали понятны намерения человека.&lt;/em&gt;     &lt;br /&gt;Глава 15. Обратная сторона     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&lt;b&gt;Нет ни одного открытия ни в технологии, ни в методах управления, одно только использование которого обещало бы в течение ближайшего десятилетия на порядок повысить производительность, надежность, простоту разработки программного обеспечения.&lt;/b&gt;&lt;/i&gt;     &lt;br /&gt;Глава 16 Серебряной пули нет - сущность и акциденция в программной инженерии     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Серебряных пуль не только не видно в настоящее время, но в силу самой природы программного обеспечения маловероятно, что они вообще будут найдены — не будет изобретений, способных повлиять на продуктивность создания, надежность и простоту программного обеспечения так, как электроника, транзисторы и интегральные схемы — на аппаратное обеспечение компьютеров.&lt;/em&gt;     &lt;br /&gt;Глава 16. Неизбежны ли трудности? Трудности, вытекающие из сущности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Сложность программ является существенным, а не второстепенным свойством. Поэтому описания программных объектов, абстрагирующиеся от их сложности, часто абстрагируются от их сущности. Математика и физические науки за три столетия достигли больших успехов, создавая упрощенные модели сложных физических явлений, получая из этих моделей свойства и проверяя их опытным путем. Это удавалось благодаря тому, что сложности, игнорировавшиеся в моделях, не были существенными свойствами явлений. Но это не действует, когда сложности являются сущностью.&lt;/em&gt;     &lt;br /&gt;Глава 16. Глава 16. Неизбежны ли трудности? Трудности, вытекающие из сущности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Эйнштейн неоднократно утверждал, что природа должна иметь простые объяснения, поскольку Богу не свойственны капризность и произвол.      &lt;br /&gt;У разработчика программного обеспечения нет такой утешительной веры. Сложность, с которой он должен совладать, по большей части является произвольной, необоснованно вызванной многочисленными человеческими установлениями и системами, которым должны удовлетворить его интерфейсы. Системы различаются интерфейсами и меняются во времени не в силу необходимости, а лишь потому, что были созданы не Богом, а разными людьми.&lt;/em&gt;     &lt;br /&gt;Глава 16. Глава 16. Неизбежны ли трудности? Трудности, вытекающие из сущности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Правда заключается в том, что клиенты не знают, чего хотят. Обычно они не знают, на какие вопросы нужно дать ответ, и почти никогда не задумывались над задачей настолько детально, как это нужно указать в спецификации.      &lt;br /&gt;&lt;/em&gt;Глава 16. Перспективные подходы к концептуальной сложности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я пойду дальше и стану утверждать, что на практике клиенты, даже вместе с инженерами-программистами, не в состоянии указать полно, строго и корректно точные требования к современному программному продукту, прежде чем будут созданы и опробованы какие-либо версии продукта, спецификации к которому они составляют.&lt;/em&gt;     &lt;br /&gt;Глава 16. Перспективные подходы к концептуальной сложности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Программисты принадлежат к наиболее интеллектуальной части общества, следовательно, они в состоянии изучать хорошие приемы.      &lt;br /&gt;&lt;/em&gt;Глава 16. Перспективные подходы к концептуальной сложности     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Кто хочет увидеть образец совершенства,      &lt;br /&gt;Тот мечтает о том, чего никогда не было, нет и не будет       &lt;br /&gt;&lt;/em&gt;Александр Поуп &amp;quot;О критике&amp;quot;     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;В конце концов, я по происхождению программист, а оптимизм - это профессиональная болезнь данного ремесла      &lt;br /&gt;&lt;/em&gt;Глава 17. Анализ Харела     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Любыми средствами можно писать и плохие, и хорошие программы. Если не учить людей проектированию, то языке не имеют большого значения. Результатом будут плохие разработки с помощью этих языков и малая выгода.      &lt;br /&gt;&lt;/em&gt;Глава 17. Объектно-ориентированное программирование: а медная пуля не подойдет?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Хорошее эмпирическое правило говорит, что повторно используемые компоненты потребуют вдвое больших затрат, чем &amp;quot;одноразовые&amp;quot; компоненты      &lt;br /&gt;&lt;/em&gt;Эдвард Йордон     &lt;br /&gt;Глава 17. Что с повторным использованием?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;История человечества — это пьеса, в которой сюжеты постоянны, сценарии медленно меняются с развитием культуры, а декорации меняются непрерывно. Поэтому в ХХ веке мы узнаем себя в Шекспире, Гомере и Библии. Поэтому в той мере, в какой «МЧ-М» написан о людях, он устаревает медленно.      &lt;br /&gt;&lt;/em&gt;Глава 19. Для чего понадобилось юбилейное двадцатое издание?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Архитектора можно сравнить с режиссером, а менеджера - с продюсером кинокартины      &lt;br /&gt;&lt;/em&gt;Глава 19. Центральные аргумент: концептуальная целостность и архитектор     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Дополнительно привлекаемые на поздних стадиях проекта работники должны быть игроками команды, стремящимися войти в игру и вписаться в процесс, а не пытаться изменить или усовершенствовать сам процесс!      &lt;br /&gt;&lt;/em&gt;Глава 19. Насколько мифичен человеко-месяц? Модель и данные Бёма     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Если согласиться, что, как я неоднократно доказывал на протяжении этой книги, творчество исходит от личностей, а не организационных структур и процессов, тогда главная задача менеджера программного проекта — создать организационную структуру и рабочий процесс, способствующий творчеству и инициативе, а не подавляющие их.      &lt;br /&gt;&lt;/em&gt;Глава 19. Сила отказаться от власти     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Немногим Бог дает право зарабатывать на жизнь тем, чем они с радостью занимались бы по собственной воле, по увлечению. Я благодарен судьбе.      &lt;br /&gt;&lt;/em&gt;Эпилог. Пятьдесят лет удивления, восхищения и радости     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Область связанных с компьютерами знаний претерпела взрыв, как и соответствующая технология. Будучи аспирантом в середине 50-х, я мог прочесть все журналы и труды конференций. Я мог оставаться на современном уровне во всей научной дисциплине. Сегодня же мне в моей интеллектуальной жизни приходится с сожалением расставаться с интересами то в одной, то в другой подобласти, поскольку количество документов превысило всякую возможность справиться с ними. Масса интересов, масса замечательных возможностей для учебы, исследований, размышлений. Чудесное затруднение! Не только конца не видно, но и шаг не замедляется. В будущем нас ожидают многие радости.      &lt;br /&gt;&lt;/em&gt;Эпилог. Пятьдесят лет удивления, восхищения и радости &lt;/p&gt;  &lt;p&gt;Все цитаты из книги Фредерика Брукса “Мифический человеко-месяц”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/blog-post_14.html"&gt;Радости профессии&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2284279945907316444?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2284279945907316444/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2284279945907316444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2284279945907316444'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/2.html' title='Мифический человеко-месяц. Часть 2'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-4840211991131934412</id><published>2009-12-04T01:11:00.001-08:00</published><updated>2009-12-21T10:34:24.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Фредерик Брукс'/><category scheme='http://www.blogger.com/atom/ns#' term='Управление проектами'/><title type='text'>Мифический человеко-месяц. Часть 1</title><content type='html'>&lt;p align="justify"&gt;Книга Фредерика Брукса “Мифический человеко-месяц” произвела на меня неизгладимое впечатление (более подробно можно почитать на &lt;a href="http://sergeyteplyakov.blogspot.com/2009/02/blog-post.html"&gt;моем блоге&lt;/a&gt; или на сайте &lt;a href="http://rsdn.ru/res/book/prog/brooks.xml"&gt;rsdn.ru&lt;/a&gt;). Просто удивительно, насколько книга, написанная уже почти 35 лет назад может быть столь актуальной сегодня, особенно учитывая темпы, с какими развиваются компьютерная индустрия. &lt;/p&gt;  &lt;p align="justify"&gt;Многие цитаты из этой книги давно уже стали классическими, практически каждый, занятый в области разработки ПО слышали о “законе Брукса” и “серебряной пуле”, но помимо этих известных высказываний в книге содержится много других интересных мыслей.&lt;/p&gt;  &lt;p align="justify"&gt;Поскольку этих самых мыслей набралось слишком много, то я решил разбить цитаты на две части.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Почему заниматься программированием интересно? Какими радостями вознаграждаются те, кто им занимается?      &lt;br /&gt;Это радость, получаемая при создании чего-либо своими руками. Как ребенок радуется, делая куличики из песка, так и взрослый получает удовольствие, создавая какие-либо вещи, особенно если сам их и придумал. Я думаю, что этот восторг — отражение восторга Господа, творящего мир, восторга, проявляющегося в индивидуальности и новизне каждого листочка и каждой снежинки.       &lt;br /&gt;&lt;/em&gt;Глава 1. Радости профессии     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Разработка грандиозных идей — это удовольствие, а поиск паршивых маленьких «жучков» — это всего лишь работа. В каждом творческом деле бывают ужасные периоды однообразного и кропотливого труда, и программирование не является исключением.      &lt;br /&gt;&lt;/em&gt;Глава 1. Печали профессии     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Программные проекты чаще проваливаются из-за нехватки календарного времени, чем по всем остальным причинам вместе взятым.      &lt;br /&gt;&lt;/em&gt;Глава 2. Этот мифический &amp;quot;человеко-месяц&amp;quot;     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;При обнаружении отставания от графика естественной и общепринятой реакцией является увеличение числа разработчиков. Это все равно, что тушить пламя бензином. В результате дела идут значительно хуже. Чем сильнее пламя, тем больше нужно бензина, и в итоге этот путь приводит к катастрофе.      &lt;br /&gt;&lt;/em&gt;Глава 2. Этот мифический &amp;quot;человеко-месяц&amp;quot;     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;В основе планирования разработки программ лежит ложное допущение, что все будет хорошо, т.е. каждая задача займет столько времени, сколько «должна» занять.&lt;/em&gt;     &lt;br /&gt;Глава 2. Оптимизм     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Число занятых и число месяцев являются взаимозаменяемыми величинами лишь тогда, когда задачу можно распределить среди ряда работников, &lt;strong&gt;которые не имеют между собой взаимосвязи&lt;/strong&gt;. Это верно, когда жнут пшеницу или собирают хлопок, но в системном программировании это далеко не так.       &lt;br /&gt;&lt;/em&gt;Глава 2. Человеко-месяц     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Чтобы родить ребенка требуется девять месяцев независимо от того, сколько женщин привлечено к решению данной задачи.      &lt;br /&gt;&lt;/em&gt;Глава 2. Человеко-месяц     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Поскольку создание программного продукта является по сути системным проектом — практикой сложных взаимосвязей, затраты на обмен данными велики и быстро начинают преобладать над сокращением сроков, достигаемым в результате разбиения задачи на более мелкие подзадачи. В этом случае привлечение дополнительных работников не сокращает, а удлиняет график работ.      &lt;br /&gt;&lt;/em&gt;Глава 2. Человеко-месяц     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Для программиста, как и для повара, давление со стороны хозяина может определять запланированный срок завершения задачи, но не может определять время ее фактического завершения. Омлет, обещанный через две минуты, может успешно жариться, но если через две минуты он не готов, то у клиента есть две возможности: ждать еще или съесть его сырым. Тот же выбор встает и перед заказчиком программного обеспечения.      &lt;br /&gt;      &lt;br /&gt;У повара есть еще одна возможность: добавить жару. В результате омлет часто оказывается безнадежно испорченным: горелым с одного края и сырым — с другого.       &lt;br /&gt;      &lt;br /&gt;Я не думаю, что у менеджеров программных продуктов меньше храбрости или твердости, чем у поваров или других менеджеров в инженерных областях. Но липовые графики, нацеленные на желательную хозяину дату, встречаются здесь значительно чаще, чем в любых других инженерных областях. Очень тяжело, рискуя потерять рабочее место, с энергией и любезностью отстаивать срок, который определен без применения каких-либо количественных методов при недостатке данных и подкреплен, в основном, интуицией менеджера.       &lt;br /&gt;&lt;/em&gt;Глава 2. Робость в оценках     &lt;br /&gt;    &lt;br /&gt;&lt;i&gt;&lt;b&gt;Если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше.&lt;/b&gt;&lt;/i&gt;     &lt;br /&gt;Глава 2. Упрощенная формулировка закона Брукса     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я убежден, что концептуальная целостность является важнейшей характеристикой системного проекта. Лучше убрать из системы отдельные необычные возможности и усовершенствования и реализовать единый набор конструктивных идей, чем оснастить ее многими хорошими, но невзаимосвязанными и несогласованными идеями.      &lt;br /&gt;&lt;/em&gt;Глава 4. Концептуальное единство     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Весь личный опыт убеждает меня, и я пытался это показать, что простоту пользования системой определяет ее концептуальная целостность. Достойные внимания функции и идеи, которые не объединяются с основными концепциями системы, лучше оставить в стороне. Если таких важных, но несовместимых идей появляется слишком много, выкидывают всю система и начинают разработку целостной системы сначала, основывая ее на иных основополагающих концепциях.&lt;/em&gt;     &lt;br /&gt;Глава 4.Аристократия и демократия     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Архитектор всегда должен быть готов показать пример реализации любой описанной им функции, но он не должен пытаться навязывать определенную реализацию.&lt;/em&gt;     &lt;br /&gt;Глава 6. Письменные спецификации - руководство     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Лучший друг менеджера проекта — его постоянный противник, независимая организация, тестирующая продукт. Группа проверяет соответствие машин и продуктов спецификациям и выступает пособником дьявола, указывая на все замеченные дефекты и несоответствия. Каждой организации, ведущей разработки, нужна такая независимая группа технического аудита, которая должна быть неподкупна.      &lt;br /&gt;&lt;/em&gt;Глава 6. Тестирование продукта     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Мыслители встречаются редко, практики еще реже, но реже всего - мыслители-практики&lt;/em&gt;     &lt;br /&gt;Глава 7. Организация крупного программного проекта     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Что хуже всего получается у менеджеров проектов, так это использование технического гения людей, не очень сильных в администрировании      &lt;br /&gt;&lt;/em&gt;Глава 7. Организация крупного программного проекта     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Линейная экстраполяция данных, относящихся к коротким задачам, бессмысленна. Если экстраполировать время, за которое можно пробежать стометровку, то окажется, что можно пробежать милю менее чем за три минуты.      &lt;br /&gt;&lt;/em&gt;Глава 8. Объявляя удар &lt;/p&gt;  &lt;p align="justify"&gt;   &lt;br /&gt;&lt;em&gt;В неопубликованном исследовании 1964 года, которое провел E. F. Bardain, показано, что программисты продуктивно используют 27% рабочего времени.     &lt;br /&gt;&lt;/em&gt;Глава 8. Данные Портмана. Сноска №6&lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Необходимо записывать принятые решения. Только когда пишешь, становятся видны пропуски и выявляются несогласованности. В процессе записывания возникает необходимость принятия сотен мини-решений, и их наличие отличает четкую и ясную политику от расплывчатой.      &lt;br /&gt;&lt;/em&gt;Глава 10. Зачем нужны формальные документы?     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Планируйте выбросить первую версию — вам все равно придется это сделать.&lt;/em&gt;     &lt;br /&gt;Глава 11.Опытные заводы и масштабирование     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Нежелание документировать проект происходит не только от лени или недостатка времени. Оно происходит от нежелания проектировщика связывать себя отстаиванием решений, которые, как он знает, предварительные. «Документируя проект, проектировщик становится объектом критики со всех сторон, и должен защищать все, что написал. Если организационная структура может представлять угрозу, не будет документироваться ничего, кроме того, что нельзя оспорить.»      &lt;br /&gt;&lt;/em&gt;Глава 11. Планируйте организационную структуру     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Фундаментальная проблема при сопровождении программ состоит в том, что исправление одной ошибки с большой вероятностью (20-50 процентов) влечет появление новой. Поэтому весь процесс идет по принципу «два шага вперед, один назад».&lt;/em&gt;     &lt;br /&gt;Глава 11. Два шага вперед, шаг назад     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Я убежден, что только инертность и лень препятствуют повсеместному принятию этих инструментов, технические трудности более не являются изменениями.      &lt;br /&gt;&lt;/em&gt;Глава 12. Языки высокого уровня и интерактивное программирование     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;Среди современных кудесников, как и встарь, встречаются хвастуны: «Я могу писать программы, которые управляют воздушным движением, перехватывают баллистические ракеты, делают переводы по банковским счетам, управляют производственными линиями». На что есть ответ: «И я могу, и каждый может, но будет ли работать то, что ты напишешь?»      &lt;br /&gt;&lt;/em&gt;Глава 13. Целое и части&lt;/p&gt;  &lt;p&gt;Все цитаты из книги Фредерика Брукса “Мифический человеко-месяц”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/1.html"&gt;Часть 1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/2.html"&gt;Часть 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ru-quotes.blogspot.com/2009/12/blog-post_14.html"&gt;Радости профессии&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;UPD: Добавлена цитата из главы 8. Спасибо &lt;a href="http://www.blogger.com/profile/18242945147415142337" target="_blank"&gt;&lt;font color="#0000ff"&gt;intr&lt;/font&gt;&lt;/a&gt; за наводку:)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-4840211991131934412?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/4840211991131934412/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/4840211991131934412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/4840211991131934412'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/1.html' title='Мифический человеко-месяц. Часть 1'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-8925178869243994646</id><published>2009-12-03T03:56:00.001-08:00</published><updated>2009-12-03T07:36:33.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Крис Дейт'/><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><title type='text'>Крис Дейт. “Введение в системы баз данных”</title><content type='html'>&lt;p align="justify"&gt;Крис Дейт в предисловии к своей замечательной книге &amp;quot;Введение в системы баз данных&amp;quot; приводит следующую выдержку Бертрана Рассела: &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Меня обвиняли в привычке менять свои суждения… Но разве мог бы физик, работающий с 1900 года, например, похвастаться в середине двадцатого века тем, что его суждения не изменились за последние полстолетия?... Та философия, которую я ценю и которой стараюсь следовать, научна в том смысле, что мы должны всегда стремиться получить неопровержимые знания, но новые открытия могут выявить прежние ошибки, неизбежные для любого беспристрастного разума. Когда бы и что бы я ни говорил, сейчас или в прошлом, я никогда не утверждал, что это – окончательная истина. Я утверждаю лишь то, что в свое время высказанное мной мнение было вполне обоснованным… Я был бы очень удивлен, если бы дальнейшие исследования не показали, что его необходимо пересмотреть. К тому же я никогда не высказывал свое мнение как окончательный вердикт, а просто подчеркивал, что это – лучшее, что я мог сделать в то время для достижения ясного и точного понимания. Моей целью было, прежде всего, полная ясность во всем.&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-8925178869243994646?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/8925178869243994646/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_9397.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8925178869243994646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/8925178869243994646'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_9397.html' title='Крис Дейт. “Введение в системы баз данных”'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-2921989910315986077</id><published>2009-12-03T03:47:00.001-08:00</published><updated>2009-12-03T07:37:05.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Философия программирования'/><category scheme='http://www.blogger.com/atom/ns#' term='Бьерн Страуструп'/><title type='text'>Интервью++: Бьерн Страуструп об эволюции языков</title><content type='html'>&lt;p style="margin: 0cm 0cm 10pt" class="MsoNormal" align="justify"&gt;&lt;font color="#000000" size="3" face="Calibri"&gt;Источник: MSDN Magazine 5/2008&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin: 0cm 0cm 10pt" class="MsoNormal" align="justify"&gt;&lt;font color="#000000" size="3" face="Calibri"&gt;&lt;em&gt;Мне кажется, что языки, используемые нами для выражения своих идей, становятся частью нас самих, поэтому, если вы знаете только один язык, может показаться, будто сторонники других языков представляют опасность лично для вас. Мне представляется, что выход из этой ситуации – освоение других языков. Сомневаюсь, что можно быть профессионалом в области ПО и знать лишь один язык программирования. Может быть и экономическая причина: фундаментальные знания выходят за границы языка программирования в отличие от многих практических навыков. Поэтому, если я знаю только язык &lt;span style="mso-ansi-language: en-us" lang="EN-US"&gt;X&lt;/span&gt; и его наборы инструментов, а вы являетесь сторонником языка &lt;span style="mso-ansi-language: en-us" lang="EN-US"&gt;Y&lt;/span&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;и его наборов инструментов, вы представляете угрозу для источника моего заработка. И вновь решение, как мне кажется, - в знании нескольких языков и наборов инструментов (а также твердое понимание фундаментальных концепций).&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8666058998503471555-2921989910315986077?l=ru-quotes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ru-quotes.blogspot.com/feeds/2921989910315986077/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_03.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2921989910315986077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666058998503471555/posts/default/2921989910315986077'/><link rel='alternate' type='text/html' href='http://ru-quotes.blogspot.com/2009/12/blog-post_03.html' title='Интервью++: Бьерн Страуструп об эволюции языков'/><author><name>Sergey Teplyakov</name><uri>https://profiles.google.com/108967431947412296254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-2weHUILo1ns/AAAAAAAAAAI/AAAAAAAABRo/POab-anD6xA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666058998503471555.post-7152396659544969581</id><published>2009-12-03T03:25:00.000-08:00</published><updated>2009-12-03T03:25:26.288-08:00</updated><title type='text'>Цитатник. Начало</title><content type='html'>&lt;div style="text-align: justify;"&gt;Для меня уже давно стало привычкой читать специализированную литературу с набором из двух десятков закладок и карандашом за ухом, в противном случае столь приятное времяпрепровождение мне кажется пустой тратой времени. При чтении книг нужно обязательно критически оценивать поступающую информацию, делать какие-то пометки на полях, подчеркивать интересные или спорные мысли, выписывать цитаты, обсуждать интересные моменты.&lt;br /&gt;&lt;br /&gt;Часто, в разговоре с коллегами, обсуждая тот или иной вопрос, или работая над статьей по определенной теме, вспоминаешь, что вроде бы этот автор что-то писал по этому поводу. Чтобы убедиться в этом приходится доставать книгу, рыться по закладкам, вспоминая хотя бы в какой части книги была затронута эта тема.&lt;br /&gt;&lt;br /&gt;Поскольку у меня подобные ситуации возникают с завидной периодичностью, я решил завести отдельный блог, в котором будут публиковаться интересные мысли других людей, однажды (или многократно) изложенные на бумаге. При этом, не обязательно, что эти мысли будут касаться разработки программного обеспечения или другой темы, непосредственно связанной с компьютерами. Тема разработки ПО будет ключевой, но далеко не единственной. Многие авторы компьютерной литературы используют в качестве цитат высказывания известных людей, и если мне это высказывание покажется интересным, то оно имеет все шансы попасть сюда. Кроме того, привычка читать с карандашом настолько въелась в мозг, что я теперь практически любую книгу читаю вместе с ним, в результате чего здесь могут появляться цитаты из книг самых различных направ
