Что такое код и почему компьютеры все еще не пишут сами?

Программисты набрались терпения и ответили на самые часто задаваемые вопросы. Читаем!
6 минут22972

Что говорят программисты, когда их просят дать определение своей деятельности и намекают, что “машины справились бы быстрее”? Мы собрали ответы пользователей Quora, и вот что у нас получилось.

Вопрос:

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

Ответы:

- Не поверите, ваш вопрос изучен до тошноты, и продолжает изучаться.
Давайте рассмотрим ситуацию так: на самом деле, много механической работы, которую должен выполнять программист, уже делает компьютер (хотя некоторые все еще используют C++, вместо того, чтобы написать скрипт в одну строчку). То есть (в идеале), мы не делаем то, что повторяется много раз — машины делают это за нас.

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

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

- Я бы хотел рассмотреть вопрос немного с другой стороны. Программирование решает 5 задач:

  1. Создание новой программы или функции
  2. Расширение функциональных возможностей уже существующих программ
  3. Исправление того, что не работает
  4. Реализация известного (существующего) шаблона проектирования в простой ситуации
  5. Реализация известного паттерна в вызывающе сложной задаче.

А теперь способности, которыми должен обладать исполнитель (компьютер):

  • Понимать задачу
  • Видеть пути реализации (знать возможности)
  • Быть в состоянии определить, какое решение будет оптимальным для конкретной задачи
  • Иметь возможность осуществить решение

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

Это достаточно сложный функционал, который, возможно, будет реализован, но это сомнительно.

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

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

Не поверите, машины УЖЕ программируют за нас. LINQ — достойный пример из относительно современных: наш код становится все ближе и ближе к словесным формулировкам, так что ваш вопрос отчасти уже решен.

Тем не менее, обрабатывать абстрактные запросы и понятия они пока не умеют, как и самостоятельно приобретать новые знания, и вряд ли мы это увидим в нашей жизни.

- Отвечу вопросом на вопрос: а зачем для этого нужны люди?
Ответ в одном слове: творчество. Люди могут смотреть на одну вещь настолько по-разному! И, казалось бы, все решения логичны, но все они уникальны. Люди великолепны тем, что могут выполнить задание, данное в виде смутного описания. То есть, они могут понять ее — это уже неплохо, — и, более того, найти рабочее решение и воплотить его в жизнь.

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

Человек обязательно что-нибудь придумает.

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

- Почему писатели все еще существуют? Неужели нельзя создать супермашину, которая будет писать книги лучше (см. Лем 'Электрибальд Трурля')?
Просто компьютеры — это инструменты, как молоток или печатная машинка. Почему писатели все еще существуют? Потому что машина набирает текст, а писатель создает историю.

Компьютер, который использует программист — это такой же инструмент, работающий с числовыми данными. Если его разобрать, оттуда не вылетит магический шар, излучающий логику.

- Да-да, это же тот самый вопрос, который частенько задают CEO, продакт-менеджеры и менеджеры по продажам: "Почему я не могу просто дать команду компьютеру вместо того чтобы иметь дело с вечно недовольными программистами?". Программист должен понять смутную и непонятную  "большую идею" управленца (даже если два человека хотят диаметрально противоположных вещей) и "объяснить" ее компьютеру в виде кода. А вот если все начнут мыслить как программисты, мы сможем продолжить обдумывать эту идею.

- Я хочу посмотреть, как он будет сам себя тестировать! Куда подать заявку?

- Если вы создадите программу, которая сможет генерировать другой софт на основании четких вербальных требований, вы обнаружите, что 99,99% людей не могут четко и недвусмысленно эти требования ставить. Весомая часть работы программиста — выслушивать и пытаться понять.

- Зачем нам нужны водители, разве автомобиль не справится с управлением лучше?

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

Мы не замечаем постепенное упрощение жизни сейчас, как и не будем замечать его позже. То же касается и программирования.

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

Вопрос:

Что вообще такое код и программирование?

Ответы:

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

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

И да, есть вторая сторона — дружба с браузером и умение составлять запросы поисковикам :)

Все это работает вместе примерно как симфония. Символьная. Это и есть кодинг.

- Программирование — это удивительная область знаний, в которой поиск ошибки — еще большее таинство, чем написание кода: почему я могу подключиться к трем другим SFTP-серверам, но только не к этому? Почему, черт возьми, копировать-вставить не работает в этом WebView?! Или у вас веселый марафон с загрузкой приложения в AppStore?

И, фактически, все, что вы делаете, сводится к поиску и устранению  багов (и попутному созданию новых). Иногда я ловлю себя на мысли: "А может, я просто пишу ошибки?"

- Это сложная, но интересная логическая игра против начальства :) Вы просто собираетесь вместе с командой, чтобы решить проблему. Ищете решения, и находите наиболее оптимальный путь из возможных (иногда оказывается, что был и более оптимальный, но это другая история). Затем вам нужно идти, придерживаясь выбранного пути с тем условием, что начальник, вступивший в игру, будет подкидывать новые "ловушки" — например, в виде правок к ТЗ.

А еще у этой игры нет финала.

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

Чтобы цепи были как можно короче, надо постоянно учиться и подглядывать к старшим по должности ;)

- Это как делать любую другую вещь. Попробуйте!

Тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».

развитиеобучениеit
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!