lankastersky: (Default)
[personal profile] lankastersky
У программистов - железные нервы. Это только так кажется, что они нелюдимы и неподготовлены к жизни в жестоком мире людей. Просто большую часть жизни они проводят в мире бездушных нещадных программ. Которым не скажешь, что сегодня ты в плохом настроении или неважно себя чувстуешь. Она не будет тебя слушать, просто перестанет работать. Но даже когда ты уверен, что все под контролем, все четко отлажено, проверенно и оттестировано и работаешь уже сотни и тысячи часов - все равно что-нибудь может в любой момент на**нуться.

Как например сегодня.

С утра мой коллега открыл гугл карты, чтобы показать на круглом глобусе, как быстрей долететь до Бразилии через Хьюстон, а глобус больше был не круглый. У него не работает ни на одном девайсе, у меня везде работает нормально.

Я полез обновлять приложение на Google Play, а оказалось, что оно просто оттуда исчезло. Без всяких напоминаний и предупреждений. При этом я его вижу и могу редактировать через консоль разработчика. Не странно ли?

Потом перестали работать сервисы Google Cloud, которые вообще никто не трогал уже несколько месяцев. Оказалось, что они просто отключены в настройках админской консоли. Сами по себе отключились, ага. В отчетах ни слова. Включил обратно, заработало.


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

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

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

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

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

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

Можно долго говорить об ухищрениях, на которые идут программисты, чтобы хоть как-то удостовериться в работе своих программ. Например, создают "чудные тесты" (flaky tests), которые выполняются успешно только иногда (как машина, которая заводится не с первого раза); имитируют реальное окружение фейковым, а потом выпускают код в продакшн, надеясь, что там программа будет работать, как раньше; проверяют код друг друга глазами, надеясь, что он от этого станет более надежным и т.п.

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

Природа непредсказуема. Просто прими это. Железо непредсказуемо, потому что физика на квантовом уровне недетерминирована. Стартовали ракету, а в нее ударила молния. Запустили спутник с несколькими дублирующимися процессорами, их насквозь прошила быстрая частица и они все отказали, потому что стояли плотно в ряд. Послали другой спутник на Марс и забыли перевести футы в метры.

И тем более непредсказуемы программы, потому что написаны людьми, которые склонны ошибаться, даже самые умные из них. Честное слово, я даже буду рад, если когда-нибудь программы будут тоже писать роботами. Может, хоть тогда они станут надежней. Ведь они уже играют в шахматы лучше нас. А нам останутся чувства и эмоции; все то, что мы делали, начиная с древних времен.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

lankastersky: (Default)
lankastersky

January 2021

S M T W T F S
      12
3456789
10111213141516
171819 20212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 04:27 pm
Powered by Dreamwidth Studios