Все новости от 7 октября 2003 г. Как повысить мастерство программиста?
Бобровский С. Программная инженерия. Технологии Пентагона на службе российских программистов. СПб.: Питер, 2003. -- 222 с.
Эта сравнительно небольшая по объему книга состоит из четырех практически не связанных между собой глав. В соответствии с моими предпочтениями я читал их почти по футбольной схеме: 4--2--3--1.
Для меня наиболее интересной оказалась вторая глава, посвященная истории языков программирования. Здесь автор не ставил перед собой задачу досконального исторического исследования, в живой и популярной форме он вводит читателя в мир этих языков, рассматривая их поколение за поколением.
В 80-х годах прошлого века считалось, что системный программист должен знать не менее 6--8 языков программирования и каждый раз использовать язык, наиболее адекватный решаемой задаче.
Мне за свою программистскую жизнь пришлось выучить порядка двух десятков языков, не считая их различных диалектов. (Но это только звучит так красиво: из них восемь -- ассемблеры разных машин и микропроцессоров -- учатся легко и быстро, а потом пару месяцев идет процес привыкания, когда перестаешь думать, как написать, а размышляешь уже над тем, что писать.
Другая группа -- процедурные языки: Фортран, Бейсик, Паскаль, PL/1, PL/M, Ada, PostScript, HPL и Си, на которые при их изучении тратится время только на то, чтобы вникнуть во всякие прибамбасы и особенности.
По-настоящему трудными для освоения оказались GPSS, Prolog и mu-MATH. (На последний из них я потратил полгода, поскольку функциональное программирование предполагает совершенно другой способ мышления.)
Сейчас от программиста требуются несколько другие качества, и на вопрос, кого считать хорошим программистом, автор попытался дать ответ в первой главе.
Не совсем могу согласиться с утверждением, что на машинном языке невозможно разрабатывать мало-мальски большие проекты. Как-то году в 1983-м (!) директор института, где я тогда работал, получил телеграмму от В. Н. Челомея, у которого, очевидно, горела сдача очередной ракеты: "Прошу откомандировать в наше распоряжение 200 программистов, умеющих писать в машинных кодах".
Очень жалею, что не забрал и не сохранил этот исторический документ. (Понятно, что в те годы у нас уже не было ни одного такого человека.) В тексте второй главы иногда встречаются терминологические неточности -- например, термином "символический ассемблер" обозначен перемещающий ассемблер.
С некоторыми утверждениями автора можно поспорить, однако опыт моей работы над проектом виртуального компьютерного музея ( www.computer-museum.ru ) показывает, что писать об истории развития ПО значительно сложнее, чем об истории того или иного "железа".
Менее очевидно авторство, множество разработок делалось параллельно, а о многих мало что известно. Так, один из лучших в мире по степени оптимизации компилятор языка Фортран был разработан в Москве в ИТМиВТ для машины БЭСМ-6, но об этом уже начинают забывать.
В СССР, в Киеве, был сделан и свой язык Пролог, правда, к общеизвестному Prolog’у он никакого отношения не имел, а первоначально предназначался для обработки телеметрии на космическом корабле "Буран".
Мне показалось, что автор иногда приукрашивает достоинства некоторых ЯВУ, в частности PL/1. Предпочтения в выборе языка у программистов часто чисто вкусовые, основанные на собственном внутреннем эстетическом восприятии логической красоты конструкций языка и их взаимоувязанности.
Тот же PL/1 (а мне приходилось на нем писать и читать его пару лет студентам), из-за своей аморфности и ошибок IBM’овского компилятора, использовавшегося на ЕС ЭВМ, не вызывает у меня никаких теплых чувств.
Третья глава посвящена методикам разработки ПО и управления программистскими проектами. Эта глава центральная в книге. Она разбита на два раздела: в одном рассматриваются вопросы, связанные с управлением проектами и планированием деятельности групп разработчиков, а в другом даны обзоры распространенных методик.
Наиболее интересна малоизвестная в России методика Scrum.
В четвертой главе описаны два уникальных технологических проекта, выполненных по заказу японского правительства: проект машин пятого поколения и проект создания дружественного ПО для параллельных компьютеров (RWC).
В области систем искусственного интеллекта продвижение носит чаще всего эволюционный характер: разработав одну систему, видишь ее ограничения и где нужно было двигаться другим путем. Здесь очень трудно заимствовать результаты -- у разработчиков понимание проблемы обычно на несколько лет опережает опубликованные результаты.
Возвращаясь к названию книги, замечу, что Пентагон действительно через такие агентства, как DARPA, DISA, ONR и др., проводит колоссальную работу по созданию технологического превосходства американских вооруженных сил, и здесь у него можно многому поучиться, скажем, разумному отношению к секретности.
Из-за излишней секретности мы потеряли приоритет по очень интересным научно-техническим разработкам. И если кто-то думает, что в американских "ящиках" и фирмах плохо с секретностью, то он сильно заблуждается. Во всех крупных компаниях есть так называемые отделы искажения информации.
Например, в момент подготовки буклета по новой продукции в нем не указываются ее реальные параметры или названия комплектующих -- они вставляются только на этапе передачи утвержденного макета в типографию.
По существу, такие отделы напрямую противодействуют конкурентной разведке.
Отмечу, что издание неплохо проиллюстрировано -- довольно редкое для компьютерной литературы явление. Есть книги, формирующие у программистов некую основу, базу, на которой растет их профессиональное мастерство.
Именно к такому разряду книг относится труд Сергея Бобровского, и именно потому я советую прочитать его в первую очередь студентам, изучающим программирование и выбравшим его в качестве своей специальности. Книга будет полезна и профессионалам, которые могут обнаружить в ней для себя много нового.
|