«Чтоб я так смог, как ты мне помог, честное слово…»
Хасан Одноглазый [Мюзикл «Али Баба и сорок разбойников»]
Наверное, мало в какой области несбывшиеся прогнозы так хорошо заметны на фоне естественного прогресса, как в софтостроении. Начиная с уже далеких 50–60-х все время что-то «ожидается на днях» – то пресловутая «серебряная пуля», то автоматические программосоставители, то гениальный ИИ, то Лучший-В-Мире-Язык-Программирования, то безупречное средство верификации программ… Сильно обобщая, все эти ожидания можно свести к двум (диаметрально противоположным) идеализмам: либо «программирование не нужно вообще» (у компьютера внутри «думалка», работающая на языке пользователя), либо «программировать должны все пользователи» (теперь у пользователя внутри «думалка», работающая на языке компьютера). И если насчет первого, по состоянию на сегодня, вроде бы все согласны, что это нечто вроде философского камня алхимиков (то есть скорее идеалистическая категория, нежели возможная реальность), то вот со вторым далеко не так однозначно…
Как бы то ни было, современные пользовательские окружения – графический интерфейс, большинство задач выполняется мышью, средства разработки и соответствующая документация с операционкой не поставляются [Последнее, конечно, относится только к ОС семейства Windows. Тем не менее общая культура «среднего пользователя» похоже устроена и на Маках, а до некоторой степени– и на современных Linux’ах с их мимикрией под «мэйнстрим»] – «программирование любой домохозяйкой» по меньшей мере не поощряют. Домохозяйки, однако, как-то выкручиваются.
Нет, конечно, все подряд домохозяйки – тьфу-тьфу! – пока не программируют. Но граница между «профессиональным программистом» и «пользователем, который слегка программирует», с каждым днем становится все менее четкой. Первые, разумеется, смотрят на последних свысока; но и друг с другом договориться о том, кто «более настоящий», часто не в силах.
Взять, к примеру, веб-программирование. Еще лет пять назад все было, в общем-то, понятно: веб-дизайнер – не программист. Веб был набором (почти) статических текстовых страниц и (как бы) динамических форумов-гестбуков; других «веб-приложений» мы не знали. Не то теперь. Создатели GMail’а (даже если брать только его клиентскую часть, пользовательский интерфейс) и десятков последовавших за ним сервисов определенно требуют с собой считаться. Оставляя за бортом полезность и сиюсекундную применимость онлайновых текстовых процессоров и электронных таблиц, признаем, что разработку их пользовательского интерфейса и логики ни в коем случае не назовешь «только дизайном» [Еще раз подчеркну– я говорю о том, насколько современные веб-приложения отличаются от простейшего изначального поведения в вебе: «можно прочитать; можно написать; всё»].
А вот разработчиков Гугла и так все согласны считать «настоящими программистами». Но как называть и куда относить авторов тысяч суперсовременных Web2-сервисов, которые сделаны буквально за-недельку-на-коленке, работают на хостинге ценой в пиво, используют данные из десятка других открытых сервисов – и при всем при том такое «приложение» вполне полезно и более того, десктопного аналога вообще не имеет? Что здесь важнее – «сколько труда и денег затратил автор?» или «насколько полезно получилось?». А если «автор» вообще не программировал, а лишь построил web mashup (помесь сервисов) при помощи Yahoo! Pipes, – он кто?
Дальше – смешнее. Как насчет концепции User JavaScript – маленьких скриптов, установленных в браузере, которые изменяют загруженные сайты по желанию клиента[Насколько известно автору, впервые концепция была реализована в расширении GreaseMonkey для Firefox; на данный момент схожие возможности есть и в Opera (из коробки), и в IE (GreasemonkIE, Trixie, Turnabout), и в Safari (Creammonkey, PithHelmet)]? Считать ли эту «скриптографию» программированием, а их авторов – программистами? А – более серьезно – если вспомнить всевозможные расширения для того же Firefox, которые варьируются от одной-двух кнопок (например, «загрузить все картинки на этой странице») до сущностей, которые превращают браузер в Something Completely Different (например, в универсальный веб-отладчик, как Firebug, или в инструмент сбора и каталогизации научной информации, как Zotero). Кстати, технологии здесь – всё те же «презренные вебдизайнерские игрушки» – язык разметки (правда, XUL, а не HTML) да JavaScript.