Архив за месяц: Ноябрь 2015

Инструментарий программиста

Программист должен овладеть набором различных практик, методов разработки и подходов. А еще должен научиться правильно выбирать из этого набора инструменты, которые лучше всего подходят к каждому конкретному проекту и случаю.

Когда в руках любимый молоток, все вокруг становится похожим на гвозди.

Документация и код

Документация на ПО содержится в коде. 

Документация, написанная на бумаге очень быстро устаревает, потому что код пишется быстрее, чем обновляется документация. 

Это не значит, что документация вообще не нужна. Общие концепции и архитектура меняются не так часто, как детали поведения системы или список функционала. Поэтому для общего знакомства с системой документация все же необходима, но все ответы о том, какое поведение от ПО ожидается в той или иной ситуации, находятся в коде. 

Код дает окончательный ответ.

Если документация содержится в коде, значит и требования к коду предъявляются особые:

  1. Код должен быть удобочитаемым, чтобы читатель кода мог быстро понять, что делает код и получить ответ на вопрос по поведению системы. 
  2. Код должен быть кратким
  3. Код должен придерживатся единого стиля, принятого в программе, и единых подходов

Хорошие книги по этой теме:

  1. Clean code  Роберта Мартина. В русском переводе она продается под названием «Чистый код»
  2. Art of readable code

Скоростной метод инженера Грабина

Только что закончил читать мемуары инженера артиллерийских систем Грабина. Помимо интересной исторической информации в мемуарах Грабин подробно описывает свой «скоростной метод проектирования». Конечно проектирование пушек сильно отличается от проектирования программного обеспечения хотя бы потому, что пушки это самое что ни на есть hardware. Но сам подход очень интересен. 

 В те времена как правило создание пушки шло классическим методом waterfall: получение задания от военных с ттх будущей пушки, проектирование, изготовление опытных образцов кустарным способом, испытание на заводе, представление пушки на военные испытания, утверждение и прием пушки на вооружение, создание технологической документации, создание по этой документации техпроцессов, инструментов и станков, обучение персонала, развертывание производства. 

В лучшем случае на это уходило от года до пяти лет. В лучшем случае пушку браковали на испытаниях, а в худшем — после приемки опытного образца ее вообще не могли изготовить в массовом производстве. Скоростной метод позволил изготовить пушку от чертежа до массового производства за 45 дней. Каким образом? 

Смысл скоростного проектирования по Грабину заключается в том, что все процессы от проектирования до постановки пушки на поток начинаются одновременно. Проектирование пушки начинается одновременно с созданием технологической документации для массового производства пушки. Для тех времен такой подход был очень необычным. Как можно ставить пушку на поток, если она не прошла воинских испытаний? А если она не пройдет, получается все сделано зря? Ответ Грабина: пушка создается так, что она гарантированно пройдет испытания. За счет каких средств эта гарантия достигается?

1.  Высококачественное проектирование. Проектировщики систем тесно работают с технологами из цехов. Таким образом детали на ватмане сразу же оцениваются с точки зрения технологичности их изготовления. Деталь проектировщик проектирует так, что она точно может быть изготовлена в металле, нужного качества и в нужное время и за требуемую стоимость. Таким образом исключались ситуации, когда деталь нарисованная на ватмане выглядит красиво, но практически не реализуема, или когда деталь не могут выточнить с заданной точностью имеющиеся специалисты цеха. В программировании это называется: взаимодействие с админами и программирование с учетом специфики развертывания приложения; взаимодействие системных архитекторов с реальными программистами. 

2. Использование типовых компонентов. Каждая следующая пушка конструкторского бюро Грабина использовала имеющиеся компоненты от предыдущей пушки. Это позволяло производить одновременно две разные пушки из одних и тех же деталей с незначительными изменениями, упрощало конструкцию, удешевляло производство, в боевых условиях детали легко было заменить, взяв их из другой пушки. Детали, вылизанные на предыдущих пушках, гарантировали качество работы следующей пушки. В программировании это называется: повторное использование кода, модульный дизайн. 

3. Постоянный контакт конструкторов с артиллеристами при проектировании и испытании. Помимо того, что это требовалось военной приемкой,  присутствие на испытаниях помогало конструкторам оценить свои решения в рельном бою, в реальной ситуации стрельбы. Так конструктора видели, как ошибки на ватмане могут сказаться в реальных боевых условиях на успехе выполнения боевой задачи. В программировании это называется: взаимодействие с пользователями. 

4. Эргономика. При проектировании Грабин и его конструкторы прибегали к помощи врача-физиолога, который давал ценные советы по эргономике органов упревленияпушкой. Благодаря этому пушки Грабина славились удобством работы с ними в самых критических боевых ситуациях. В программировании это называтся: юзабилити. 

Далее Грабин приводит пример того, как его скоростной метод пытались перенять другие военные заводы. Так как метод формально не был описан, при внедрении другие заводы пользовались слухами и догадками и своими собственными домыслами. В начале 1941 года Грабина пригласили на коференцию, где он должен был рассказать о своем методе директорам и конструкторам других заводов. На коференции перед ним выступали другие докладчики, которые хвастались, что метод Грабина у них уже внедрен. И жаловались что метод не работает. Грабин с ужасом слышал, как его метод заменяли обычной штурмовщиной, авралами и переработками гигантских ресурсов в брак. Ничего не напоминает? Cargo cult методологий в программировании?