Вождение по своей сути является роботизированной операцией. Кодирование — это изначально человеческая операция. Я не верю, что что-то из этого изменится.

Кодирование

Во множестве недавних статей, в том числе в одной особенно яркой статье на обложке журнала, утверждалось, что особое сочетание машинного обучения, нейронных сетей, квантовых вычислений и бороды на шее постепенно делает повседневного программиста устаревшим. Скоро, — говорят они, стоя на риторических углах улиц с большими белыми вывесками, — мы не будем программировать компьютеры. Мы будем дрессировать их, как собак. Звучит здорово (если вам нужен компьютер, который активно нарушает социальные нормы, какает, не умеет считать и болеет раз в месяц). Но это полное непонимание того, что такое машинное обучение и чем оно занимается. Кроме того, это вопиющая переоценка интеллекта современных компьютеров.

Как моя копия Code Complete, 2nd Ed. любит напоминать мне, что разработка программного приложения — это управление сложностью. Другими словами, прежде чем написать хоть одну строчку кода, вам нужно разложить сложность проблемы, которую вы пытаетесь решить, и определить, как представить ее компьютеру, чтобы не сломать его хрупкий разум. Или твое.

Например, предположим, что вы пишете программу, которая сообщает Бобу, который сейчас час. Легкий. Если время 17:29, любой 12-летний ребенок-сценарист может написать программу, которая отображает «17:29» в окне. Так что есть только одна заминка: Боб живет в другом штате. Вы сообщаете ему время в MST (ваш часовой пояс), CST (его часовой пояс) или UCT (часовой пояс компьютера по умолчанию)? Как только вы решите, преобразование между часовыми поясами является достаточно распространенным процессом, и все, что вам нужно, — это библиотека с открытым исходным кодом, созданная для этой задачи. О, за исключением того, что вы забыли о переходе на летнее время. Когда снова начнется? Лучше убедитесь, что он не в Аризоне, прежде чем применять этот дополнительный час.

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

Еще одно предостережение: Боб говорит только по-китайски. Латинская аббревиатура «P.M.» не имеет для него значения. Так что надо локализовать. Вы вводите еще немного внешнего кода, делаете отображение немного более динамичным, и теперь в окне написано «下午». Или что-то вроде того.

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

К настоящему времени у вас есть автономный модуль «часовых поясов», модуль «локализации» и модуль «отображение», все с тщательно изолированной логикой, чтобы вы могли содержать всю эту сложность. Все это для того, чтобы вы могли побаловать Боба.

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

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

Мы поглощаем данные главным образом глазами и ушами, а не через высокоскоростной порт USB или HDMI. Это медленная и наглая форма поглощения с потерями, особенно если учесть, что наша память не гарантирует сохранение всего.

Сложность является результатом человеческих проблем. И люди — единственные, кто способен их решить. У компьютеров нет надежды.

Вождение

Вождение имеет пять правил:

  1. Идите к месту назначения.
  2. Не сталкивайтесь с другими автомобилями, людьми или предметами.
  3. Ведите себя предсказуемо.
  4. Соблюдайте правила дорожного движения.
  5. Приходить своевременно.

По сути, вождение — это повторяемый алгоритм. Это похоже на проблему, для решения которой вы бы написали программу, чтобы вам не приходилось делать одно и то же (следовать тем же правилам, использовать тот же набор ограниченных входных данных, следить за теми же символами, избегать одни и те же условия отказа) снова и снова, тысячи раз.

Мы построили нашу дорожную систему так, как будто беспилотные автомобили были неизбежны. Повсюду нарисованы линии, резко контрастирующие с цветом асфальта. Есть роботы (светофоры), которые говорят нам, когда остановиться и поехать. Дорогам общего пользования присуща последовательная универсальная символика: двойная белая линия не должна пересекаться, а красный восьмиугольник означает «остановись и уступи дорогу», куда бы вы ни шли. Каким-то образом, несмотря на наш опыт создания огромных сложностей на каждом шагу, человеческая раса сумела создать одну вещь, которая почти одинакова каждый раз, когда вы это делаете.

Опять же, вождение — это алгоритм. Он не требует никакого творчества. Он следует конечному набору инструкций.

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

Так что можно с уверенностью предсказать, что беспилотные автомобили будут доминировать на рынке в течение 15 лет. Они сделают абсурдно хорошую работу по транспортировке и защите нас.

И они будут кодироваться людьми с использованием методов машинного обучения, клавиатуры и множества утверждений типа «если-то».