11 December 2012

The Next Big Thing

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

Хотелось бы вступить с автором в некую полемику по теме, плюс самому немного порассуждать о том, на чем же будут программировать завтра.

Начать хочу вот с чего. Не хочется вешать ярлыки и мыслить шаблонно, но некоторые рассуждения автора заметки наводят меня на мысли, что как человек ушел лет 10 или 15 назад в Java, так с тех пор оттуда толком и не высовывался, поэтому мыслит довольно узко и со своей колокольни. Не знаю, дошло ли там до финальной стадии -- болезни под названием "Java головного мозга", но многие вещи читать очень забавно. Например, я никак не могу принять идею о предыдущем витке спирали истории, в которой цепочкой выстроены языки C, Obj-C и C++ якобы с точки зрения возрастания количества объектной-ориентированности в каждом из них. C++ это вообще-то язык не завязанный на одну единственную парадигму, и его сложность и богатство фич связаны не конкретно с ООП, а с решением вопросов типизации, что, согласитесь, сильно разные вещи. А с точки зрения ООП, я не могу сказать, что Obj-C сильно более бедный и неразвитый язык, чем тот же C++ или даже, извините, Python. Сами по себе идеи объектно-ориентированного подхода, как по мне, не требуют на уровне языка какого-то прямо таки нереального количества фич, свистелок и перделок.
В качестве примера смотрите, например, Oberon; самый минимум, который надо добавить в языки типа Си, чтобы они стали объектно-ориентированными -- всего лишь наследование структур...

Что же касается будущего... Кровавый Enterprise это, конечно, очень здорово, но, наверное, стоит смотреть и на другие ниши. Из того, что хотел бы выделить я.

Десктоп для массового пользователя -- никаких изменений не предвидится. Сегодня 90+% софта для casual ниши написана на C++ -- программы для работы с мультимедиа файлами, офис, браузер, почта, IM, игры бла бла бла. Конечно, для Windows, какую-то небольшую долю забирает .NET, для OS X, понятно, Obj-C, ну и еще какой огрызок есть за Java.
Революции тут точно не предвидится и вот почему. В прошлом десятилетии людям в Microsoft просто сорвало башню на почве .NET и они пророчили миру "одно сплошное телевидение". Вплоть до того, что значительная часть ОС становится managed и для сторонних программ .NET становится первым и последним API. Не получилось. Не работает. В итоге, в Windows 8 операционная система предоставляет объектно-ориентированный native API, который, очень легко и красиво, при желании, отображается на .NET платформу.
Очевидно, что Microsoft свою гору user level кода типа проводника, IE или офиса под .NET переписывать не будет. Эта вотчина как была, так и осталась за C++.
Собственно, по грабелям, на которые шагала Microsoft и усердно направляла других, прошлось довольно много компаний. Например, можно вспомнить историю с Evernote, когда народ сначала кинулся все переписывать под .NET и WPF, а потом все это дело просто выбросили и снова переписали на C++. Как по мне -- очень показательная история.

Идем дальше. Следующая огромная ниша -- веб.
На мой взгляд, самый большой тренд здесь (и он, конечно, далеко не вчерашний) это рост объема кода на client side и всевозрастающая роль JavaScript. При этом сам JS язык сильно не идеальный, и я думаю, что его роль может быть низведена историей до роли ассемблера, поверх которого будут работать какие-то более другие штуки, в том числе, со статической типизацией.
Ну а со стороны server side ждать революции не приходится. Вряд ли уйдет скриптовая троица PHP, Python, Ruby, ну а те, кому нужна максимальная производительность (или экономия) со стороны серверов, будут выбирать между C++ или Java. Кстати, про экономию. Можете представить себе, сколько платит за датацентры в месяц какой-нить facebook, и сколько он начал экономить денег, переписывая некоторые части кода с PHP на C++.

И последняя тема, которую хотелось бы затронуть -- мобильное направление или, как сегодня модно говорить, apps.
Тут ситуация простая. Есть две действительно популярные платформы -- iOS и Android. Некоторый потенциал, как ни крути, есть у платформы Microsoft. И тут мы подходим к очень простой идее -- все разработчики хотят иметь максимальный охват аудитории, т.е. быть представленными на всех возможных платформах. При этом никто не хочет полностью переписывать каждый раз весь код. Фактически единственный общий знаменатель у всех вышеперечисленных платформ -- C++. Есть вопросы?...


К чему я это все веду? К тому, что никаких революций и "нового витка спирали" не грядет. Более того, пережив mananged лихорадку десятилетия 2000-х, и вступив в мобильную лихорадку в конце этих десяти лет, мир начинает по новому смотреть на те инструменты, которые, казалось бы, сильно надоели и почти были сданы в утиль еще в 90-х.

Закон Мура пока еще работает, но давно уже не радует программистов, на плечи которых взвалили весь геморрой управления многоядерными решениями. Линейная скорость практически перестала расти, а значит сегодня, здесь и сейчас, у тебя есть вполне понятный потолок и ты хочешь выжать из него максимум.

Появились смартфоны и планшеты, которые сильно слабее ПК, но на которых пользователь хочет 60 fps и чтобы никаких лагов. А еще там надо беречь батарейку.

С взрывным ростом веба народ стал задумываться, а так ли это дешево, держать под десяток миллионов пользователей датацентры, в которых гоняется серверный код написанный на PHP или даже, извините, Java.

The Next Big Thing уже очень давно с нами, и называется она C++.


No comments:

Post a Comment