Диалектика прогресса, помимо прочего, заключается в том, что любая инновация — техническая, общественная, да хоть кулинарная — содержит в себе механизм собственного разрушения. По мере развития инновационной «штуки», развивается и встроенный в неё саморазрушитель. В какой-то момент он обязательно сработает, и тут уже как повезёт: то ли «штука» окажется достаточно устойчивой к воздействию этого механизма, то ли самоуничтожившаяся инновация успешно заменится другой, ещё более прогрессивной, то ли настанут регресс и тёмные века. В человеческой истории можно найти примеры всех трёх сценариев.
Есть такой механизм-терминатор и в программистском ремесле. Построен он на поразительной особенности цифровых артефактов: эти артефакты практически бессмертны. Они не изнашиваются, не разлагаются, их можно без усилий копировать в любом количестве, и всякая копия, хоть стомиллионная, не будет вообще ничем отличаться от оригинала. Разумеется, физические носители изнашиваются, но сейчас это не имеет значения, потому что проблемы хрупкости носителей давно решены. Даже ваш простенький домашний NAS, куда вы заливаете вытащенные с торрентов сериалы, условно вечен, если там хотя бы два зеркальных диска, и к сети он подключен через источник бесперебойного питания.
Эта особенность цифровых артефактов весьма досаждает мерзким паразитам, зарабатывающим на дистрибуции музыки и фильмов, но сейчас речь не о них.
Последние 10-12 тысяч лет человечество стремилось к специализации. Скажем, производитель карет не заморачивался производством красивых мягких диванов — он обращался к специалисту по красивым мягким диванам. Эксперт-диваньé не занимался выделкой кожи — он обращался к скорняку. Скорняк, в свою очередь, не ковал скобель — он покупал его у кузнеца. Ну и так далее. При этом производственный цикл каждого из этих продуктов всякий раз повторялся с самого начала. Кузнец не мог сделать один образцовый скобель и потом просто копипастить его по мере надобности — всякую новую железку ему приходилось ковать сызнова. Таким образом, мастерство ремесленников сохранялось и совершенствовалось.
Похожим образом разрабатываются и программы. Программисты используют огромное количество библиотек — то есть готовых к употреблению инструментов, реализующих разнообразные полезные функции — и встраивают их в свои продукты. И в отличие от скобеля, эти библиотеки не ржавеют, не тупятся и не ломаются, их не нужно делать заново для каждого клиента. Единожды написанная библиотека может служить вечно.
Вечно. Это требует некоторого осмысления.
Если там реализован какой-нибудь метод градиентного спуска, то в общем, после релиза этой библиотеки нужда в людях, понимающих, что такое градиентный спуск, отпадает. Зачем они нужны — заново переписать то, что уже написано? Зачем нужен кузнец, если скобель можно просто скачать из интернета? Это не теоретический опасюк. У меня работал парень, который пошёл учиться на факультет машинного обучения, и ушёл после первого курса, поскольку его там обучали тому, что уже давно реализовано в пакетах типа scikit-learn — качай и пользуйся. И это, насколько мне известно, довольно популярная точка зрения.
Да ладно, возразит оптимист, библиотеки пишут ещё с 1960х — и ничо, никуда специалисты по градиентному спуску не делись. Благодарить за это надо три фактора: кривизну программерских ручек, непрерывно обновляющуюся технологическую среду и изолированность программистов. Доводка библиотек до ума, портирование их на новые платформы и многократное переизобретение одного и того же колеса людьми, не пользующимися результатами работы друг друга — сочетание этих факторов давало работу множеству программистов на протяжении последних пятидесяти с лишним лет.
Но ситуация меняется благодаря стремительному распространению облачных сервисов, массовому внедрению технологий контейнеризации, росту популярности open source даже в насквозь проприетарной вселенной Микрософта, а также победному шествию языка Python (который, кажется, имеет шансы стать программистским «лингва франка», о котором сообщество мечтало ещё со времён Pascal). В этой среде хорошо написанная библиотека может жить бесконечно долго, постоянно обрастая новыми сервисными фичами, но не претерпевая никаких изменений в ядре. И в какой-то момент мы обнаружим, что людей, способных что-то понять в этом ядре, уже не осталось.
Впрочем, к этому моменту все программы и так будет писать ChatGPT, так что трагедия исчезновения мастеров скоростного градиентного спуска пройдёт незамеченной.