среда, 8 февраля 2012 г.

[prog.flame] Старческое (брюзжание на тему будущего программирования)

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

Ну а поскольку старческий маразм начинает маячить на горизонте, то уже можно и побрюзжать на молодежь с их оптимистично-фантастическим взглядом в будущее ;)

Во-первых, раздражает вера в то, что что-то можно тщательно спроектировать и хорошо придумать. Мол, код нужно хранить не в тексте, и даже не в (бинарном-)XML, а в реляционной СУБД. И если тщательно разработать соответствующий язык запросов… Откуда возьмется это “тщательно”, кто это сделает? Производство ПО – это производство, это не наука, в которой доказательство гипотезы Пуанкаре можно искать десятилетиями. В производстве любое работающее решение – это компромисс между желаемым и возможным, да еще и найденный в жестких временных рамках. И таки да, промышленно используемые языки программирования (Cobol, Fortran, C, C++, Java, C#, Perl, Ruby и пр.), страдающие целыми кучами болезней, – это как раз иллюстрация данного факта.

Во-вторых, раздражает нежелание адекватно воспринимать окружающий мир и отталкиваться от объективной реальности. История показала, что текстовое представление программ оказалось самым живучим. Не смотря на многочисленные попытки перейти от этого представления к какому-нибудь другому. По мне, так это объективный факт. Такой же, как восход Солнца на Востоке, а не на Юге. Тем не менее, не переводятся горячие головы, которые думают, что если “тщательно” подумать, то можно создать новую объективную реальность и заставить весь мир отказаться от хранения кода программ в текстовых файлах. Собственно, такое нежелание воспринимать реальность объективно проявляется не только по отношению к текстовым файлам, но и в других вопросах. Просто текстовые файлы – это очень яркий и показательный пример.

В-третьих, раздражает недооценка временности временных решений. Мол, сейчас временно есть зоопарк Web-программирования: сервер-сайд (JSP, ASP, etc) + клиент-сайд (JavaScript) + презентация (HTML, CSS). И это плохо. Но это временно, потом все будет хорошо. Или вот C++ – это плохо, это ужасный язык, он должен исчезнуть. Но временно пусть будет, а потом придет Java и все будет хорошо.

Не будет. Нет ничего более долговременного, чем временное ;)

В-четвертых, раздражает непонимание того факта, что завтрашнее будущее программирования определяется вовсе не тем, что сегодня выдумывают ученые в области computer science. Т.е. то, чем обычный разработчик будет заниматься, зависит не от сегодняшнего state of the art, а от того, на чем начали писать очередную промышленную систему вчера, если не позавчера.

Каждый день пишется все больше и больше кода. Но пишется на языках, которые применяются уже не один год – на Java, на C#, на JavaScript, на C++ и даже на Cobol. И именно это определяет ближайшее будущее. По двум простым причинам:

1. Написанный сегодня код нужно будет дописывать завтра. Поэтому раз на JavaScript пишут сейчас, то на нем будут писать и завтра.

2. Программируя на конкретном языке разработчик получает опыт и наработки, которые он не захочет просто так взять и выбросить. Поэтому, если Вася Пупкин писал на JavaScript сегодня, то он продолжит писать на JavaScript и завтра. Потому что умеет, потому, что у него есть багаж знаний. Этот же принцип работает и по отношению к компаниям, которые производят ПО. Если у конторы есть N миллионов строк на Java, которые можно переиспользовать в новых продуктах, то контора завтра будет писать на Java, переиспользуя эти N миллионов строк, а не переписывая их на каком-нибудь Haskell-е.

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

Ну и, в-пятых, мне фиолетово, какое будет будущее у программирования. Изменения в нем происходят не мгновенно, а поступательно. Поэтому в наличии будет достаточно времени, чтобы перестроится.

7 комментариев:

Left комментирует...

Действительно брюзжание. Необходимо выписать плетей за невосторженный образ мыслей. ;)

Евгений Охотников комментирует...

@Left:

Тю, батенько, какое ж то наказание: дюженой плетей больше, дюженой меньше? Вот лишение традиционных, благочестивых 100г перед ужином -- то наказание... :)

Roman Yankovsky комментирует...

Вообще, текстовые файлы хранятся в файловой системе, а это ведь тоже база данных. Т.е. код и сейчас в БД.

И если свести разговор к дроблению кода на какие-то более мелкие куски, чем файл (видимо, это имеется ввиду под переходом к БД), то почему нет? В тех языках, где единица инкапсуляции не файл (юнит), это выглядело бы вполне естественно.

Евгений Охотников комментирует...

@Roman Yankovsky:

Дело не в том, что можно сделать в рамках какого-то языка программирования. А в индустрии, которая вокруг уже сложилась и развивается именно потому, что текст программы хранится как текст в исходных файлах. Это и текстовые редакторы/IDE, и системы контроля версий, и анализаторы/документаторы, и кодогенераторы и ее куча всего разного.

имя комментирует...

действительно, на брюзжание весьма похоже

впрочем, статья того чувака не шибко умная, и я бы сказал что сам тот чувак не шибко умный

подробнее я расписал это на rsdn

добавлю, что способ хранения сам по себе не столь важен

вот, например, значение программы часто не зависит от проблеов -- так научились же diff-овать без учета пробелов

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

имя комментирует...

насчет брюзжания

/сарказм/ позиция "ну вот сделают они, ученые, корпорации, комитетчики -- и опять не так как нам надо, но время еще есть, успеем привыкнуть к новым трудностям" -- это не то

лучше занимать активную позцию -- по крайней мере определиться для себя, что хорошо и что плохо

Евгений Охотников комментирует...

@имя:

Ну вот я свою позицию и занимаю -- разрабатывать языки -- это не мое. Поэтому я буду пользоваться тем что есть. Пока это C++. Сменю предметную область или появится что-нибудь сильно лучше, тогда наверняка сменю C++ на что-нибудь более подходящее.

Но вот гадать о том, что это и как это будет... Не хочется уже, да и смысла в этом не вижу.