Кое-что о раскулачивании колхозов

Автор: Виктор Шепелев
Опубликовано в журнале "Компьютерра" №19 от 25 мая 2007 года

 "Задолго до того как Машина Времени вошла в повседневный быт, она уже устарела в научно-фантастической литературе. Поэтому, когда она была в самом деле изобретена, к ней отнеслись без всякого уважения". [Феликс Кривин, "Я угнал машину времени"] Такая судьба время от времени постигает не только фантастические выдумки, но и самые что ни на есть прагматические ожидания и прогнозы. Если одно и то же предсказывают раз за разом, а оно все не сбывается, - вспышки энтузиазма с каждым новым прогнозом становятся все бледнее, и в конце концов общественность, неравнодушная к техническому прогрессу, смиряется с мыслью, что несбыточность конкретного прогноза - что-то вроде закона природы.

"Чтоб я так смог, как ты мне помог, честное слово…"

Хасан Одноглазый [Мюзикл "Али Баба и сорок разбойников"]

Наверное, мало в какой области несбывшиеся прогнозы так хорошо заметны на фоне естественного прогресса, как в софтостроении. Начиная с уже далеких 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.

Но пойдем дальше. Такая штука, как "виджет" [Подробнее о концепции виджета см. Тимофей Бахвалов, "Столовые приборы" ("КТ" #621 или offline.computerra.ru/2006/621/247558)] (он же, по версии Google и Microsoft, "гаджет" - в контексте "desktop gadget" или "web gadget"), - маленькое окошко с небольшим количеством элементов, запускается либо на рабочем столе, либо на популярной в последнее время "персональной домашней странице" (например, google.com/ig или netvibes). "Движок для виджетов" встроен в последние версии Google Desktop и Opera, да и в самой Vista он есть; под Маком виджеты - уже давно неотъемлемая часть окружения; есть свои решения и для Linux’овых десктопов. Технология создания виджета - как правило, опять же простой язык разметки на основе XML (или HTML) + JavaScript (иногда другой скриптовый язык, например Python).

Можно ли эти виджеты, которые уже кто только не делает кустарно, считать полноценными программами? Существующие варианты - "часики" да "блокнотики" - может, и не стоит (хотя, наверное, по low-end шароварному рынку и эти "поделочки" ударили болезненно). Но как только виджеты научатся "соединяться в цепочки", передавая друг другу примитивные потоки данных (аналогично помянутым Yahoo! Pipes)… Интересно будет узнать, скольким пользователям пачка таких "недо-программ" (одна получает почту, другая показывает, третья статистику строит, четвертая в блог постит) прекрасно заменит современный зоопарк десктопных монстров. Не зря ведь Apple, считающая себя родоначальником идеи "настольного виджета", не планирует пускать на свой iPhone полноценные сторонние приложения - при том, что виджеты на нем вполне будут работать [Можно еще вспомнить такую штуку, как Opera 9 for Devices, тоже поддерживающую все те же виджеты и превращающую разработку простого ПО для встраиваемых устройств в занятие для "простого смертного"].

Из технологий программирования уровня "просто человека, а не разработчика" можно еще вспомнить Flash с его всеохватностью - от мультиков и YouTube-роликов до крутейших игр, а ныне агрессивно продвигаемый еще и как "более красивый и быстрый интерфейс для веб-приложений". Да и встроенный в SecondLife скриптовый язык для "оживления объектов", думается, используют не только (и не столько) профессиональные разработчики.

Это перечисление можно было бы продолжать, но идея уже и так понятна.

Возвращаясь к "платформам для всех", заметим, что к ним можно отнести и современные веб-фреймворки толка Ruby on Rails: точно так же они обеспечивают полный набор основных сервисов и типичных задач; точно так же для разработки простого приложения можно практически не знать Ruby (или Python, если речь о Django, или Groovy, если о Grails), ориентируясь на простые примеры и руководства для новичков. И даже .Net/JVM до некоторой степени представляет собой такую "платформу" [Тут можно привести в пример проект AnAppADay.com, автор которого решил провести эксперимент и написать за тридцать дней тридцать несложных, но полноценных программ на C# 2.0; и действительно, целый месяц раз в день выдавал законченные программы- не слишком примечательные, но сравнимые с теми, что пару лет назад гордые авторы-шароварщики толкали по $19,99].

Представляется, что "десктопная система будущего" - это всего несколько "программ" в старом смысле слова (серьезных систем, написанных на эффективных языках подготовленными командами-"колхозами" профессионалов), населенных бессчетными мелкими "штучками на все случаи жизни" и тесно переплетенных с десятками веб-приложений [Веб при этом может разделиться на два разных "Веба"- старый (тексты, связанные ссылками) и новый (программы, активно работающие и на сервере, и на клиенте). Кое-кто даже предлагает ввести новый протокол HATP (HyperApplication Transfer Protocol в пику HyperText Transfer Protocol)]. К примеру, разработчики из Mozilla такие перспективы внимательно оценили: для Firefox 3 запланирована возможность работы с веб-приложениями при отсутствии подключения к Интернету (то есть "подключились к сайту приложения, загрузили его, отключились, но можем продолжать работать"), что подчеркивает роль этого приложения как платформы, а не просто "смотрелки страничек" [Кстати, каким бы фанатом "Огнелиса" ни выглядел автор, для повседневной работы он таки предпочитает "Оперу"].

О раскулачивании колхозов

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

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

Позвольте напоследок привести такую аналогию. Если единственным способом записи текста является кропотливое выбивание значков на камне, то автор текста (писатель) поневоле осваивает профессию выбивателя соответствующих надписей, то есть каменотеса (либо ему придется работать в тесном сотрудничестве с такими специалистами). Но сегодняшний автор может не иметь никакого представления о процессе производства бумаги и чернил - он "просто творит" (совсем уж продвинутый автор может даже не уметь писать на бумаге, а только по клавишкам стучать).

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

Платформы и платформочки

Все вышеперечисленные примеры "недо-программ" (написанных недо-программистами?) приведены, естественно, не для того, чтобы поплакаться об упадке профессии и уровня тех, кто в ней подвизается. Напротив - автор смотрит на происходящее со сдержанным оптимизмом.

Что объединяет расширения Firefox, виджеты Google Desktop, Flash-игрушки? Главным образом - доступность. Она достигается за счет "несерьезного подхода к программированию", отталкивающегося от простой (но новой) идеи и красивого дизайна [Большинство пользователей новых виджетов и сервисов относятся к категории early adopters, энтузиастов; но это уже другие early adopters чем те, кто поддерживал ИТ-прогресс, скажем, лет 15 назад. Это уже не опытные технари, а как бы "простые" пользователи, которым не нужно много возможностей, но нужны "фишечки" (они готовы терпеть скорее здоровски прорисованный сервис с единственной функцией, нежели мощный двигатель в уродливом корпусе)]: разметка, стиль, иконки, ну и пара строк кода. Это, конечно, утрировано - штука вроде Firebug содержит несколько больше, чем "пару строчек кода" - но показывает суть: внешнему виду уделяется внимание на ранних этапах разработки, а код максимально "предметен", оставляя все служебные задачи (управление соединениями, контроль безопасности, высвобождение памяти, конвертацию данных) на долю "платформы"[То есть, соответственно, Firefox’а, Google Desktop’а и т. п.]. Входная планка для прото-программиста резко снижается: не нужно особо заботиться ни об ошибках, ни о сохранности пользовательских данных - ничего критичнее "соединение не может быть установлено" "платформа" сделать просто не позволит; не нужно даже глубоко знать и понимать язык разработки, достаточно иметь справку по нескольким необходимым командам.

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


<<Обобществленные истины
Все материалы номера
Что и зачем? >>