Настоящие программисты

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

  • Знают ли разработчики историю профессии.
  • Умеют ли (хотят ли) от цитаты дойти до статьи.
  • Понимают ли контекст разработки разных периодов (статья 1972 года).
  • Понимают ли смысл, цели и причины цитаты / статьи такого рода.

Любопытство удовлетворил. Заодно подобрал типовую цепочку реакции, скажем так, ответ на которую попытаюсь дать в рамках темы. Итак (не досимвольно, исправил пару опечаток):

— Думаю, это самая цитируемая отечественная цитата о программистах за всю историю.
— Цитируется, потому что программистам нравится думать, что они особенные?
— Кто придумал это деление на программистов и просто кодеров? Это просто название профессии. Если в трудовой написано программист, значит, программист. Зачем придумывать словам новые значения?
— Кто такой настоящий программист? Повара, сантехники и проектировщики тоже делятся на настоящих и ненастоящих?

Подчеркну: это нормальная обычная современная реакция. Так получилось. Именно эти слова выбрал уже и потому, что в ленте удобно рядком, мог бы и другие такие же, смысл не меняется.

Начну с Ершова Андрея Петровича. О нём много статей и воспоминаний, потому кратко: один из первых программистов СССР, теоретик и практик, поднял Новосибирскую научную и практическую школу программирования, автор, глава, лауреат, инициатор, изобретатель и т.д. Во многом благодаря ему в школах появилась информатика. Плотно дружил с западными эквивалентами, был на диво выездной (хоть каждую поездку одобряли чуть ли не в ЦК). В общем, один из тех титанов, что это ваше программирование придумывал, когда программирования не было. Человек, с которым можно не соглашаться, но если он чего говорит о программировании, а вам на десятое прочтение в десятый раз кажется, что сказана чушь, читайте ещё и ещё, пока не снизойдёт просветление.
Продолжу эпохой. В 1960..1970 гг. программистов в СССР было мало, достаточно вспомнить справку 1970 года: «В СССР сейчас имеется порядка 3,5 тыс. ЭВМ и около 3 тыс. системных программистов». Это как если бы в современной России оставить только программистов Яндекса, остальных отправить на картошку. Почти все они были с хорошим высшим физмат-образованием, очень многие занимались тем, что сейчас можно с большой натяжкой классифицировать как системное программирование с одним важным уточнением. Если современный системный программист пользуется ассемблером и C, его коллега из прошлого создавал ассемблеры и C. Причина простая: многие модели ЭВМ поставлялись as is — вот железка, вот какой-нибудь базовый набор софта, дальше сами. К другу за чемоданом перфокарт не пойдёшь, т.к. у друга другая модель. А у другого друга третья. И документации мало.
В итоге с качеством, количеством и занятостью программистов тогда сложилась занятная ситуация: они часто и массово решали задачи «напередописать ОС», «напередописать язык» (транслятор, компилятор, интерпретатор) и т.п. По пути приобретали квалификацию, которая позволяла реализовывать собственные идеи (потому к 1980-м в СССР было 10+ диалектов Фортрана, например). Попробуйте сами: купите Arduino без ничего. Пока запустите на ней первую внятную программу, кандидатскую напишете.
Чем больше становилось компьютеров, тем больше становилось людей, решающих с помощью компьютера не задачи программирования, но задачи своих областей. Химики, физики, экономисты, биологи — все они учились программировать до уровня, который был достаточен, если хотели выполнение своих задач ВЦ. Биолог, моделирующий биоценоз подмосковного леса, не нуждался в знании того, как работает ЭВМ, не хотел возиться с нюансами выполнения разных команд, он хотел на ручки и работающую программу.
Интересный документ такого разделения — История Альфа-группы: «Это была первая группа, которая служила посредником между разработчиками и программистами». Обратите внимание на то, как первое поколение программистов в 1960-х начинает пополняться новыми классами. Появляется класс из предыдущего абзаца. Затем появляется класс программистов, которые уже не «разработчики [системных программ]», но сами по себе являются посредниками уже между, скажем, биологами (не желающими программировать) и программированием.
С годами слоёв «посредников» всё больше и больше. Вектор роста годовых колец — от разработчиков к «биологам». Каждое следующее кольцо по отношению к предыдущему поставляет пользователей. Очевидно, этот вектор на каждом слое избавляет разработчика от «лишних» знаний области программирования (информатики, кибернетики, etc). Всего спустя 45 лет между массовым разработчиком и знаниями с умениями, которые потребовались для того, чтобы этот разработчик мог программировать, находится огромная пропасть.

