Третий взгляд. От стиральных машинок к стандартизации программирования

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

Следующее очевидное соображение, которое нам понадобится: программы не работают сами по себе. Программы всегда

  • исполняются на вычислительном устройстве,
  • на котором есть [программная] среда, обеспечивающая выполнение программ.

Да, есть программы, которые работают на «голом» железе, но эти программы не входят в 90% обычных программ. И мы их сейчас не рассматриваем.

Их стоит когда-нибудь рассмотреть, хотя бы потому, что именно там скрывается предельное удовлетворение, который может получить разработчик программы. Я не знаю большего восторга от своей работы, чем тот восторг, который возникает, когда начинает работать код, порожденный твоим новым компилятором. И ты ощущаешь себя творцом, разворачивающим новое пространство, поднимая себя за шнурки от ботинок (bootstrapping). При этом у тебя программа, которую ты знаешь целиком, и  понимаешь до последней запятой, как она работает. Увы, но большинство программистов работает с крошечной надстройкой над огромной подводной частью айсберга. И понимает (и то далеко не всегда) только то, как работает эта надстройка. А если не работает, то программисту приходится пинать колеса и открывать/закрывать капот (или читать stackoverflow) в надежде, что произойдет чудо и машина заведется и поедет.

То, что мы обычно называем «программой» — это крошечная надстройка над вычислительным устройством, операционной системой, драйверами, фреймворками и библиотеками.

Программа не работает сама по себе, она подключена к среде, обеспечивающей выполнения, и она должна соответствовать требованиям этой среды, явным или неявным.

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

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

Хочу отметить, что мы можем говорить о стиральной машинке не учитывая окружение (например, выбирать себе машинку, сравнивать с другими) только потому, что у стиральной машины стандартизованы разъемы. Стандартизация позволяет забыть о среде, точнее не думать о ней, пока среда стандартна.

Если привезти стиральную машинку с американской вилкой, то придется:

  • Менять вилку (машинку)
  • Или менять розетку (среду)
  • Или ставить переходник.

Замечу, что для стиральных машинок (и вообще бытовой техники) задача давно решена и не требует участия разработчика стиральных машинок.

А вот для программ, дела со стандартизацией обстоят гораздо хуже. Программа почти всегда делается для конкретной обеспечивающей среды и может работать только в ней. И это безусловно плохо.

На сегодня есть 5 основных обеспечивающих выполнение программ сред: Windows, Linux, iOS, Android, Web. Это уже большой шаг вперед, по сравнению с тем, что было раньше. Стандартизация потихоньку идет. Увы, положение сильно осложняется тем, что каждая из этих обеспечивающих сред не едина, а делится на множество различных вариаций и девиаций.

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

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

Предвижу несколько возражений:

  • Стандартизировать нельзя, так как отсутствие стандартов выгодно корпорациям-монополистам. Полностью согласен, значит, надо что-то делать с корпорациями.
  • Стандартизировать нельзя, так как программирование – это творчество. Отбрасываем, так как речь идет о обычных программах. Впрочем, тут есть о чем поговорить, но отдельно.
  • Стандартизировать нельзя, так как программа – это не стиральная машина, у которой очень мало разъемов.

С 3-го пункта можно идти дальше, переходя на вопрос: Что и как стандартизировать.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *