От перфокарт до ИИ: программирование 55 лет назад vs сегодня

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

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Эта статья состоит из трех частей. Первая и вторая написаны по воспоминаниям программистов из Швеции и СССР: Марианны Эрнерфельд и Владимира Николаевича Орлова. И третья — из опыта работы с нейросетями.

Первые коды для дейтинга и железной дороги

Интервью с Марианной Эрнерфельд было опубликовано в июле 2019 в блоге ее сына. Оно более полное, особенно версия на шведском языке.

Марианна Эрнерфельд за работой
Марианна Эрнерфельд за работой

Девушка решила стать программистом в 1965 году. Тогда не было ни одного университета, обучающего программированию, но существовал годовой курс в Сольне (коммунна в Швеции), и на него могли выдать студенческий займ.

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

На каждое место было по 14 кандидатов, а компания не хотела нанимать соискателей женского пола, но у Марианны (и нескольких других женщин) получилось успешно пройти все тесты.

Во время обучения студенты обучались всему: от поездов и путей и до того, как работали электрические и телефонные линии. В 1969 году SJ начинает программу внутреннего обучения программированию, и Марианна попадает в нее.

Компьютерный отдел SJ состоял примерно из 40 программистов и системных инженеров. Больше никаким другим образом научиться программированию в Швеции было нельзя — совершенно новая профессия. Некоторые из программистов раньше были машинистами локомотивов, и у большинства даже не было аттестатов о полном среднем образовании.

Перфокарты
Перфокарты

Обучение началось с объяснения, что такое компьютеры. Затем они прошли курсы в IBM, у которой в огромном здании в Стокгольме находилась «машина для обучения».

Одновременно на одном курсе было примерно 50-100 человек, но нас разделили, так что в каждом кабинете присутствовало по 8 студентов. Там мы смотрели на телеэкраны в передней части класса. Преподаватель и его доска транслировались на экраны из другого кабинета. У каждого преподавателя было примерно по 10 кабинетов со студентами, и каждый кабинет мог задавать вопросы при помощи микрофона, обращая на себя внимание нажатием кнопки. Это было сверхсовременно!

Сначала студенты узнали об IBM OS, а затем изучили собственный язык программирования IBM под названием PL/I. Это была более современная версия Кобола, обладавшая возможностями, которых у Кобола пока не было (но они появятся позже), например, создание таблиц и запросов.

«Моё руководство по IBM System/370, 1976 год. В таблице справа я написала ÅÄÖ (5B, 7B и 7C в шестнадцатеричном виде), потому что шведские буквы не входили в EBCDIC».
«Моё руководство по IBM System/370, 1976 год. В таблице справа я написала ÅÄÖ (5B, 7B и 7C в шестнадцатеричном виде), потому что шведские буквы не входили в EBCDIC».

После первого курса IBM Марианна вернулась в SJ для выполнения своих первых практических программ. Она и трое обучающихся создали программу для дейтинга — оператор вводит данные мужчин и женщин, их черты, а затем генерирует пары между ними при помощи изобретённого алгоритма. Позже программистка прошла ещё несколько курсов, например, изучала ассемблер (язык программирования).

Как же тогда кодили? Сначала рисовали блок-схемы, а затем писали карандашом код. Его передавали в отдел перфорирования, где код вбивали в перфокарты. Перфокарты состояли из 80 столбцов (72 под программу и 8 для последовательности), поэтому строка кода не могла содержать больше 72 символов.

Программисты должны были писать код чётко, чтобы работавшие на перфораторе женщины могли его читать. Спустя несколько лет работы в SJ им выделили человека для чтения кода. В остальном они по большей мере перфорировали карты данных: отчёты об отработанных часах в SJ, пробег каждого железнодорожного вагона (чтобы их можно было отправлять на обслуживание). Перфоратор выглядел как обычная печатная машинка, пробивающая отверстия с картах. Кроме того, над каждым столбцом она печатала обычным текстом букву.

«А ещё мы носили на перфокартах пирожные, так что они были довольно удобны»

Когда Марианна только начинала работу, программы были маленькими, но позже каждая могла занимать несколько коробок длиной по метру. Одна строка кода превращалась в одну перфокарту. Отдел перфорирования возвращал готовую программу (тысячи карт). Кроме того, приходилось создавать «контрольные карты», в которых кодировалось: должны ли перфокарты компилироваться или исполняться, на каком языке они были написаны и т.д. Контрольные карты имели собственный цвет. Первая карта была рабочей картой с именем на ней, чтобы отдел знал, кому их возвращать.

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Еще карты возвращались вместе с «пижамной бумагой», содержащей списки кодов ошибок и номеров строк. У сотрудников был доступ к паре дыроколов, они могли вносить небольшие изменения самостоятельно.

Пижамная бумага с ошибками 
Пижамная бумага с ошибками 

Затем создавали тестовые файлы и смотрели, даёт ли программа ожидаемый результат. Если нет, то начинали «настольное тестирование» (с карандашом и бумагой), пытаясь разобраться, в чём ошибка. Для создания правильной программы требовалось много времени.

В машинном зале было примерно 10 операторов машин. Все они носили белые халаты, работали с ленточными накопителями, дисками и вставляли перфокарты. На входе висела табличка «Магазин закрыт», а программистам редко разрешалось посещать огромный машинный зал. Первые машины (IBM 1400) занимали 10-20 квадратных метров, а более новые были размером с холодильник.

Изначально у железнодорожной компании имелась IBM 360, а также более старые машины. Позже они получили IBM 370.

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Ближе к концу 70-х появились терминалы. Все работали в общем зале с терминалами. Когда нужно было внести изменения в программу, приходилось сражаться за терминальное время. В компании пользовались жёлто-коричневыми терминалами Alfaskop. До самого увольнения из SJ в 1979 году у Марианны не было персонального терминала.

