Линней от программирования
Юрий Аммосов
В романе "Золотой теленок" Остап Бендер, оказавшись на мели, продает бездарному журналисту пособие для сочинения репортажей, передовиц и фельетонов, состоящее из перечня газетных штампов с руководством по их правильному использованию. В творческих профессиях подобный метод считается халтурой. А вот в программировании этот подход сейчас не просто успешно применяется, он по сути составляет основу всей софтверной индустрии. Все программисты используют блоки кода, написанные кем-то еще. Это экономит время: собрать из готовых кубиков модуль намного быстрее, чем написать его с нуля руками. Это экономит место - в противном случае каждому программисту нужно было бы заново писать и операционную систему, и драйверы, и рисовать шрифты. Это позволяет легко синхронизировать работу программ: если все программы, условно говоря, настроены в одной тональности, им проще сработаться. Это позволяет организовать работу компьютера иерархически: прикладные программы могут обращаться к общим библиотекам команд и функций, та - к операционной системе, та - к встроенным программам компьютера и так далее. Это, наконец, позволяет организовать разделение программистского труда: программисты больше не обязаны быть мастерами на все руки. Один программист может себе позволить хорошо разбираться только в управлении электроникой, другой - в трехмерной графике, третий - в анализе неструктурированных массивов данных, четвертый - в том, как заставить их продукты работать вместе. Самое интересное, что все эти, казалось бы, очевидные вещи существуют менее четверти века. Еще в 1960-е годы работа программиста примерно так и выглядела: под каждую задачу сочинялась новая программа с нуля, от и до. Рывок в компьютерной революции, произошедший в 1970-1980-е годы, во многом связан с тем, что появились способы и инструменты, позволяющие программистам стандартизировать и обобщать компоненты кода для общего использования, так же как массовое производство возникло во второй половине XIX века благодаря стандартизации не только мер и весов, но и деталей, избавив производителей от необходимости вытачивать себе свои собственные гайки и штамповать уголки. Большинство современных программ для персональных компьютеров уже много лет пишутся на языке программирования C++. Еще пару десятилетий назад программисты применяли целую россыпь языков - Pascal, ADA, Fortran, Delphi и много других. Сейчас практически все эти языки превратились в нишевые или отмерли вовсе. На Windows-платформах единственную, но слабую конкуренцию C++ составляет только Visual Basic, и то благодаря усердной поддержке Microsoft. Имя создателя языка C++ Бьерна Страуструпа знает любой программист - хотя бы благодаря написанным им книгам, учебникам и справочникам, посвященным языку C++. А вот имя нашего соотечественника Александра Степанова, благодаря которому C++ и превратился из языка "ручной работы" в язык "индустриального производства", знают немногие.
- Когда и по какому поводу вам пришла в голову эта идея? - Впервые эта идея появилась у меня еще в те годы, когда я был в Советском Союзе (уехал я оттуда в 1977 году). Тогда я думал, какие компоненты программ можно выполнять параллельным образом. Я обратил внимание, что параллелизация программ связана с некоторыми их фундаментальными математическими свойствами. Это была еще не очень совершенная идея. Пройдя через много ступеней, я со временем развил ее, сделав то, что сейчас называется стандартной библиотекой шаблонов в языке C++ - Standard Template Library, STL. Это часть языка, которая прописывает основные структуры данных и алгоритмы на них. Эта идея совершенно не зависит от языка, но в некоторых языках ее легче воплотить, а в некоторых труднее. В C++ ее удалось воплотить с трудом. Даже после того, как я уговорил его создателя Бьерна Страуструпа, своего хорошего друга, внести некоторые изменения в язык C++. - Вы сделали эту работу для какой-то корпорации? - Я начал работать в направлении обобщенного программирования в компании General Electric. Я работал в исследовательском центре в городе Скенектади, где мне позволяли заниматься фундаментальным исследованием без всяких практических целей. А потом я несколько лет преподавал в Нью-Йоркском политехническом университете, занимаясь там теми же самыми вещами. Оттуда я перешел в Bell Laboratories, затем в Hewlett-Packard, где я наконец-то и произвел эту библиотеку на языке C++. - Если в Hewlett-Packard это была ваша основная задача, какой интерес был у корпорации в поддержке ваших исследований? - В HP не заметили, что я занимался тем, чем я занимался. HP - это громадная бюрократическая организация, в которой происходит очень много разных вещей. Там никто на самом деле толком не знает, кто что делает, и у меня было начальство, которое смотрело сквозь пальцы на мои занятия фундаментальными исследованиями. Они и позволили мне эту библиотеку отдать в стандарт и, более того, выпустить ее код в общественную собственность. Когда я потом работал в HP на более важной работе, я уже с должности начальника видел, насколько трудно контролировать организацию, в которой работает сто пятьдесят тысяч человек. Американские компании не контролируются таким образом, как Сталин пытался контролировать Советский Союз - телефонным звонком в каждое отдельное место. - Сейчас вы работаете ведущим ученым в компании Adobe. Чем отличается ваша новая работа от работы в НР? - В HP я занимался research, а у Adobe research отсутствует совсем. Только research & development - R&D. - В чем разница? - R&D в Америке значит очень простую вещь: вы разрабатываете то, что немедленно превращаетcя в продукт. А research - фундаментальные исследования, занятия вещами, про которые вы даже не знаете, как впоследствии они будут применяться. - Часто ли корпорации тратятся на research? - Меньше, меньше и меньше. Раньше очень большая часть фундаментальных исследований проводилась в Bell Laboratories. Это был национальный ресурс, там было изобретено все, от Большого взрыва до транзисторов. Почему AT&T могла финансировать фундаментальные исследования? Потому что это была монополия. Если компания договаривалась с правительством о том, какие должны быть цены на связь, ей легко было покрыть любые расходы на исследования. AT&T просто включала расходы на фундаментальные исследования в структуру монопольной цены. Тогда люди шутили: непонятно, кто кем управляет, американское правительство AT&T или AT&T американским правительством. Примерно такая же ситуация была и с IBM, которая в пятидесятые-шестидесятые годы контролировала от шестидесяти до семидесяти процентов компьютерного рынка. Именно потому, что IBM была практически монополией, частично регулируемой государством, она тоже могла поддерживать фундаментальные исследования. Сейчас в Америке реально осталась одна компания, которая может себе позволить фундаментальные исследования. Это компания, которая является нерегулируемой монополией, она называется Microsoft. И они действительно ведут кое-какие фундаментальные исследования, но все это совершенно несравнимо с тем, что раньше делали AT&T и IBM. Финансовый климат не позволяет даже таким большим компаниям, как HP, вкладывать достаточно денег в фундаментальные исследования. А средним компаниям размером с Adobe климат не позволяет вкладывать даже в прикладные исследования. - Чем все-таки вы занимаетесь в Adobe? - Я пытаюсь выяснить, как более эффективно и, если угодно, красиво писать программы. В настоящее время я смотрю на часть внутренностей программы Photoshop, но потом я буду смотреть на другие программы. - В прошлом вы были на топ-менеджерских постах в HP и Compaq. Как вы оцениваете их слияние? - Происходит невероятная консолидация всей компьютерной промышленности. Когда слияние происходило, я был вице-президентом и главным ученым компании Compaq, поэтому я, естественно, в объединении участвовал и чрезвычайно его поддерживал. Что сейчас происходит? Поставка и дистрибуция становятся ключевыми вещами. Технология, компьютеры, которые работают чуть-чуть быстрее, чуть-чуть медленнее, - все это становится не важно. И это будущее нашей промышленности. Если вы пойдете в любую большую компанию, скажем в General Motors, - что они хотят? Они хотят установить постоянные отношения с поставщиком с низкой ценой. Они не хотят больше менять поставщиков. Они не хотят покупать персональные компьютеры в трех местах, они хотят покупать в одном месте. То есть для них покупка компьютера становится такой же вещью, как покупка, скажем, бумаги. Компьютеры превращаются в канцтовары. То же, к несчастью для меня, происходит и в софтвере. Вообще технология, я должен вам сказать, играет гораздо меньшую роль, чем положение на рынке, партнеры, размер. - Стоит ли России делать ставку на софтвер, например пойти по индийскому сценарию, или это уже вчерашний день? - На программах Россия не проживет, я в этом уверен. Лучше сделайте ставку на сельское хозяйство. Мы ведь в Калифорнии производим не только программы. Мы здесь неподалеку выращиваем больше артишоков, чем кто бы то ни было в мире. Потом, в России нужно строить дороги. Такая громадная страна не может существовать, если там не построить нормальные дороги. И главное, нужно создавать и развивать свой внутренний рынок. Потом уже выходить на мировой. Как возникла, например, компания Honda? Она разве стала машины продавать сразу на американском рынке? Нет, сначала она завоевала свой, японский, научилась производить массовые дешевые автомобили для своего рынка. Потом, используя внутренний рынок, начала субсидировать продажи в Америке, сбывая автомобили сюда уже гораздо дешевле. Мы же знаем, как это происходило. И теперь они - глобальная компания. Видите, все тут на "хондах" и "тойотах" ездят. И технологическим русским компаниям нужно прежде всего думать о внутреннем рынке, с него начинать. Я не верю, что русская софтверная компания может конкурировать с Oracle. Но ведь и Oracle вначале ориентировалась только на американский рынок. Надо всегда начинать с домашнего рынка.
|