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

Что такое автоматизация

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

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

Это понимание представляет собой небольшую проблему для программного обеспечения. У нас есть целевой продукт, точка Б. Это приложение, которое выполняется на устройстве (настольном компьютере, мобильном телефоне, устройстве и т. д.). Но что такое точка А?

У нас уже есть исходный код. Компилятор берет это и создает что-то, что машина может понять. Возможно, это не промышленный робот, но это определенно машина, которая трансформируется из А в Б. По мере того, как наши языки становятся все более абстрактными и выразительными, роль этой машины становится все более важной. Добавьте несколько сценариев сборки, автоматические тесты, развертывание нажатием кнопки, и мы получим огромный объем работы, которую не выполняет человек.

Я не боюсь компилятора. Действительно, я бы хотел, чтобы он стал более интеллектуальным. Я мечтаю о будущем, в котором я буду получать разумные сообщения об ошибках.

Но нет…

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

Представьте себе человека, сидящего перед своим компьютером и желающего, чтобы он что-то для него сделал. Мы позволим этому человеку говорить с компьютером, так как распознавание голоса — это реальность, пусть и не совершенная. Что они говорят компьютеру?

Что, если мы потребуем, чтобы они произносили структурированные команды, такие как «загрузить этот файл», «изменить этот текст на этот» или «сохранить файл в каталоге А»? Это просто язык программирования высокого уровня. Это может быть действительно хороший продукт, но это не что-то принципиально новое. Это просто другой компилятор. Хоть и несколько крутой.

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

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

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

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

Но да…

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

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

Оптимизаторы также станут лучше. Вместо того, чтобы работать на низком уровне, где они уже делают потрясающую работу, они могут смотреть код выше. Было бы очень интересно, если бы мои инструменты предложили переписать функцию, поскольку она идентифицирует ее как алгоритм XYZ и имеет хорошее решение.

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

Есть так много потенциала, и я буду приветствовать все это.

Большой потенциал, никаких потерь

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

Чтобы полностью исключить программистов из уравнения, потребуется по существу искусственный интеллект человеческого уровня. И если я начну видеть рядом с собой разумных роботов, моей первой мыслью точно не будет: «О нет, это отнимет у меня работу!»

Первоначально опубликовано на mortoray.com 22 марта 2017 г.