Шалыто А. А. Об оценке профессионалами



Вариант статьи опубликован в еженедельнике «Компьютерра». 2006. № 647-648, с. 56, 57.

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

На одной из конференций при оценке нашего доклада сложилась такая ситуация: эксперт, считающий себя профессионалом, оценил нашу работу весьма «кисло», а второй эксперт, оценивший себя недостаточно высоко, выставил почти по всем критериям высшие оценки. Работу приняли, но не это главное. Мои соавторы студенты-программисты обрадовались конечному результату, но расстроились, узнав оценку эксперта, назвавшегося «крутым» профессионалом.

Это и естественно, ведь продвинутые программисты, как и математики, любят решать трудные задачи, так как простые задачи и решать-то им не интересно. Трудные задачи могут решить относительно небольшой круг людей, которые образуют элиту в рассматриваемой области. При этом у них возникают свои (очень высокие) критерии оценки работ, и практически все достижения других людей для них в подавляющем большинстве являются «ботвой». Этот термин весьма безобиден, так как в его основе лежит сельское хозяйство, а не героиновая культура, как у слова «прикольно».

Оценка по «гамбургскому счету», с философской точки зрения, конечно, хороша, но существенно тормозит движение вперед не только людей, не относящихся к элите, но и самих «аристократов» от программирования, так как у них, во-первых, очень высокие требования к себе, а, во-вторых, для них очень важно как оценят его работу члены «клуба». При таком подходе обычно наступает коллапс, и, по моему мнению, многих из них, к сожалению, ждет судьба бывшего чемпиона мира по шахматам Бобби Фишера, который в молодом возрасте, будучи чемпионом мира, ушел из мира шахмат, так как его «замучила» мания величия, и он боялся проиграть хотя бы одну партию! В общем, «Ах! Боже мой! Что станет говорить княгиня Марья Алексеевна!» — вечная фраза.

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

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

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

Так обстоит дело при обсуждении научных или технологических предложений. В практическом программировании имеет место прямо противоположная ситуация.

«Нет таких преград, которые не могут взять коммунисты», — говорили при советской власти. Сегодня это может быть перефразировано следующим образом: «Нет таких задач, за которые (особенно за большие деньги) не возьмутся продвинутые программисты».

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

О том, к чему это приводит, пишут в книге сотрудники кафедры мехатроники Калифорнийского университете в Беркли (Ослэндер Д.М., Риджли  Д.Р., Ринггенберг  Д.Д. Управляющие программы для механических систем. Объектно-ориентированное проектирование систем реального времени. М.: БИНОМ. Лаборатория знаний. 2004): для систем реального времени в 1997 году 80% всех проектов не были вовремя внедрены из-за плохого качества программного обеспечения (ПО).

Авторы книги считают, что для повышения качества программ необходимо «принять такую техническую политику, при которой не только написание кода (программирование) рассматривается как творческая деятельность!» (формулировка, сильно смягченная мною — А. Ш.)

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

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

Кстати, в автоматном программировании, которое было предложено значительно раньше, чем была написана книга специалистов из Беркли (2002 г.), я высказываю те же самые мысли, «кощунственные» для традиционного программирования.

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

Но главный совет состоит в том, что не стоит сильно расстраиваться, когда после вашего предложения представители программистской элиты будут только пожимать плечами, так как даже они далеко не все понимают в жизни!

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