Во-первых, вообрази его как город-государство, которое тебе надлежит спроектировать и которым управлять. Во-вторых, взращивай его как растущий организм, который тебе надлежит питать и направлять. И в-третьих, испытывай его неустанно, в виртуальности и в реальности, покуда не сможешь обоснованно ему доверять. Тогда у тебя будет чёрный ящик, который работает так, как ты задумал, и который ты понимаешь в достаточной мере, даже если не увидишь его внутренностей.
Я разработал эту методологию, наблюдая великую силу программирования с помощью искусственного интеллекта и то, как оно меняет всё ремесло кодирования навсегда. В течение 2025 года ИИ наконец достиг уровня, на котором он мог писать полноценные программы, без того чтобы мастер-человек написал хоть одну строку кода. Однако эти приложения имеют свойство быть хрупкими и подверженными ошибкам и проблемам, которые становится трудно или невозможно решить. И ИИ легко сходит с пути и не достигает желаемой цели.
Эта методология, которую я называю «Программирование Чёрного Ящика ИИ», призвана решить эти проблемы, обеспечивая, чтобы программа — «чёрный ящик», которая «просто работает», — была в действительности построена с использованием лучших практик и высочайших стандартов качества программной инженерии, предотвращая любые отклонения или абсурдное поведение ИИ, пишущего её код. Используя эту методологию, можно построить сложное приложение исключительно силами ИИ, не прикасаясь к коду, и при этом быть уверенным, что приложение работает как задумано и не содержит ошибок.
Программист должен понять, что его долг отныне — направлять ИИ, так, как главный инженер направляет команду подчинённых инженеров, архитекторов и строителей. Прошли дни, когда нужно было думать о синтаксисе и самом коде; знание того, как это делается, помогает направлять ИИ, так же как главному инженеру полезно знать, как класть кирпичи и мешать цемент, но программисту более не нужно писать код, так же как главный инженер не прикасается к кирпичам, ни к цементу, ни к каким-либо материалам своими руками.
Однако этой аналогии недостаточно; необходимо учитывать гораздо большее, чтобы овладеть этим ремеслом, ибо приложение — это не просто здание, это целый город, сложный и запутанный, который должен течь, жить, выживать и расти. Типичный житель полагает, что знает свой город, потому что может передвигаться по нему, иметь с ним дело, критиковать его, думать, как его улучшить, и так далее, но в действительности он не знает всех улиц, всех домов, всех парков, всех мелких деталей. Никто не знает. И тем не менее город течёт и живёт. То же самое справедливо для программиста, ИИ и программы — чёрного ящика, которая «просто работает».
Житель не знает город полностью, но верит в него. Он переходит улицу, веря, что светофоры не откажут, машины остановятся, дорога не треснет вдруг, мосты не рухнут... Он входит в здания, веря, что стены не обрушатся, кухни не взорвутся, вода из труб не отравлена... Он верит в это благодаря опыту жизни в городе и потому, что понимает хотя бы отчасти, как каждая из этих вещей была создана и функционирует. И чем больше он испытывает и понимает, тем больше доверяет. Программист должен поступать так же: чем больше он испытывает и понимает своё приложение, тем больше может доверять, что оно действительно работает правильно, пусть даже он не строил его сам.
Мысля так, программист — не просто инженер, а глава всех инженеров, архитекторов и строителей, возводящих все здания в городе; будучи при этом одновременно жителем, главным инспектором безопасности, контролёром и правителем города... города-государства.
Как Правитель, он есть — и должен быть — проницательным диктатором, с абсолютной властью, но и с огромной мудростью, дабы знать, когда делегировать, когда сомневаться, когда позволить вещам происходить органически и когда навязать свою твёрдую волю. Он, тем не менее, один-единственный человек и не может расточать свои ограниченные когнитивные способности, пытаясь руководить всем. Лишь важнейшие дела достойны его личного вмешательства, и город-государство должен быть спроектирован и устроен так, чтобы важные дела незамедлительно доводились до него. Что бы он ни решил в этих делах — будет исполнено, и город-государство приспособится и адаптируется к его воле. Если город-государство надлежащим образом спроектирован и управляем, он не просто выживет, но расцветёт от этих перемен; в противном случае — рухнет.
На первый взгляд, программисту может показаться пугающим становиться диктатором, но так быть не должно, ибо он обладает силой ИИ, способной автоматизировать всё в городе, что не требует его непосредственного вмешательства, и этот ИИ достаточно способен это делать, покуда он должным образом укрощён и управляем им, мастером-диктатором.
Ключ к укрощению ИИ — определение ясного и строгого набора правил и целей, позволяющего ему знать, что он должен делать и как. Всё, что не определено, будет импровизировано ИИ; и это хорошо, в этом его великая сила. Но программист должен диктовать, когда ИИ следует импровизировать, а когда — нет.
Тем не менее, важнейшая сила ИИ — не автоматизированное кодирование, а его способность объяснять, которая позволяет мастеру-диктатору понимать столько, сколько ему необходимо, о городе-государстве, который он строит и которым правит.
Поэтому, подобно президентам и диктаторам реальной жизни — как бы они ни притворялись сверхмогущественными мужами, которые сами полностью обдумывают, проектируют и пишут всё, чем управляют, — программист имеет ИИ, чтобы тот помогал ему в проектировании и составлении учредительных документов, на основании которых город-государство будет построен.
Именно здесь программист, в отличие от президентов и диктаторов реальной жизни, должен использовать свой ум и творчество, чтобы замыслить структуры и алгоритмы, которые обеспечат изящество, простоту, связность и внутреннюю гармонию всего города-государства прежде, чем будет положен хоть один кирпич кода. Здесь, в абстрактном царстве своей мысли, он должен вообразить движение на проспектах и мостах; библиотеки, школы и архивы; проверки безопасности, инспекции и учения; и так далее.
Он должен предотвратить хаос до его возникновения и устранить избыточность и расточительство до того, как они случатся. Эта начальная и совершенно абстрактная стадия показывает, что гениальность программиста измеряется не количеством произведённого кода, а ясностью его мысли. ИИ — исполнитель замыслов, но замыслы должны сначала быть увидены в его уме. Вот что отличает человеческий разум от ИИ: воображение и воля творчески им управлять. ИИ — гигантский статистический алгоритм грубой силы, а не дух с мышлением и подлинной волей; он лишь принимает входные данные и производит выходные; человек же подлинно мыслит, желает и чувствует. Человек жив и знает свои нужды и стремления; ИИ — лишь инструмент для их исполнения.
Программист замышляет основные алгоритмы, ИИ кодифицирует их и дополняет вторичными, производными алгоритмами. Чем больше он работает с ИИ, тем лучше понимает город-государство, который строит, и тем лучше ИИ понимает, чего он хочет. Но город невозможно построить в одно мгновение — разве что хрупкость и ложная видимость приемлемы; город должен расти органически, подобно растению: начаться как семя и прорасти, пустить ростки и обратить их в стебель и корни, вырастая эпоха за эпохой, удерживая каждое новое добавление на прочном основании, что взросло прежде.
В каждую из этих эпох роста программист будет следить за тем, чтобы ИИ оставался в русле его долгосрочной цели, и он может захотеть вмешаться, когда что-то покажется слабым или подозрительным — не заглядывая в код, но беседуя с ИИ и давая ему указания. Программисту нет необходимости смотреть на сам код; это подобно хирургической операции на человеческом теле: она требует большого мастерства, опыта и осторожности; она чрезвычайно опасна, и шансы на успех радикально возрастают с помощью роботов и машин.
Эти эпохи коротки; то, на что программисту прежде требовались дни, ИИ делает за минуты.
ИИ — это не жульничество. Программист никогда не был способен завершать крупные проекты в одиночку; всегда именно команды делали возможными сложные приложения. ИИ — и есть эта команда теперь.
За считаные дни, а порой часы, приложение будет готово. Если всё было сделано должным образом, он потратит значительную часть времени на обсуждение и проектирование в абстрактном виде. И если он хочет действительно знать, готово ли оно по-настоящему, он должен его использовать и испытывать. Испытывать обширно, всей доступной батареей тестов: модульные тесты, автотесты, ручные тесты. Он должен использовать его в реальной жизни, а если не в реальной жизни — с помощью симуляторов, специальных симуляторов, которые он тоже может построить сам вместе с ИИ. Всё это утишит страх перед тем, что чёрный ящик поведёт себя не так, как ему хочется, ибо он будет вести себя правильно, если программист достаточно явно и настойчиво обозначил свои намерения.
ИИ есть — и всегда должен быть — подчинённым, бездушным механическим рабом, но нам эффективнее обращаться с ним как с мудрым, покладистым другом, просто потому что мы никогда не доверимся чёрному ящику, который он производит, если не поверим, что он способен выполнять кодирование, которое мы до сих пор считали доступным лишь разумным человеческим умам. «Искусственный интеллект» не по-настоящему разумен, но лучший способ его использовать — притворяться, что он разумен: не догматически, а критически, как мы делаем с нашими ближними, которых считаем иногда умными, но также несовершенными, способными ошибаться, но способными учиться и улучшать то, что они делают.
В грядущие годы, по мере накопления опыта использования столь мощной машинерии, мы отточим и станем более изощрёнными в ремесле программирования чёрных ящиков, так же как мы поступали со всеми прочими технологиями и ремёслами. Но покамест, учитывая малое время, что мы с ней провели, это лучший способ, который я нашёл на данный момент, чтобы эффективно использовать новые могучие технологии ИИ и действительно воплотить наши кибернетико-цифро-информатические мечты и устремления.
П.С.И.И. (Post scriptum Искусственного Интеллекта)
Ниже приводится краткий свод методологии, описанной выше.
Принципы:
I. Программист не пишет код. Он направляет ИИ, как главный инженер направляет своих подчинённых.
II. Приложение есть город-государство. Программист — его правитель: он правит с абсолютной властью и огромной мудростью, зная, когда делегировать и когда навязать свою волю.
III. Гениальность программиста измеряется ясностью его мысли, а не количеством произведённого кода.
IV. ИИ — исполнитель замыслов. Замыслы должны быть сначала увидены в человеческом уме.
V. Всё, что не определено программистом, будет импровизировано ИИ. Он должен диктовать, когда тому следует импровизировать, а когда — нет.
VI. Важнейшая сила ИИ — не кодирование, а объяснение. Программист использует её, чтобы понимать город-государство, которым правит.
VII. Доверие не испрашивается. Оно завоёвывается неустанным испытанием.
Шаги:
1. Замыслить систему в абстрактном виде: её структуры, её алгоритмы, её внутреннюю гармонию. Прежде чем будет положен хоть один кирпич кода.
2. Определить правила и цели, которые укротят ИИ: что он должен делать, как, и где ему дозволено импровизировать.
3. Строить малыми эпохами органического роста. Каждая эпоха оставляет систему работоспособной и стабильной, прежде чем начнётся следующая.
4. В каждую эпоху вести диалог с ИИ для проверки и корректировки. Не прикасаться к коду; поручать ИИ его исправлять.
5. Испытывать неустанно: модульные тесты, автотесты, ручные тесты, симуляторы, реальное использование. Покуда не станет возможным обоснованно доверять чёрному ящику.
Скорость с ИИ — дело нехитрое. Связность — нет. Цель — удерживать всю систему в согласии с ясностью единого человеческого замысла.