Программировать в 90-х было сложно, но этот концерт был достаточно милым. Они предоставили нам станции SPARC, а целевой платформой был Solaris. Так что да, нам пришлось использовать C++, но тогда это было современно. Управление памятью, ctors и dtors. Мы читали нашего Скотта Мейерса.

Но затем появились Bean Counters.

Сказали, что заключили сделку с HP. Сладкий. Новые серверы обойдутся на десятки тысяч дешевле. Это было слишком хорошо, чтобы пропустить.

Они не знали, что сделали.

На серверах HP был древний компилятор с этапом предварительной компиляции, который преобразовывал C++ в C перед тем, как передать его в обычный компилятор C. То, что эта штука сделала с шаблонами Cpp, было достаточно, чтобы заставить взрослых мужчин плакать. И это было медленно. Так медленно. То, что на Solaris занимало 20 минут, теперь занимает часы.

Это было не самое худшее. Мы все еще разрабатывали на SPARC, но поставляли на HP-UX. Объектный код, выдаваемый компиляторами, зависит от платформы. Это будет работать на SPARC. Мы пересылали их по FTP на ящики HP. Потребуется целая вечность, чтобы скомпилировать, а затем сломать и сжечь: SIG SEGV.

Теперь код был замусорен правилами предварительной обработки:

#ifdef __sun Выполните некоторые действия, характерные для Solaris

#else, если определено HPUX Сделайте что-нибудь еще (вероятно, мерзость)

Были даже #прагмы. Я даже не могу вспомнить, почему. И мне все равно.

Разрыв между средами разработки и продакшена перерос в пропасть, в которую мы регулярно попадали: компилировать, тестировать, ftp, компилировать, тестировать, фейл.

В конце концов, сами Sun положили конец этому безумию. У них была новая игрушка. Назвал это Java, как в кофе. И пахло хорошо. Сборка мусора, никаких указателей, обработка исключений. API менялись с каждым второстепенным релизом, ломая весь наш код, но нас это не волновало, потому что у Java был свой секрет — JVM.

WORA: Напиши один раз, беги куда угодно. Это было похоже на волшебство. Компилятор записал байтовый код, а не объектный код. Везде, где вы можете запустить JVM, вы можете запустить свой код Java. Просто сверните его в банку.

По крайней мере, такова была теория.

На практике это обычно срабатывало, но когда не срабатывало — ну что ж, удачи. В любом случае проблема только что сдвинулась — управление зависимостями, пути к классам, загрузчики классов. Спустя годы такие извращения, как OSGi, исказят состояние Java-искусства, пытаясь решить эти проблемы. А пока мы просто прошлись по списку заместителей, ожидая, кто из них The One. О Плюще мы и мечтать не могли.

По крайней мере, нам не пришлось использовать make с его психозом пробела/табуляции. И у нас был Eclipse, так что Emacs можно было взять в поход. В языке были многопоточные примитивы. Жизнь была хороша. Кто-то даже написал книгу Эффективная Java в честь Мейерса.

Но этого было недостаточно. Различия в ОС сохранились. Версии компилятора различались. Версии зависимостей различались. Версии зависимостей зависимостей различались. Зависимости ваших коллег отличались. Зазор остался.

VirtualBox поразил меня. ПК под управлением Windows трансформировался в Solaris. Удивительно, но я не сразу разглядел новинку.

Снимки. Как обезвоженные машины. Просто добавь воды. Один и тот же результат каждый раз. Твоя машина, его машина, живая машина.

Однако совместное использование снимков было проблемой, а запуск нескольких ОС на машинах с несколькими гигабайтами памяти был еще хуже. ВМ тяжелые. Тестирование? да. Разработка? Нет.

Память дешевела, а потом появился Бродяга. Виртуальные машины, поддерживающие сценарии, с репозиторием полезных моментальных снимков, описанных в цветном YAML. Vagrant, и у всех нас была одинаковая среда разработки.

Когда у нас стало достаточно памяти для запуска нескольких виртуальных машин, микросервисы потребовали больше. Антисоциальный. Изолируйте нас!

Они говорят, что ответ был вокруг в течение долгого времени.

Контейнеры. Меня познакомил Докер. Казалось, что за одну ночь все им воспользовались. Я мог понять, почему.

Как виртуальные машины, с локальными и удаленными репозиториями; толкай и тяни. Файловая система Union сделала его эффективным, общее ядро ​​сделало его легким. Наконец, мы могли запускать одно и то же в разработке, тестировании и производстве.

Разрыв закрылся.