Чистота кода. Программирование – философия и практика
© Владимир Хохлов, 2024
ISBN 978-5-0062-5333-9
Создано в интеллектуальной издательской системе Ridero
ЧИСТОТА КОДА
ФИЛОСОФИЯ И ПРАКТИКА ПРОГРАММИРОВАНИЯ
Часть 1
ПРЕДИСЛОВИЕ
Для кого эта книга? Для людей. Больше – для начинающих путь в программисты. И для опытных узких спецов, чтобы обозреть окрестности своей специальности.
Но и – для машин. Ведь машины уже активно интересуются людьми… Поисковые роботы зачастую начинают жить за пределами заложенного в них алгоритма и узнают о предпочтениях пользователя очень много. И начинают вести его по жизни – предлагать то – чего он сам желал, но не смог ещё сформулировать вопрос. Ведь популярный вопрос 60-х годов 20-го века: «Может ли машина мыслить?», уже отпал. Да. Может…
Хочется надеяться – что эта книжка будет полезна и людям и машинам. Чтобы выстроить свои знания в систему, набрести на новые свои мысли. Усилить свой образ… Ведь образование и даёт возможность создавать, впитывая новые знания и генерируя новые свои идеи, когда большая часть знаний, полученных прежде, уже забыта.
ВВЕДЕНИЕ
Профессор Трахтенброт в Новосибирском госуниверситете в начале семидесятых годов 20го века на семинаре, который он поименовал просто: «Искусственный интеллект», регулярно произносил фразу: «Мы занимаемся компьютерсайнс». Употребляя именно этот глагол – «занимаемся». Не «изучаем» или «рассматриваем». Хотя можно было сказать и – «конструируем». Доклады слушатели семинара часто готовили на предложенную Борисом Авраамовичем тему, довольно экзотические. Типа «Многомерная модель шагающего робота». Мне как-то досталась тема «Двухмерный автомат Неймана». Подготовил. Это было в начале 70-х, эпоха интернета и поисковых роботов только забрезжила.
Ещё хорошо помнили про машину Тьюринга и чем от неё отличается автомат Неймана. На семинаре профессора Алексея Андреевича Ляпунова «Биологическая кибернетика» мы рассматривали аспекты связей в живом: от движения воздуха в ольвеолах лёгких и взаимодействия популяций в модели «хищник – жертва» до моделей био-гео-ценозов больших природных водоёмов. Планировали экспедиции на озера и Иссык-куль и на озеро Байкал. В перспективе – была идея построить модели био-гео-ценоза Тихого океана. Но не случилось. Ушёл Алексей Андреевич из жизни.
А вычислительные машины были ещё довольно медленные, но очень крупные по размерам. В университете стояла ЭВМ БЭСМ-4. Ввод – с перфоленты. Исправить один ошибочный символ – надо перфорировать весь рулон. Программировали – на языке АЛГОЛ. Вполне симпатичном, кстати. Мы были в середине пути – от первых электронных вычислительных машин 40-х – 50-х годов и ещё помнили истоки программирования. Легко было много знать. Информации по теме было гораздо меньше.
Постепенно произошла сегрегация в компьютерных делах. Системные программисты, обеспечивающие программную часть ЭВМ для связи процессора с устройствами ввода и вывода информации. И программисты – пользователи, которых «системщики» стали считать тоже устройствами ввода, для которых коды языка программирования надо перевести в коды для ЭВМ. Как-то в середине восьмидесятых напросился я у начальника на курс. Назывался он «Системное сопровождение системы виртуальных машин ЕС ЭВМ». По правде сказать, не столько меня интересовал курс. Хотелось пять недель пожить в Тбилиси, городе, где до той поры не бывал. ЕС ЭВМ – единая система машин – была аналогом IBM-360-370. На ранних ЭВМ серии приходилось, получив с полчаса машинного времени, приходить в машинный зал (надев белый халат) и работать через главный пульт – «лицо» ЭВМ размером примерно метр на метр с многочисленными лампочками, кнопками, клавишами и тумблерами. А потом воявилась операционная система позволившая разделять время процессора и память между несколькими программистами. Виртуально. Они даже не знали и не задумывались – сколько их одновременно работает с ЭВМ. Мониторы стали ставить удалённо. Только надо было заказать свою магнитную ленту с данными и магнитный пакет дисков с программой. Мы уже работали с этой системой виртуальных машин и мне казалось, что я легко освою этот курс. И совмещу приятное с полезным.
Но в первую неделю занятий я осознал, что я – пользователь, может быть чуть продвинутый, имевший практику программирования на языках Алгол и Фортран, писавший программы на языке низкого уровня – Ассемблере ЕС ЭВМ, где часть оператора была схожа с машинной командой, но имевшего мнемонику из одной-трёх латинских букв, которая обозначала название команды, а среди курсантов попались асы системного программирования. При этом из 25-ти курсантов – 20 были девушки. Дамы 25-30-ти лет. Среди представителей других профессий – от домохозяек до пилотов авиации образ программиста сложился под влиянием кино, как непричёсанный молодой парень в толстовке и домашних тапочках на босу ногу. Наши дамы на курсе выглядели вполне нарядно и даже изысканно, что заставляло местных водителей проскочив мимо остановки на четвёртом километре военно-грузинской дороги, сдавать назад и приглашать подвезти. Совершенно бескорыстно. Однако большинство из них курили и утро встречали на веранде у наших скромных номеров турбазы с большой кружкой кофе и сигаретой. Но когда они заговаривали между собой, многих слов в их разговоре я не знал. Терминология уже разделилась и обогатилась новым слэнгом. Как в наше время если вам случится услышать разговор двух разработчиков драйверов – программ для взаимодействия устройств с операционными системами компьютеров или смартфонов, вы можете подумать, что это два иностранца из какой-то экзотической страны.
ИСТОРИЯ ПРОГРАММИРОВАНИЯ ДЛЯ ЭЛЕКТРОННЫХ ВЫЧИСЛИТЕЛЬНЫХ МАШИН
Уважаемый читатель, прежде, чем нам с вами беседовать, надо договориться по терминологии. Если Вам скучно это читать, поскольку – «и так всё знаю» – можно перейти к чтению первой главы. Но я однажды не сдал зачёт, когда профессор – преподаватель матанализа сказал: «Вы используете в доказательстве теоремы некий «эпсилон». Вы должны были в самом начале оговорить его – «зададимся произвольным «эпсилоном» больше нуля».
Сначала – про слова. Как сказано не мной: «Придумай имя и познаешь суть».
Слово «программа» происходит от греческого πρόγραμμα и означало действительно то, что и теперь продают в театрах перед балетом или оперой – программу представления в театре. В русский язык слово попало из французского programme. Потом слово пошло в народ и стало применяться кругом – от программы скачек и телепередач до программы Партии. Для вычислительных устройств это слово не применялось, пока были абаки-счёты-арифмометры. Но когда появились счетные машины, стали строить алгоритмы действий и стали называть их «ПРОГРАММОЙ».
Вот об этих программах и пойдёт речь.
Тут стоит немного остановиться и на слове «компьютерные». Само слово «КОМПЬЮТЕР», пошло от латинского computare (считать, вычислять). При этом «компьютер» – означало человека, как ещё недавно в широко распространённой профессии – счетовод. В книге «Золотой телёнок» миллионер Корейко служил счетоводом. В разных странах оно имело местные синонимы – определения. В Советском Союзе в 60-е – 80-е годы в ходу была аббревиатура ЭВМ – электронная вычислительная машина. Слово «компьютер» прижилось в СССР только когда появились «ПиСи» – персональные компьютеры. Архитектура вычислительных машин была разной. Но процессор до сей поры в большинстве компьютеров основан на принципе автомата Неймана.
ГЛАВА 1
ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ И УСТРОЙСТВА
Идеология науки о вычислительных процессах начинается с книги Норберта Винера «Кибернетика или управление и связь в животном и машине».
Но и до этой работы было много примеров того как можно реализовать теоретические вычислительные машины. И как эти наборы нулей и единиц (лампочка не горит- лампочка горит) использовать для реальных вычислений. Были попытки и автоматизировать вычисления в троичной системе счисления и в десятичной, привычной для людей ещё с той поры как всё считали на пальцах.
Но в эпоху ламповых радиоприёмников построить электронную вычислительную машину было большой проблемой.
Устройства, анализирующие последовательность сигналов уже были. Машина, которую Тьюринг применил во Вторую мировую войну расшифровывала немецкие радиограммы для морских судов и для воинских соединений. Шифры менялись едва не ежечасно случайным образом и вручную их дешифровать не представлялось возможным.
Вычисления в первой половине 20-го века производились не только на конторских счётах, но и на замечательных изобретениях – логарифмической линейке и на механическом арифмометре «Феликс». Логарифмическая линейка изготавливалась в разных формах и размерах. Позволяла умножать, делить, выполнять тригонометрические функции и прочее.
А вычисления на электронных машинах начинались с трудом. Транзисторы ещё не придумали. Всё строилось на электронных лампах. А из сотен ламп, если одна выходила из строя, всё надо было проверять, искать, заменять неисправность. И информацию надо было вводить – прямо с пульта ЭВМ. Потом научились делать считыватели. Мой сослуживец обучался в конце шестидесятых в Пермском университете. У них стояла ЭВМ, которая считывала код программы с киноленты. Соврал символ – снимай на новую плёнку, проявляй-закрепляй. Потом научились вводить с перфоленты. Стало проще. Но всё же файлы последовательного доступа постепенно уступили место файлам прямого доступа. Люди же читали книги. А ведь это и есть замечательный образец файла прямого доступа – номер страницы, номер строки. Выборка. Не то, что в древних свитках. И кто-то придумал или вспомнил – перфокарты! 80 байтов на одной картонке… Эти колоды карт, набитые старательными девушками на специальных перфорирующих устройствах, приносили в машинный зал и загружали в устройство ввода.