Alfaskop
Alfaskop

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

Какие коды писали? Например, онлайн-бронирование SG, работавшее 24/7. Это было современно по тем временам, а система целиком была написана на ассемблере. Благодаря этому SJ выделялась — ни одна другая компания в Швеции к этому и близко не стояла. Программисты создавали коды, а после завершения и тестирования отдавали их другим отделам. Их поддержкой занимались другие, отдел Марианны только писал новые.

Изображение создал Upgraide.me
Изображение создал Upgraide.me

Джоконда и работа в Вентспилс

В блоге Владимира Николаевича Орлова есть порядка 7 частей (и несколько отступлений) его автобиографичного рассказа о советском программировании. Дальше наш пересказ одного отрывка.

В 1976 году Владимир служил в Латвийском военном городе Вентспилс-8. Он был в числе первых, кто прошёл полный курс обучения по специальности «военный инженер-программист». Подготовка специалистов по ЭВМ и программированию велась с 1956 года.

Учились тогда прикладному программированию. Из студентов готовили IT-специалистов широкого профиля со знанием теории построения операционных систем, систем программирования, информационно-поисковых систем.

Обучение программированию начиналось с посещения машинного зала ЭВМ М-220.

За пультом ЭВМ М-220 старший лейтенант.
За пультом ЭВМ М-220 старший лейтенант.

В те годы неотъемлемым атрибутом любого машинного зала (а для размещения ЭВМ М-220 требовалось не менее 100 квадратных метра) было присутствие в нем на стене портрета Джоконды (вспомните кинофильм «Служебный роман»):

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Тогда Владимиру и другим обучающимся показали, как рождается портрет. В устройство для чтения перфокарт поставили колоду перфокарт, набрали команду на пульте управления ЭВМ и на АЦПУ стал появляться портрет Джоконды.

«Я окончательно понял, что поступил правильно, выбрав специальность программиста, а ЭВМ М-220 на ближайшие 7 лет стала моей рабочей лошадкой»

Это не означает, что Орлов не работал на других ЭВМ : к концу обучения в академии он был «на ты» с М-220, Минск-32, ЭВМ «Весна», СПЭМ-80, а также имел навыки работы на ЕС ЭВМ. Но главной машиной до 1979 года в Советском Союзе оставалась ЭВМ М-220.

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Как тогда кодили? Программирование на М-220 серьёзно отличается от сегодняшнего программирования. Нужно обязательно знать машинные команды. Хотя бы те, которые позволяли загрузить программу с перфокарт, магнитных ленты и барабана в память машины и передать ей управление, чтобы она начала выполняться.

После Вентспилса я на всю жизнь запомнил команды ЭВМ М-220 для работы с внешними устройствами – 50 и 70. Все программы, которые я в итоге напишу в Вентспилсе, будут написаны в машинных кодах, никаких языков высокого уровня или даже автокода.

Одним из рабочих заданий была автоматизация кассы взаимопомощи.

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

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

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Неочевидное обучение программированию

Спустя 55 лет развития сферы программирования писать код можно даже не своими пальцами. Не работать на громоздких и медленных машинах, не запоминать команды. Можно и читерить: искусственный интеллект уже хорошо справляется со многими задачами. Вот модель GPT 4 — стандарт по умолчанию для создания контента, анализа, машинного перевода и, конечно, для решения задач.

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

От перфокарт до ИИ: программирование 55 лет назад vs сегодня

Как можно использовать нейронку? Например, отправить в чат фрагмент или готовый код программы и промпт к нему:

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

Не всегда, правда, код без глюков, а решения полные :( Главная проблема ИИ типа ChatGPT в том, что многие считают их универсальными. Из-за этого нередко либо результат не устраивает (завышенные ожидания), либо понимаешь, что проще и быстрее сделать самому.Чтобы апгрейднуть результат и сэкономить время, достаточно сделать очевидное: для каждой задачи использовать профильную нейронку.

В рамках API ограничения по получению ответа у GPT-4 составляет 4096 токенов, а у Claude 3 Opus около 128к токенов, в связи с этим и ответ получаемый от Claude 3 Opus будет больше. Плюс модели Claude 3 показывают себя более вдумчивыми.

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

Возьмем эту задачу и декомпозируем ее. Разбить на более легкие шаги — это заведомо хорошая стратегия, чтобы нейронка не разваливалась и не отвлекалась.

У нас вышли такие шаги:

  1. Составь функциональные требования, основанные на следующем описании: [полное описание из задания].
  2. Теперь распиши полученные функциональные требования в виде User stories.
  3. На основе полученных данных (Функциональных требований и user stories) составь сущности и атрибуты к ним с выделением первичных ключей.
  4. Теперь на основе полученной информации составь plantUML.
  5. Теперь составь BPMN TO-BE в виде кода.
  6. Теперь составь полную спецификацию требований к этому ПО.
  7. Теперь распиши каждый пункт спецификации подробнее, мне нужна готовая заполненная спецификация.
  8. Составь документацию API с описанием всех методов системы на базе swagger.

И на все у Opus был ответ. Теперь проверим, исправим баги, если они есть — и готово! Конечно, не все так легко, как здесь читается, но работа над этими 8 пунктами своими руками была бы дольше в много-много раз.

1010
5 комментариев

А это типа, как раньше на швейных машинках педаль была? Я не силён в компах на перфокартах.

1

А тут педаль и суши?

1

Эволюция в программировании реально впечатляющая. Не могу представить, как раньше кодировали на перфокартах

1

Тогда было понятнее. Сейчас предлагают гадать на кофейной гуще ;D

1