Программирование, искусственный интеллект и тезис Тьюринга-Чёрча
Поучаствовал недавно в дискуссии на хабре по поводу инженерности в программировании и будущего самого программирования. Конечно предсказывать будущее дело неблагодарное, тем не менее, что касается ценности программирования есть чёткие доводы, что в будущем это будет стольже актуально как и сейчас. Так же как и латинский алфавит подходит для письма не хуже чем 2к+ лет назад.
##Программирование само по себе имеет ценность
Начну с того, что называть программистов инженерами это либо троллинг, либо натуральное заблуждение вроде приравнивания индейцев к индийцам. (Да, Колумб считал что открыл Индию, а краснокожие люди это индийцы, но это очевидно не соответствует реальности.)
Итак, Ларри Уолл по образованию лингвист, занимался исследованиями Библии и заодно придумал язык Perl. Джон Маккарти — математик и исследовал проблемы искусственного интеллекта, в итоге придумал LISP. Алан Кей занимался молекулярной биологией и подрабатывал джаз-музыкантом, но потом придумал SmallTalk и ООП. Ричард Столлман начинал тоже с биологии, потом получил бакалавра по физике, проучился год в MIT и забросил образование, перключившись на работу исключительно программистом. В итоге мир обрёл GNU. В конце–концов, Ада Байрон не была инженером, и вряд ли она представляла до конца как работает машина которая существовала только на бумаге и в голове Бэббиджа.
Всё что объединяет этих людей это любовь к программированию, так что программирование это самодостаточная дисциплина. И то, что сейчас программистам приходится идти учиться на инженерные специальности это огромная ошибка. Но надо не забывать, что не только программисты столкнулись с такой проблемой. В начале XX-го века и профессия химика считалась чем-то связанным с мошенничеством, а химические факультеты на территории России начали открываться только в 30-е годы.
Так и с программистами. Да, программист может быть инженером или его работа может требовать быть инженером. Но он может и не быть инженером. Более того программист который занимается исключительно программированием более ценен как специалист, точно так же как математик-тополог для топологии ценнее чем просто математик. Поэтому, можно быть программистом одного языка и вообще забить на низкоуровневое программирование, и всё равно это будет программированием. Например, многие библиотеки для javascript написаны на самом javascript и решают проблемы javascript с помощью абстракций javascript, но имеют при этом сотни тысяч скачиваний.
Программирование само по себе ставит очень серьёзные задачи — чистота кода, управление поведением сущностей, развитие абстракций, проблемы семантики и синтаксиса. И это совершенно не инженерные проблемы. Мало кто готов оплачивать создание новых языков программирования, но новые языки имеют огромную ценность для всей отрасли в целом. Каждый язык это шаг в будущее, как новая планета для астрономов или новая частица для физиков-ядерщиков.
##Программирование искусственного интеллекта будет таким же программированием
Я встречал много рассуждений на тему того, что создание искусственного интеллекта сделают профессию программист ненужной. Я в этом отношении придерживаюсь совершенно противположной точки зрения. Если какие-то профессии и станут ненужными, то к профессии программист это будет иметь отношение в самую последнюю очередь. Т.к. всё современное программирование строится на тезисе Тьюринга-Чёрча о том что любая вычислимая функция может быть рассчитана с помощью некоторого физического процесса.
Если тезис верен, то никакие искусственные интеллекты качественно ничего не изменят. Т.к. всякая задача в итоге будет сводиться к написанию программы, вне зависимости от предметной области. В 50-е программисты оперировали регистрами, в 60-е массивами, потом стали создавать структуры данных, теперь передают объекты и замыкания. Но принцип записи программ совершенно не изменился.
Другое дело, если будут открыты какие-то физические процессы, которые будут производить нетьюринговые вычисления, тогда да. Возможно потребуются какие-то другие сущности. Но скорее всего это будет уже за гранью современной цивилизации.
Другими словами, пока человечество будет писать алгоритмы для машин Тьюринга, человечество будет использовать и языки программирования. Могут изменятся грамматики, синтаксис, семантика. Но это всё равно будут языки, и они всегда будут представимы в виде текста. (Хотя по факту это могут быть какие-то блоки или схемы)
Поэтому программирование останется в любом случае, вне зависимости от того что ждёт нас в будущем.