rufuture1Navigate back to the homepage

Как изменится программирование, часть первая

Anton Shatunov
9 сентября, 2020 · займёт 5 минут

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


Поколение «зубров»

Когда мой путь программиста только начинался, предыдущее поколение наставников владело практически всеми аспектами низкоуровневой магии. Собрать приложение на языке C в консоли из исходников и запустить его? Да без проблем! Поставить руками недостающие пакеты на операционку и заставить её ожить? Дайте две! Это было поколение тех самых зубров, заставших ещё перфокарты и перфоленты, писавших на чистейшем си и ругающих коллег за go to и «макаронный код».

Где-то в то же время индустрия начала становиться более зрелой, почуяв «будущее в интернете», в нее пришёл большой бизнес.

Что хотят видеть в своей технологической платформе большие и очень большие компании, банки и телекоммуникационные компании, крупные сетевые магазины? Они хотят нечто разрабатываемое быстро и также быстро внедряемое — чему можно быстро научить любого студента. Причём так, чтобы студент после обучения выдавал готовый к реальной нагрузке код, который даже в самых кривых руках не мог бы что-то сломать, привести к утечке данных или создать другие проблемы. Такие компании хотят, чтобы раз сделанное можно было запустить всегда и везде — они обладают огромным зоопарком техники и не могут себе позволить разрабатывать индивидуальную систему для каждого устройства.

Всё это подтолкнуло языки для промышленной разработки в определённое русло развития. Например, Java создавали как язык для стиральных машин и другой техники. Так совпало, что язык при создании получил весь набор качеств, которые хотел большой бизнес — что в итоге и привело к его бурному развитию и превращению в «язык по умолчанию» в крупной промышленной разработке и в мире большого бизнеса.

Переход на Java и на другие «новые» языки того времени означал: что для ачивки «крутой разработчик» надо было знать пусть всё же и достаточно низкоуровневые, но гораздо более абстрактные по сравнению с ассемблерным кодом вещи. К примеру, как корректно открыть соединение в базу данных, прочитать или обновить там запись и закрыть за собой соединение так, чтобы ничего не сломалось.Это может звучать неимоверно сложно, но с ростом абстракции кода это стало выражаться в корректном использовании определённой библиотеки — буквально несколько строчек кода. Нужно было только знать тонкости: как именно что работает и в какой последовательности вызывать методы.

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

Суть проблемы

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

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

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

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

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

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

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

Языки безусловно будут продолжать развиваться и забирать на себя всё больше рутины, но сложно поверить, что даже возможность программировать целиком на естественном языке позволит решить проблему постановки и формализации задачи.

Электронный подмастерье

Много надежд связано с искусственным интеллектом. Согласен, тема это интересная, и уже сейчас она имеет некоторое применение в реальности. И тут остро стоит проблема с формализацией и постановкой задачи. К ней добавляется ещё и общая проблема ИИ.

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

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

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

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

Вместо итога

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

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

В разработке закончится эпоха «Дикого Запада», и она наконец станет полноценной инженерной дисциплиной.

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

Автор: Антон Шатунов

При поддержке Антона Шатунова

и ещё 60 постоянных читателей

Также можно почитать вот это

Догнать и перегнать

Оригинальные способы, с помощью которых Россия, или любая другая страна, может выйти на конкурентный уровень в гонке искусственного интеллекта

2 сентября, 2020 · займёт 3 минуты

Россия в новой космической гонке

Какое место занимает Россия в борьбе за лидерство в развитии искусственного интеллекта и какие у нас перспективы

11 августа, 2020 · займёт 1 минуту
© 2020 Русский Футурист
Link to $https://www.youtube.com/channel/UCG5xBdtlUQzZeRh4EXEvk9ALink to $https://www.patreon.com/redzion