Записки Программиста
Oct. 12th, 2008 12:25 pmЕще немного о компьютерах и технологиях (что изменилось эа эти годы).
Итак я начинал программировать на М20 (и чуть позже на ее аналоге БЭСМ4, в Пединституте. Оперативная память там была 4096 ячеек по 45 разрядов/битов. нешняя память – 4 барабана, каждый такой же вместительности. Скорость – около 20 тысяч операций в секуну. День без поломок считался хорошим показателем – а при поломках поиск перегоревшей электронной лампы или другой неисправности занимал немалое время.
И, собственно, мощьность компьютеров, это пожалуй то, что изменялось непрерывно с тех пор и изменилось наиболее радикально. Попробуя изобразить это (некоторые компьткры, с которыми я имел дело) в виде таблицы.
Год | Название | Размер | скорость | Оперативная память | Внешняя память |
1966 | M20 | Большой зал | 20 тысяч | 24К | 96К |
1970 | ICL 4/70 | Зал | 200 тысяч (?) | 384K | 150M |
1980 | ЕС-1045 | Зал | 800 тысяч (?) | 1-2М | 500М |
1989 | IBM-PC | настольная | 1 – 2 милиона | 1-2М | 20М |
1991 | Первая PC, кот. Я купил в США | настольная | 10 – 20 млн | 1М | 40М |
2007 | Моя домашняя PC | настольная | 2 проц * 2 милиарда | 4G | 0.5T |
Это просто компьютеры, которые я использую для работы – еще более поразительнык цифры можно былобы получить добавив для сравнения разные штучки, помещающиеся в карман, и то и просто мобильные телефоны.
Итак, мой дешевенький настольный компьютер, на котором я сейчас набираю этот текст:
· Быстрее: примерно в 200 тысяч раз..
· Памяти – примерно в 2 миллиона раз больше
· Внешней памяти – примерно в 5 миллионов раз.
· Ломается – более или менее никогда за срок своей жизни – обычно я покупаю новый каждые 2 года.
· И не могу сосчитать насколько меньше места он занимает J
Короче, производительность и доступность компьютеров изменились в невообразимое количество раз.
И – еще – появились встроенные ( embedded) компьтеры – например управляющие телевизором или телефоном (или бомбой). И – новая ветвь программирования – embedded software engineering – со своей спецификой, иногда напоминающей старые ностальгические времена – как то очень маленькая память, отсутствие уже привычных устройств интерфейса пльзователя (UI) и.т.д.
Техника программирования с тех пор, конечно, изменизась, хотя, на мой взгляд не так сильно. Больше всего это относится к техникам, помогающим писать большие и сложные программы, сопровождать и изменять их и избегать ошибок. Попытаюсь перечислить здесь то, что мне кажется наиболее важным.
1. Идея состоящая в том, что программа должна быть читабельной не только для компьютера, но и для человека. В СССР я думаю, что наибольшая заслуга в этом принадледит Брудно. Первые движения здесь были совсем разными в СССР и на западе. На западе решающим было создание фортрана и, затем, других языков программирования (алгол здесь сыграл тоже немалую положительную роль, хотя и не стал общеупотребительным). В СССР – в то время, в связи с слишком медленными машинами, небольшой памятью и отсутствием алфавитно-цивровых (не говоря уже о графических) устройств ввода и печати, это было практически неприменимо и придуманные Брудно «содержательные обозначения» позволили решить эту же задачу вручную, позволяя создавать фантастически умные и эффективные программы не запутываясь в сплошных сериях цифр.
2. Близкая к этому идея организации структуры программы соответствующей структуре более высокого уровня – или модели (позже из этого возникло объектно ориентированное программирование) или алгоритма и соответствующей структуре данных (потом появился близкий термин абстактных типов данных). Это так же предлагалось в книге А.Л.Брудно; и было развито дальше в книге «Практика Программирования» Гутера, Арлазарова и Ускова (к сожалению, ни одной из этих книг у меня не сохранилось).
3. Введение программистских шаблонов. До некоторой степени предложено теми же авторами, а потом, и с более формальными рассмотрениям, видимо независимо – Дийкстрой.
4. Языки программирования, начиная с фортрана и автокода/ассемблера. Возможность написания программы на слегка более высоком уровне, чем машинный код, сделать ее почти независимой от архитектуры машины и избежать ручного кодирования цифр (и связанных с ним неизбежных ошибок и потери времени) было громадным движением вперед. Но, как я уже говорил, использование языков и трансляторов/компиляторов требовало более развитой техники, и поэтому в СССР было принято не сразу.
Дальше произошло много всякого – говорить об этом можно до бесконечности:
- Отладчики, понимающие используемый язык программирования.
- Графические интерфейсы
- Языки использующие принципиально другие модели данных (Lisp, Snobol, Refal итд).
- Объектно ориентированные языки
И на фоне этого масса разных исследований, большаая часть которых была теоретической, но иногда приводила к лучшему пониманию, и иногра и рождала новые алгоритмы.
Набор задач тоже менялся – встроенные процессоры, сети, интернет и WWW, бызы данных и финансовая информация.
Учиться новам идеям и техникам было часто не легко. Класическая шуточная статья «Почему настоящие программисты не пишут на Фортране» Высмеивала подобную ситуацию.
Кроме такого бурного развития были и потери. Некоторые области стали невостребованными или, вернее (хотя это почто тоже), неоплачиваемыми – это приводило к патерям знаний – просто исчезали (почти) специалисты. Так стало в значительной степени, например, с операционными системами (из за того, что большие компьютерные фирмы перестали это финансировать), макропроцессорами (не знаю, почему – стали непопулярными).