Редкая профессия
Сокращенный вариант статьи был опубликован в виде отдельной статьи в декабрьском номере журнала PC Magazine/Russian Edition за 1997 год. Статья до недавнего времени находилась в online-архиве журнала, однако была удалена (очевидно, в связи с истечением срока давности ☺).
Недавно поздно вечером к нам в комнату зашел коллега, хороший знакомый, глава маленькой фирмы, "широко известной в узких кругах", устало опустился на стул и, очумело покрутив головой, проговорил:
— От заказчиков отбоя нет!..
Он поднял голову, и мы увидели в его усталых глазах удивление, смешанное с восторгом и воодушевлением.
— Работы полно, только успевай! computers Его фирма в принципе ничем не отличается от других московских компьютерных фирм, ориентирующихся на программно-аппаратные разработки, — несколько постоянных сотрудников, десяток толковых студентов, три комнаты в умирающем академическом институте и минимальный, мягко говоря, набор оборудования.
Я вспомнил этот случай, чтобы показать безосновательность сетований на упадок индустрии, невостребованность специалистов и повсеместную ориентацию на продажу готовых западных решений. Сегодня можно уверенно говорить, что неглупый инициативный компьютерщик — от студента до сорокалетнего программиста со стажем — имеет все возможности найти себе работу, соответствующую его квалификации, за вполне адекватные деньги.
Речь, однако, о другом. Разработка программного обеспечения — настолько широкая область деятельности, что человек, который действительно хорошо программирует, скажем, драйверы устройств и зарабатывает этим себе на жизнь, вряд ли сможет в приемлемый срок научиться профессионально проектировать базы данных. Исключения крайне редки. (Я не беру в расчет одержимых молодых людей, которые имеют свое мнение решительно обо всех аспектах разработки и использования ПО и пишут в своих резюме невообразимо длинный список программных систем самого разного калибра и назначения, в которых они как бы умеют работать. Речь идет прежде всего о настоящих профессионалах.) В то же время, и драйверы, и базы данных определенно относятся к программному обеспечению.
Жизнь сложилась так, что автор любит проектировать и разрабатывать компиляторы, и у него это, в общем, получается. То, что вы прочтете ниже, надеемся, подтвердит мои слова. Однако чем серьезнее относишься к тому делу, которое любишь, тем меньше времени и возможностей остается постичь что-то другое, пусть даже важное. Боюсь, ни за какие деньги я не возьмусь сейчас, скажем, за графику или разработку бухгалтерских программ — не только потому, что мне это не интересно, но прежде всего из-за невозможности достаточно быстро стать профессионалом в этих сферах.
А теперь скажите, какая софтверная специализация пользуется сейчас на рынке большим спросом: разработка компиляторов или компьютеризация бухгалтерий? Ответ очевиден. Более того, возможно, такая же картина наблюдается и на Западе. В самом деле, даже если там существует несколько сотен аттестованных компиляторов языка Ада (а это именно так), количество специалистов, их программировавших, все равно значительно меньше числа тех, кто разрабатывает всевозможные прикладные программы по заказам фирм и организаций.
На Западе, с его несоизмеримо большим разнообразием потребностей в сфере программирования, ситуация все-таки иная. Когда происходили описываемые ниже события (середина 90-х), я, скажем, не знал о существовании web-сайта http://www.compilerjobs.com/, в котором публикуется и регулярно обновляется поразительный в своем разнообразии список вакансий, связанных с разработкой компиляторов…
Так что заголовок этой части имеет вовсе не хвастливый, а грустный оттенок. Разработка компиляторов — редкая профессия, но не в смысле ее дефицитности и, следовательно, высокой цены на нее. Напротив, она редкая прежде всего потому, что редко требуется и, соответственно, найти себе применение крайне трудно. Поэтому, когда все-таки появляется работодатель, предлагающий такую работу, психологически трудно еще и педантично уточнять условия вроде денег и прочего: спасибо и на том, что работа, по-настоящему интересная и приносящая радость, нужна кому-то еще!
Летает или не летает?
Я хочу рассказать о том, как мы делали компилятор Си++. Вообще-то, об этом стоило бы написать книгу — настолько эта история кажется захватывающей и поучительной, однако… будет ли это кому-нибудь интересно? Даже если коротко рассказать о наиболее существенных проблемах, с которыми мы столкнулись, трудно избавиться от мысли о, скажем, неактуальности нашего опыта в сегодняшней российской ситуации в программировании. В самом деле, посмотрите хотя бы на полки отделов книжных магазинов, торгующих компьютерной литературой. Невероятное (по сравнению с картиной 5-6-летней давности) разнообразие книг! Практически по любому программному продукту, мало-мальски используемому у нас, можно гарантированно найти по крайней мере две-три книги. Однако работ, посвященных современным архитектурам, проблемам разработки программного обеспечения, принципам построения сложных систем, таких, как компиляторы, СУБД, операционные системы, — нет. Только описания конкретных инструментов, пакетов и систем. Ситуация в некотором смысле обратная той, которая складывалась в доперестроечное время: тогда очень многие серьезные работы известных западных авторов, пусть с опозданием на пару лет, но выходили у нас. Печатались и очень неплохие отечественные книги. (И между прочим, находили спрос, и многие мгновенно становились библиографической редкостью!)
Все это определенно говорит о том, что спрос на подобного рода публикации практически отсутствует. Кому сейчас интересна проблематика разработки компиляторов, когда у любого программиста на выбор имеются три-четыре превосходных западных продукта, а наша промышленность уже давно не производит собственных компьютеров, для которых могли бы понадобиться подобные разработки?
У этих опасений есть еще один аспект. Опыт общения с западными специалистами по ПО, как достаточно известными и уважаемыми, так и рядовыми программистами, убедил в одной простой вещи: практически никому не интересны те проблемы и трудности, с которыми ты сталкиваешься в процессе реализации того или иного проекта; мало кого интересуют пути и способы их преодоления. Важен и интересен прежде всего результат! Об этом образно сказал нам один коллега, эмигрировавший в Швейцарию лет пятнадцать назад.
— Вот ваш "Буран", — сказал он (дело было больше двух лет назад), удобно расположившись в кресле на открытой террасе Политехнического института в Лозанне с видом на Женевское озеро.-- Программа вроде бы завершилась единственным полетом в беспилотном режиме. Наверняка в процессе его разработки конструкторы продемонстрировали высокую квалификацию, нашли какие-то интересные нестандартные решения, придумали и отработали технологию, решили уйму проблем и т.д. и т.д. Но… — заключил он с ехидцей в голосе,-- не летает! Не делает то, для чего был предназначен! А значит, и говорить о нем бессмысленно. Его нет, и это главное.
Светило ласковое солнце. Сквозь большие окна факультета информатики был виден просторный студенческий компьютерный класс, уставленный огромными цветными мониторами Sparc’ов. В сырой и холодной Москве слетавший в космос «Буран» сиротливо пристроился в парке Горького среди аттракционов. Возразить было нечего.
С тех пор в наших разговорах метафора "летает — не летает" приобрела в применении к нашему проекту почти ритуальный характер. Она не потеряла свою актуальность даже и сейчас, когда вроде бы по результатам тестирования на соответствие стандарту Си++ наш компилятор стабильно обгоняет все последние версии Watcom и транслирует сам себя почти так же быстро, как это делает Visual C++.