В 1972 году такое развитие было ясно Ершову. Во всяком случае, я в этом уверен. Конец 60-х — раскрутка маховика тотальной ЭВМизации вместе с переходом железа на IBM System/360 (модели Ряда 1 вышли в производство уже с 1971 года). Массово поднималось обучение информатике в вузах, сам Ершов бульдозером двигал информатику в школы (и додвигал до 1985 года — тогда на высшем уровне приняли решение), требовалось всё больше инструментов (ОС, языков, программных пакетов) для тех, у кого нет возможности получить специальное образование с углублением. Отсюда в статье упоминание «конвейера», «работы ради работы» и «работы ради денег», наконец, финальным аккордом «Сделав искусство программирования общим достоянием, мы лишимся своей элитарной исключительности перед лицом повзрослевшего человечества» (NB: не поймёте message этой фразы, не прочитав всю статью).
Потому, думается, Ершов описывал идеального программиста, того инженера и учёного, которого хотел сохранить под грядущим валом массового программирования и неизбежной «конвейеризации». Началось размытие профессии, размытие понятия «программист» с размытием всего того, что делало программирование элитарным занятием. В 1950..1960 гг. определять эталон не требовалось. Почти любой программист самим занятием принуждался быть эталоном — умным, талантливым, образованным, изобретательным и энергичным. А потом всё, началось.
В книге [Нариньяни А.С. Перспективы развития вычислительной техники и интеллектуализация ЭВМ. Новосибирск, 1984] граница проведена уже чётче:

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

Прикладной программист — специалист по разработке проблемно-ориентированных систем; как правило, владеет средствами, специализированными для соответствующей области применения.

Обратите внимание на разницу: прикладной программист уже не обладает «профессиональной подготовкой» и не владеет средствами «разного уровня».

Прошло 30 лет. Современный прикладной программист представляет собою на историческом фоне любопытное создание. Профессиональная подготовка либо отсутствует, либо сугубо прикладная (учим языки, а не теории языков). Проблемная область от него зачастую настолько закрыта удобными абстракциями, что не вникает и на мизинчик (всё равно, что в базу сохранять, яблоки или запчасти Роскосмоса). Изобретательство… ну, как бы ловчее один готовый кирпич к другому пристроить, да чтобы вся стена трещинами не покрылась. Самоограничение (о да, я снова сегодня спорил на тему «знаний вне текущих задач») приводит к тому, о чём Ершов косвенно упомянул:

Конвейерный метод в программировании может либо убить интеллектуальную компоненту в труде программиста, либо вызвать неврозы из-за противоречия меду монотонностью и трудоспособностью работы. Представьте себе человека, обязанного 8 часов в день, 5 дней в неделю, 500 недель в году, решать одни кроссворды, и вы поймете, что такое программист, специализирующийся, например на написании редактирующих программ.

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


И вот тут каждый сам решает, кто он. Программист? Настоящий программист? Кодер? Не программист вовсе, но пользователь? Программист, который специализируется на написании DAO на языке XYZ определённых версий в определённых проблемных областях? В какой мере красивые слова Ершова применимы к вам? Всё это не так уж важно. Разве что для горячих дискуссий годится. Всё, мне кажется, за десятилетия уже на наших глазах выйдет на другой уровень того, с чего началось. Программировать станет настолько легко и просто, что это станет общим знанием. Собери из миллиона готовых кубиков типовое решение своей типовой задачи. Продавщица Люся в киоске в ожидании вечерних бухариков будет лениво таскать по экрану компоненты с очередными эмодзи, позитивно изображающими циклы и ветвления.
Но на горизонте в горах в высоких хрустальных башнях будут сидеть новые «системные программисты» 1950-х, только уже 2050-х.

Факультативное чтение для любознательных:

Настоящие программисты: 2 комментария

    • Начинается «Программирование становится массовой профессией», заканчивается «В работе эта трудность может быть».

Добавить комментарий