Свежий номер №23 (400) / В качестве оправдания за свою статью в номере 16 (393)
 
Дата публикации: 19.06.2001

Сергей Козлов, teleman@elnet.msk.ru

 
Страница 1
Страница 2 >>

К великому сожалению, статья г-на Козлова в основном касалась не собственно рецензируемой книги, а его личной позиции по технологии разработки программного обеспечения. Поэтому суть книги осталась за бортом.
Станислав Осташевский

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

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

Но пересказывать книгу, особенно посвященную основополагающим концепциям, на паре страниц представляется мне занятием наивным - ведь всегда лучше обратиться к первоисточнику, прочитать его самому, составить свое мнение и извлечь что-то полезное для своей практической работы. Результат же от чтения пересказа очень напоминает получение впечатления о пении Карузо при прослушивании куплета из его песни в исполнении картавого безголосого соседа. Не хочется ни оказываться в положении такого несчастного соседа, ни ставить других в положение его несчастных слушателей. Пересказ не был целью!

И еще - количество информации. Представляется, что вместо пересказа достаточно дать ссылку и тем повысить плотность информации в тексте. Выражение несогласия (т.е. не ожидаемых суждений) несет больше информации.

У меня была прекрасная возможность остановиться на первом абзаце, сорвать аплодисменты и получить подтверждения того, какой я правильный, высококвалифицированный, профессионал и т.д. и т.п. (Что сродни потребности заполучить "эмблемы".) Если же все-таки предположить, что я до какой-то степени разумный человек (поскольку осознавал последствия написанного, о чем сказал в третьем абзаце), то из этого следует, что решение написать остальное (еще раз повторюсь, предвидя при этом весь последующий град критики) было вызвано другими причинами.

В этом отношении Станислав Осташевский действительно прав, остальная часть статьи - это изложение моего взгляда на некоторые моменты в книге, которые вызвали, назовем так, несогласие с определенной точки зрения. Но это несогласие не означает "плохость" содержимого книги вообще (еще раз повторюсь, книга в целом как раз очень полезная и интересная).

О "личной позиции". На самом деле позиция никогда не бывает личной полностью. Позиции формируются под воздействием воспитания, культуры, прочитанных книг, изучения мнений других людей, и, наконец, личного опыта. Они могут быть "конформистскими" (т.е. подтверждающими - "Да, я тоже так думаю. Я ваш, буржуинский", поэтому в какой-то мере консервативными) и "бунтарскими" (которые, в свою очередь, можно разделить на конструктивные - "Нет, потому что хочется это сделать лучше, и, возможно, этого можно достигнуть так" - и деструктивные - "Нет, просто потому что мне этого не хочется или мне это не нравится"). Мне ближе позиция конструктивная "бунтарская". Это не желание громко поорать "must die" (что деструктивно), а попытка осознать текущее состояние, найти его причины и поискать пути перехода к лучшему состоянию. При этом предполагается, что идейный застой, самоуспокоенность, самодовольство и т.д. - это остановка развития, это смерть (то самое die). Человеку свойственно любить жизнь.

Эти вещи пришлось пояснять. Но это присказка...

Познай главную тайну. Мы не знаем, какое сокровище мы ищем: то, которое было зарыто нашими предками, или то, которое будет зарыто нашими потомками.
П.Д. Успенский

Неявные предположения, или упущенная суть

Попытаюсь кратко сформулировать "общесистемные" предпосылки, ибо они определяют точки зрения (взгляды) и составляют суть:

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

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

  3. Считается, что в качестве программистов можно успешно использовать "кодирующих обезьян", которые будут трудиться под зорким оком надсмотрщиков. Это концепция "винтиков" и играния ролей.

  4. Институт надсмотрщиков требует соответствующей административной деятельности, регламентации и "объективных критериев надсмотра". Для упрощения администрирования ("управляемости") разделение труда происходит на уровне элементарных операций (ролей) со строгим дифференцированием.

  5. От исполнителей требуется лишь добросовестное исполнение ролей. А остальное получится автоматически.

Собственно, в своей статье я отметил проявление в книге этих "общесистемных" моментов и попытался обратить внимание на них, а также на их следствия. Причем эти предпосылки представляются первичными, поскольку положенные в основу любого подхода, будь то MSF или какого-нибудь еще, они приведут к примерно одинаковому результату. Поскольку они в книге подразумеваются, одобряются и признаются по умолчанию, то я посчитал нужным о них заговорить, а для неголословности подтвердить их проявление цитатами.

