Сегодня мы пообсуждаем что-то родное и тёплое: гиковы слезы и программерские муки. В качестве исходного материала я выбрал очень резонансную публикацию Тима Брея, мастодонта компьютерной индустрии, начинавшего на рубеже веков в Antarctica Systems, затем отдавшего 10 лет жизни сначала Sun Microsystems, а потом Google (где и числится в штате поныне).
Тим Брей — жжёный программист с 30-летним опытом, наделённый совершенно уникальным талантом философского осмысления бытия. Признаюсь, других таких я вообще не встречал по жизни — ни в виртуальности, ни наяву. Гениальных программистов — сколько угодно! Гениальных метафизиков — меньше, но тоже есть. Но так, чтобы в одном флаконе и то и другое, — можно пересчитать на пальцах одной руки. Тим Брей один из них.
Пост, послуживший отправной точкой для нашего осмысления, называется весьма незамысловато — «Software 2014», что не помешало Тиму Брею в паре тысяч знаков разложить по полочкам всю проблематику современного софтостроения. Сделал он это с позиции программиста, поэтому оставляю профессиональной части аудитории насладиться нюансами технотронного жаргона самостоятельно по линку выше (бо не смею в калашный ряд 🙂 ), сам же попробую оценить ту же ситуацию, однако ж с другой стороны баррикад — пользовательской. То есть «Software 2014» глазами не программиста, а потребителя.
Синопсис концепции Тима Брея сводится к простой истине: код на серверной стороне выглядит восхитительно, код на стороне клиентской — приближается к катастрофе. Обосновывает свою позицию программист-философ следующим образом.
Server-side Programming:
— Все технологии отшлифованы десятилетиями интенсивных разработок и являют собой сегодня упорядоченный мейнстрим, объединённый важной характеристикой: независимо от языка программирования, среды, фреймворка и библиотек серверные программы универсально ориентированы на HTTP: они этот протокол понимают, умеют на нем общаться и создают на его основе API.
— Универсальность серверному программированию обеспечивает всеобщее признание схемы использования шаблонов проектирования Model-View-Controller (MVC, модель – представление — контроллер). Несколько портят картину языки PHP и Spring («Кое-кто ещё пытается писать на них важные приложения, но их давно уже никто не принуждает к такому выбору»).
— Существует большое число языков программирования, пригодных для создания серверных приложений, которые с лёгкостью справляются с главным трендом 2014 года — масштабируемыми системами.
Ну и так далее. Картина, одним словом, замечательная. Совсем другой коленкор —
Client-side Programming:
— Главная причина кошмара, связанного с написанием программ, которые исполняются не на сервере, а на клиентском оборудовании, кроется в одном слове — mobile! В самой мобильности, ясное дело, нет ничего предосудительного — чудовищна лишь современная реализация этого понятия. А именно: для того чтобы создавать по-настоящему универсальный мобильный клиент, программисту требуется писать три разных кода — для Web, для iOS и для Android. Перейти от одного к другому автоматически не получается, нужно именно что писать три разных программы.
— И iOS, и Android по гамбургскому счету — ужасные операционные системы хотя бы потому, что нужно пользоваться ужасными языками — Java или Objective-C. К ним можно привыкнуть, их можно принять на веру, с ними можно примириться и даже — полюбить, но это всё — от безвыходности. Эта любовь сродни любви заложника к захватившему его террористу (стокгольмский синдром). Можно, конечно, писать приложения на HTML5, но это такой же паллиатив, особенно на фоне возможностей, существующих для server-side программирования.
— Цикл обновления на мобильных платформах чудовищный. В случае с iOS речь идёт о днях, на Android — о часах. Тим Брей предлагает сравнить процедуру обновления с приложениями, основанными на браузерах (несколько секунд), чтобы понять критичность этого недостатка мобильных экосистем («Вы обнаружили в своём приложении баг, который ведёт к потере данных, нарушению целостности пользовательского аккаунта и подрыву безопасности клиента? Sucks to be you — хреново быть в вашей шкуре!»).
— Мобильному «железу», с которым приходится работать, хронически недостаёт памяти, мощности ЦПУ и заряда батареи.
— Количество формфакторов на рынке приближается к бесконечности, и с каждым днём ситуация становится ещё хуже.
— Как ни банально это звучит, заработать программисту на мобильных приложениях очень и очень сложно: «Apple постоянно говорит о миллиардах и миллиардах долларов, которые они выплачивают в своём App Store программистам, почему же тогда я лично не знаю ни одного, кто бы зарабатывал серьёзные деньги на мобильных приложениях?»
— Ну и далее по мелочам: JavaScript sucks, браузерные API suck, CSS sucks, а все вместе сводится к уже прозвучавшему — Mobile sucks! А вместе с ним — suck и всё клиентское программирование.
Из всего сказанного Тим Брей делает сакраментальный вывод: 2014 год продолжит оставаться для серверного программирования стабильной, отлаженной и приятной средой; что касается клиентского программирования, то сказать ничего определённого невозможно, потому что рамках существующих экосистем выхода не заметно.
Попробую оценить эту реплику профессионала с позиции профана, то есть того самого бедолаги, расположенного с клиентской стороны баррикады, ради которого стараются Тим Брей и его соратники. Слово «пользователь» происходит от глагола «пользоваться», а это действие, как вы понимаете, не предполагает заглядывания под капот. Вот моя машина, я в неё сел и поехал. Я хочу только одного — чтобы в ней ничего не ломалось и мне было в ней комфортно. Как там внутри у моей машины всё устроено, какие технологические процессы были задействованы, какие уникальные разработки использованы, меня как пользователя не интересует в принципе. Соответственно, и страдания Тима Брея как программиста мне фиолетовы. В конце концов, если программист этим занимается — значит ему либо интересно, либо выгодно.
Что меня как пользователя может не устраивать в клиентских программах в целом и в мобильных в частности? Можно, конечно, повыпендриваться и побрюзжать на «тоталитаризм» iOS, можно возмутиться бесхозной энтропией Android, можно даже изобразить из себя «продвинутого пользователя» и возбухнуть на громоздкую и тормозную Java, однако реальность такова, что пользовательский софт даже в его сегодняшнем виде тысячекратно зашкаливает потребности 99% этих самых пользователей!
Причём зашкаливает по всем параметрам: и по разнообразию, и по качеству исполнения, и по функциональности, и по диапазону цен, и по мере интеграции в экосистему (любую — что iOS, что Android). Пользователи планеты Земля давно уже получили всё, что только могут пожелать в ближайшие 10 лет. И дай-то бог, чтобы они могли освоить одну миллионную часть того, что уже существует в ближайшие 50 лет.
Собственно говоря, сказанного достаточно для того, чтобы сделать «пользовательский» вывод по пророчеству Тима Брея: все эти причитания матерого программиста-философа о беспросветности программирования client-side сублимируют не изъяны языков, API, экосистем и существующей мобильной парадигмы, а изъяны эволюции! В том смысле, что мы давно уже достигли такой стадии развития пользовательского программирования, после которой всякая дальнейшая работа (за исключением косметики) является избыточной.
Я внимательно слежу за всем существующим в мире софтом, написанным и для Windows, и для Mac OS X, и для Android, и для iOS. И слежу уже как 24 года! И вот что я вам скажу: за последние 10 лет не произошло никакого качественного улучшения того, что уже было достигнуто! Менеджеры задач, редакторы, органайзеры, PIM’ы, браузеры, календари, файловые менеджеры, чат-клиенты, видеоклиенты, всё-всё-всё сегодня ничуть не лучше, чем было 10 лет назад (а Skype — так и хуже 🙂 ). Больше рюшечек, больше свистелок, больше избыточного и бесполезного лжефункционала (и все это за счёт утяжеления кода и усиления жоркости до «железа»), но ничего принципиально нового и интересного. В 2014 году я бы прекрасно мог продуктивно работать и удовлетворять свои чисто пользовательские (не профессиональные) запросы на любой компьютерной системе с тем же софтом, который у меня был в 2004 году.
Следовательно, Тим Брей лукавит. Все его чисто программерские проблемы — это фикция в глазах потребителя. Просто коллегам Тима Брея по гамбургскому счету давно пора менять профессию. Слишком уж много развелось программистов в сфере пользовательского софта, и им просто там нечем заняться. Разве что — взять и с нуля переделать этот жуткий, дикий и уродливый КОМПЬЮТЕРНЫЙ КОСМОС, созданный отцами-основателями до того криво, до того перректально и без малейшей оглядки на будущее, что аукнется ещё не одному поколению.