?

Log in

No account? Create an account
 
 
12 October 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 млн

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, бызы данных и финансовая информация.

 

Учиться новам идеям и техникам было часто не легко. Класическая шуточная статья «Почему настоящие программисты не пишут на Фортране» Высмеивала подобную ситуацию.

 

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