Соответственно, с моей стороны в качестве конструктивной позиции выдвигаются антитезисы к этим предпосылкам:

  1. Механический перенос концепции конвейера на работу программной фирмы не адекватен сути деятельности программиста как главного действующего лица, решающим компонентом которой является мышление, а не механическая работа. При этом утверждается, что концепция разработки, основывающаяся на разделении труда по признаку роли (и аксиоматически постулирующая элементарными определенные операции программирования как деятельности), означает неприемлемые непроизводительные издержки и упускание понимания по мере продвижения "конвейера" по спирали разработки. Предполагается, что более продуктивна концепция, основывающаяся на атомах познания (некоторого взаимосвязанного клубка проблем, требующего решения). Расщепление атома познания проекта - это проектирование его архитектуры. И при этом специализация и разделения труда возможны не на уровне ролей, а на уровне проблемных областей, подсистем, слоев архитектуры (база данных, бизнес-логика, интерфейс пользователя, средства обработки сигналов, взаимодействие с "железом" и т.п.). При этом работник может, решая свою подзадачу, принимать участие в разработке нескольких подсистем или выполнять несколько "ролей" по необходимости.

  2. Если сформулировать задачу программирования как получение понимания (расщепление атома познания), то это плохо формализуемый творческий подход, в котором используются ремесленные навыки. При этом более точно ее можно сформулировать как создание красивого, элегантного, компактного и адекватного задаче решения при условии дефицита времени, что есть искусство. Достижение решения подразумевает грамотное владение инструментом, что есть ремесло.

  3. Творческий работник самомотивирован, не требует надсмотра и заинтересован в результате своего труда. Для успешной деятельности в области программирования необходимо определенное состояние ума (способность понимать реальность, строить карту реальности и действовать в соответствии с этим пониманием реальности), которое несколько отличается от состояния, предполагаемого в книге (нежелание или неспособность понимать, стремление формально следовать готовым правилам и инструкциям, избегание ответственности, незаинтересованность в результатах своего труда, игры вместо работы).

  4. Ненужность надсмотра оборачивается необходимостью лишь координации. Что вполне реализуется при непосредственном взаимодействии заинтересованных сторон и наличии совместно используемой и постоянно совершенствуемой всеми участниками проекта мысленной модели проекта. Единство замысла регулируется менеджером, широковещательно декларирующим свои цели и получающим обратную связь непосредственно от самих работников, а не путем отслеживания их транзакций (важен ведь результат, а не путь к нему). Управляемая самоорганизация. Работники должны понимать стратегические цели (обеспечение единства замысла, концептуальной целостности), а также задачи и требования тех, кому передаются результаты их работы (заранее учитывая эти требования в своей работе, что устраняет лишние итерации).

  5. Следует отказаться от играния ролей, поскольку играние ролей означает присутствие поощряемой нечестности, взаимо- и самообмана ("Я делаю вид, что не умею этого делать или не знаю как это делается, поэтому стараюсь достигнуть лишь своих целей, затрудняя при этом работу других, поскольку это не моя задача - облегчать им жизнь"), и наличие скрытых неявных целей участников, с высокой степенью достоверности не совпадающих с целью проекта. Нужна способность встать на позицию другой стороны, т.е. живое взаимодействие. И явная (честная) подчиненность каждого главной цели.

Эти моменты не реализуются, игнорируются, подавляются в концепции "программной фабрики".

Успешный программный проект

Мою точку зрения можно выразить так. Успешный программный проект - это результат правильного понимания проблемной области, адекватного отражения этого понимания в программном продукте, при условии эффективного использования имеющихся в распоряжении ресурсов. И еще нужно вспомнить о треугольнике "требования-время-ресурсы". Поскольку требования и время обычно определяются более жестко, то основным рычагом оказывается "человеческий ресурс" - важнейший ресурс проекта, проявляющий себя во всех трех сформулированных пунктах, поэтому я уделяю ему особое внимание.


 
Страница 1
Страница 2 >>


Сергей Козлов
teleman@elnet.msk.ru
 


<< Страсти вокруг MCSD
Все материалы номера
Минута молчания >>