Код — это обязательство (а не актив). Технические руководители этого не понимают. Они думают, что ИИ великолепен, потому что он производит в 10,000 раз больше кода, чем программист, но это просто означает, что он производит в 10,000 раз больше обязательств. 1/
Если вы хотите получить версию этой темы в формате эссе для чтения или分享, вот ссылка на мой блог, свободный от слежки, рекламы и трекеров: 2/
AI — это асбест, который мы засовываем в стены нашего высокотехнологичного общества: Код — это обязательство. *Возможности* кода — это активы. 3/
Цель технического магазина заключается в том, чтобы иметь код, чьи возможности генерируют больше дохода, чем затраты, связанные с его поддержкой. 4/
Долгое время компании питали ложное убеждение, что код со временем стоит меньше в эксплуатации: после начального периода отладки, в течение которого находят и устраняют ошибки в коде, код перестает нуждаться в значительном обслуживании. 5/
В конце концов, код — это машина без движущихся частей — он не изнашивается; он даже не устает. Это тезис книги Пола Мейсона 2015 года *Посткапитализм*, книги, которая устарела удивительно быстро (хотя, возможно, не так быстро, как политическая репутация самого Мейсона). 6/
Код не является бесконечно воспроизводимой машиной, которая не требует труда. Скорее, это хрупкая машина, для поддержания которой в хорошем рабочем состоянии требуются все более героические меры, и которая в конечном итоге "изнашивается" (в смысле необходимости полного рефакторинга). 7/
Чтобы понять, почему код является обязательством, нужно понять разницу между "написанием кода" и "программной инженерией." "Написание кода" — это невероятно полезное, увлекательное и захватывающее занятие. 8/
Это включает в себя разбиение сложных задач на отдельные шаги, которые описаны так точно, что компьютер может их надежно выполнять, оптимизируя производительность, находя умные способы минимизировать требования, которые код предъявляет к ресурсам компьютера, таким как ОЗУ и циклы процессора. 9/
Тем временем, "программная инженерия" — это дисциплина, которая включает в себя "написание кода", но с акцентом на долгосрочные операции *системы*, частью которой является этот код. 10/
Программная инженерия занимается процессами, которые генерируют данные, которые получает система. Она также касается процессов, которые система использует для передачи обработанной информации. 11/
Это касается смежных систем, которые получают данные от одних и тех же процессов на входе и/или передают данные тем же процессам на выходе, к которым система передает данные. 12/
"Написание кода" заключается в создании кода, который *хорошо работает*. "Программная инженерия" заключается в создании кода, который *хорошо терпит неудачи*. Это о том, чтобы сделать код читаемым - чтобы его функции могли быть поняты третьими сторонами, которые могут быть приглашены для его поддержки. 13/
Эти третьи стороны могут быть приглашены адаптировать процессы вниз по течению, вверх по течению или смежные с системой, чтобы предотвратить ее сбой. 14/
Вот в чем дело: любой нетривиальный код должен взаимодействовать с внешним миром, а внешний мир не статичен, он *динамичен*. Внешний мир постоянно разрушает предположения, сделанные авторами программного обеспечения, *все время*, и каждый раз, когда это происходит, программное обеспечение нужно исправлять. 16/
Помните Y2K? Это был день, когда идеально работающий код, работающий на идеально работающем оборудовании, перестал функционировать - не потому, что код изменился, а потому что *время шло*. 17/
Мы находимся в 12 годах от проблемы Y2038, когда 32-битные версии Unix перестанут работать, потому что они тоже исчерпают количество вычисляемых секунд. 18/
Существование "мира" является неотъемлемым фактором, который изнашивает программное обеспечение и требует его перестройки, часто с огромными затратами. Чем дольше код находится в эксплуатации, тем более вероятно, что он столкнется с "миром." 20/
Возьмите код, который устройства используют для отчета о своем физическом местоположении. Изначально это использовалось для таких вещей, как выставление счетов - определение, какую сеть оператора или провайдера вы использовали и находитесь ли вы в роуминге. 21/
Затем наши мобильные устройства использовали этот код, чтобы помочь определить ваше местоположение и предоставить вам пошаговые указания в навигационных приложениях. Затем этот код был повторно использован, чтобы помочь нам найти наши потерянные устройства. 22/
Это стало способом находить *украденные* устройства, что резко отличается от поиска потерянных устройств. При поиске потерянного устройства вам не нужно сталкиваться с возможностью того, что злоумышленник отключил функцию "найти мое потерянное устройство". 23/
Эти дополнительные случаи использования - верхний, нижний и смежный - выявили ошибки в исходном коде, которые никогда не проявлялись в предыдущих приложениях. 24/
Например, все службы геолокации должны иметь какое-то стандартное поведение в (очень распространённом) случае, если они не совсем уверены, где они находятся. 25/
Возможно, у них есть общее решение - например, они знают, к какой сотовой вышке они подключены, или они помнят, где они были в *последний* раз, когда получили точное местоположение - или, возможно, они совершенно потерялись. 26/
Оказывается, в многих случаях приложения для определения местоположения рисовали круг вокруг всех мест, где они *могли* находиться, а затем устанавливали свое местоположение в центре этого круга. 27/
Это нормально, если круг всего в несколько футов в диаметре, или если приложение быстро заменяет это приближение более точным местоположением. Но что, если местоположение простирается на мили и мили, и определение местоположения *никогда* не улучшается? 28/
Что если местоположение любого IP-адреса без определенного местоположения будет указано как *центр континентальных США*, а любое приложение, которое не знает, где это, сообщает, что оно находится в доме в Канзасе? 29/
И в моем городе Бербанк, где сервис обмена местоположением Google когда-то сообщил нам, что наша тогдашняя 11-летняя дочь (до которой мы не могли дозвониться) находилась в 12 милях, на съезде с автомагистрали в неинкорпорированной части округа Лос-Анджелес. 32/
(Она была в близлежащем парке, но вне зоны действия, и приложение оценило её местоположение как центр региона, в котором оно в последний раз зафиксировало её.) (Это были тяжелые пару часов.) 33/
Исходный код — код, который использует некоторые когда-то безвредные значения по умолчанию для маскировки неизвестных местоположений — необходимо обновлять *постоянно*, потому что связанные с ним процессы вверх по потоку, вниз по потоку и соседние процессы меняются *постоянно*. 34/
Чем дольше этот код остается без изменений, тем более устаревшими становятся его первоначальные поведения, и тем более барочными, запутанными и неясными становятся патчи, наложенные на него. 35/
Код не является активом - это обязательство. Чем дольше работает компьютерная система, тем больше технического долга она представляет. Чем важнее система, тем сложнее ее остановить и полностью переделать. 36/
Вместо этого новые слои кода накладываются на него, и там, где слои кода встречаются, возникают трещины, в которых эти системы ведут себя не совсем так, как ожидалось. 37/
Хуже того: когда две компании сливаются, их соединенные, трещиноватые ИТ-системы разбиваются вместе, так что теперь есть *соседние* источники технического долга, а также трещины вверх и вниз по потоку: 38/
Вот почему гигантские компании так подвержены атакам программ-вымогателей — они полны несовместимых систем, которые были заставлены работать в подобии совместимости с различными формами цифрового пластилина, веревками и проволокой для упаковки. 39/
Они не являются водонепроницаемыми, и их нельзя сделать водонепроницаемыми. Даже если их не сносят хакеры, они иногда просто падают и не могут быть подняты обратно. 40/
Помните, когда компьютеры Southwest Airlines вышли из строя на всю рождественскую неделю 2022 года, оставив миллионы путешественников в затруднительном положении? 41/
Авиакомпании особенно плохи, потому что они рано перешли на компьютеризацию и никогда не могут отключить старые компьютеры, чтобы заменить их новыми. Вот почему их приложения такие ужасные. 42/
Вот почему так ужасно, что авиакомпании уволили своих сотрудников службы поддержки и требуют от пассажиров использовать приложения для *всего*, даже несмотря на то, что приложения не. работают. Эти приложения никогда не будут работать. 43/
Причина, по которой приложение British Airways отображает "Произошла неизвестная ошибка" 40-80% времени, заключается не только в том, что они уволили весь свой IT-персонал и передали работу низким подрядчикам за границей. 44/
Это так, конечно, - но также и то, что первые компьютеры BA работали на электромеханических клапанах, и всё, что с тех пор было создано, должно быть обратно совместимо с системой, которую один из протеже Алана Тьюринга выдолбил из целого бревна своими собственными передними зубами. 45/
Код — это обязательство, а не актив (новое приложение BA отстает от графика на годы). Код — это обязательство. Серверы терминалов Bloomberg, которые сделали Майкла Блумберга миллиардером, работают на RISC-микросхемах. 46/
Это означает, что он застрял в использовании уменьшающегося числа специализированных поставщиков оборудования и дата-центров, оплачивая специализированных программистов и создавая хрупкие цепочки кода для подключения этих RISC-систем к их менее экзотическим аналогам в мире. Код не является активом. 47/
AI может писать код, но AI не может заниматься программной инженерией. Программная инженерия заключается в том, чтобы продумывать *контекст* - что будет перед этой системой? Что будет после нее? Что будет находиться рядом с ней? Как изменится мир? 48/
Программная инженерия требует очень широкого "контекстного окна", чего у ИИ нет и не может быть. Контекстное окно ИИ узкое и поверхностное. Линейное увеличение контекстного окна ИИ требует *геометрического* роста вычислительных ресурсов: 49/
Написание кода, который работает, не учитывая, как он может сломаться, — это рецепт катастрофы. Это способ создать технологический долг в больших масштабах. Это как засыпать асбест в стены нашего технологического общества. 50/
Начальники *не понимают*, что код — это обязательство, а не актив. Вот почему они не могут замолчать о чат-ботах, которые выдают в 10,000 раз больше кода, чем любой человеческий программист. 51/
Они думают, что нашли машину, которая производит *активы* в 10,000 раз быстрее, чем человек-программист. Но это не так. Они нашли машину, которая производит *обязанности* в 10,000 раз быстрее, чем любой человек-программист. 52/
Поддерживаемость — это не просто вопрос накопленного опыта, который учит вас, где находятся подводные камни. 53/
Это также требует развития "Fingerspitzengefühl" - "чувства кончиков пальцев", которое позволяет делать разумные предположения о том, где могут возникнуть ранее невидимые ловушки. 54/
Это форма процессуального знания. Это неизбежно. Это не скрыто даже в самом большом корпусе кода, который вы могли бы использовать в качестве обучающих данных: *Парень*, как же технобоссы этого не понимают. 55/
Возьмите Microsoft. Их большая ставка сейчас сделана на "агентный ИИ." Они хотят установить шпионское ПО на ваш компьютер, которое будет захватывать каждое нажатие клавиши, каждое сообщение, каждый экран, который вы видите, и отправлять это в облако Microsoft, предоставляя множеству чат-ботов доступ к этим данным. 56/
Они утверждают, что вы сможете сказать своему компьютеру: "Забронируй мне поезд до Кардиффа и найди тот отель, о котором говорил Кори в прошлом году, и забронируй мне там номер" и он это сделает. Это невероятно неосуществимая идея. 57/
Ни один чат-бот не способен на все эти вещи, что Microsoft охотно признает. Вместо того чтобы делать это с помощью одного чат-бота, Microsoft предлагает разделить это между десятками чат-ботов, каждый из которых, как надеется Microsoft, достигнет 95% надежности. 58/
Это совершенно неправдоподобный стандарт чат-бота сам по себе, но учтите следующее: вероятности *умножаются*. Система, содержащая два процесса, работающих с надежностью 95%, имеет общую надежность 90,25% (0,95 * 0,95). 59/
Разделите задачу между парой десятков ботов с точностью 95%, и вероятность того, что эта задача будет выполнена правильно, стремится к *нулю*. 60/
Тем временем, в декабре один из руководителей Microsoft попал в неприятности, когда опубликовал в Linkedin сообщение о своем намерении заставить ИИ переписать *весь* код Microsoft. 63/
Рефакторинг кодовой базы Microsoft имеет много смысла. Microsoft, как и British Airways и другие устаревшие компании, имеет много очень старого кода, который представляет собой несостоятельный технический долг. 64/
Некоторые из вас *являются* программистами, которые нашли чат-ботов невероятно полезными для написания кода. Это распространённый парадокс ИИ: почему некоторые люди, использующие ИИ, находят его действительно полезным, в то время как другие его ненавидят? 66/
Является ли так, что люди, которые не любят AI, "плохи в AI?" Являются ли фанаты AI ленивыми и не заботятся о качестве своей работы? 67/
Безусловно, происходит и то, и другое, но даже если вы научите всех быть экспертами в области ИИ и исключите из выборки всех, кто не гордится своей работой, парадокс все равно останется. 68/
Истинное решение парадокса ИИ заключается в теории автоматизации и концепции "центуров" и "обратных центуров": 69/
В теории автоматизации «центавр» — это человек, которому помогает машина. «Обратный центавр» — это тот, кто был призван *помогать машине*. 70/
Предположим, вы программист, который использует AI для написания рутинного кода, который у вас есть время и опыт проверить, применяя ваше интуитивное понимание и процессуальные знания, чтобы убедиться, что он соответствует назначению. 71/
Легко понять, почему вы можете считать использование AI (когда вы решите, так, как вы решите, с тем темпом, который вы выберете) полезным. Но представьте, что вы программист, которому приказали производить код в 10 раз, 100 раз или 10 000 раз быстрее, чем раньше. 72/
Скажи, что единственный способ сделать это — через AI, и нет человеческого способа, которым ты мог бы просмотреть этот код и убедиться, что он не сломается при первом контакте с миром, тебе это не понравится: 73/
(Вам это будет ненавистно еще больше, если вы стали «ведомым» ИИ, лично отвечая за ошибки ИИ.) Существует еще один способ, которым программисты находят сгенерированный ИИ код невероятно полезным: когда этот код *изолирован*. 74/
Если вы выполняете один проект - скажем, конвертируете одну партию файлов в другой формат, всего один раз - вам не нужно беспокоиться о последующих, предшествующих или смежных процессах. Их нет. 75/
Вы пишете код, чтобы сделать что-то один раз, не взаимодействуя с другими системами. *Много* программирования — это именно такие утилитарные проекты. Это утомительно, неблагодарно и готово к автоматизации. 76/
Множество личных проектов попадают в эту категорию, и, конечно, по определению, личный проект — это проект-центавр. Никто не заставляет вас использовать AI в личном проекте — всегда ваш выбор, как и когда вы используете любой инструмент для личных нужд. 77/
Но тот факт, что программисты иногда могут улучшить свою работу с помощью ИИ, не отменяет того, что код является обязательством, а не активом, и что код ИИ представляет собой производство обязательств в больших масштабах. 78/
В истории технологической безработицы есть идея о том, что новые технологии создают новые рабочие места, даже когда они делают старые устаревшими: для каждого кузнеца, который потерял работу из-за автомобиля, есть работа, ожидающая его в качестве механика. 79/
С тех пор как пузырь AI начал раздуваться, мы слышали много версий этого: AI создаст рабочие места для "инженеров запросов" - или даже создаст рабочие места, которые мы не можем представить, потому что они не будут существовать, пока AI не изменит мир до неузнаваемости. 80/
Я бы не рассчитывал на получение работы в причудливой профессии, которую буквально невозможно представить, потому что наше сознание еще не изменилось настолько из-за ИИ, чтобы обрести способность концептуализировать эти новые способы работы. 81/
Но если вы *ищете* работу, которую ИИ определенно создаст, миллионами, у меня есть предложение: цифровое удаление асбеста. 82/
Код AI - написанный с скоростью 10,000 раз быстрее любого человеческого программиста, созданный для того, чтобы хорошо работать, но не для того, чтобы терпеть неудачи с достоинством - это цифровой асбест, которым мы заполняем наши стены. Наши потомки будут проводить поколения, выкапывая этот асбест из стен. 83/
Будет много работы по исправлению того, что мы сломали благодаря самой опасной психозе ИИ - иллюзорному убеждению, что "написание кода" это то же самое, что и "программная инженерия." 84/
При таком темпе мы обеспечим полную занятость для поколений удалителей асбеста. 85/
3,09K