Костин Г. В., г. Пермь
Языки программирования: эволюция и анализ
Представлен анализ 56 ЯП. Рассмотрен ЯП как интерфейс разработчика с ПК, а процесс разработки как процесс перевода задачи из языка мировоззрения заказчика в язык “мировоззрения” компьютера. Рассмотрены темы: создание языков, их популярность, влияние ЯП на характеристики разрабатываемого ПО, связь ЯП с CASE средствами, языки сценариев и специализированные ЯП, человеческий фактор в ЯП, методы анализа и сравнения ЯП, эволюция ЯП, место ЯП в разработке ПО.
Язык – это интерфейс между двумя субъектами.
Примеры:
1. Человеческий язык, в частности слова, жесты, интонации...
2. Интерфейсы (Com порта, пользователя, API)
Требование к языку коммуникации: совпадение его у субъектов коммуникации, для эффективной коммуникации близость к способу мышления субъектов.
На рис. 1 изображен язык программирования (ЯП). Одна сторона смотрит на компьютер, другая – на разработчика. Расстояние до компьютера и программиста определяет уровень языка. Чем ближе ЯП к компьютеру и дальше от разработчика, тем больше будет размер исходного кода программы на нем, сложность и трудоемкость его написания, широта возможностей, предоставляемых языком, и качество генерируемого кода.
Из близости к человеку будут следовать переносимость разрабатываемого ПО и его безопасность, низкий уровень детализации и, естественно, более высокий уровень ЯП.
Аспекты размера ЯП: широта средств языка по уровням абстракции и широта по областям применения - универсальность/ специализированность ЯП.
Размер ЯП – есть два крайних варианта:
1. В ЯП следует включать только то, без чего невозможно обойтись(Oberon).
2. В ЯП следует включать все, что когда-либо может понадобиться(C++, Ada)
Предпочитаемый выбор ЯП определяется психотипом.
Программирование – это процесс переноса мыслей разработчика на компьютер (см. рис. 2). Фактически- процесс перевода задачи из языка мировоззрения заказчика в язык способа мышления компьютера. От автоматизации этого перевода в значительной степени зависит производительность разработки. Значительная часть разработок в области программирования направлена на “подтягивания” компьютера к клиенту(к примеру специализированные средства (1C) и ЯП(PHP) либо на автоматизацию перевода(средства генерации кода по спецификациям(IDL), Case средства). Их применение может дать рост скорости разработки в 5-10 раз (серебреная пуля существует!).
Некоторые тезисы:
1. Если в одном из языков появляется удобная концепция, средство, конструкция, то они переносятся в другие языки, что ведет к сближению языков в одной.
2. Человеческий фактор постоянно увеличивает своё влияние на сферу ЯП. Если изначально ЯП и способ мышления подстраивался к “железу”, то теперь “железо” подстраивается к способу мышления.
3. Тема ЯП чрезвычайно эмоционально важна для разработчиков так как ЯП формирует наш способ мышления.
4. Невозможность безошибочной работы, что обуславливает, к примеру, существование типизации.
6. Консерватизм в выборе ЯП. Имеют большое значение исторические и психологические факторы.
7. Не редко разработчики занижают уровень языка.
8. Анализ ЯП: Умозрительные критерии неубедительны и ограничены, основной критерий ЯП- это практика массового использования.
9. Требования к ЯП и критерии оценки сильно зависят от его использования.
10. Представления разработчика ЯП о том, как должны писаться программы, очень глубоко отражаются в создаваемом языке. Они определяют его. Это нужно учитывать при анализе и изучении ЯП.
11. Эволюция средств разработки идет по пути повышения уровня абстракции (от аппаратного обеспечения) средств что ведет к повышению их “юзабельности” и их специализации для решения конкретного круга—от вопроса “как?” к вопросу “что?”. В результате специализации появились спец. языки, применение которых позволило увеличить производительность разработчика на порядок.
12. Эволюция “объекта внимания” языков: компьютер–прикладные задачи–человек
13. Сценарные языки за несколько лет на порядок стали более популярны. Их предназначение- управление компонентами сложных программных систем(сборка из готовых компонентов и их настройка).
Сейчас до 95% функциональности новой программы обеспечивается за счет готовых модулей. Нужно лишь их настроить и связать. А для этого сценарные ЯП подошли прекрасно. Основные черты: простота, нетипизированность, интерпретируемость и возможность динамической кодогенерации. Визуальные среды (к примеру, Delphi) и сценарные языки – это два подхода (графический и текстовый) к решению одной и той же проблемы сборки приложения из готовых компонент.
Литература
1. Бентли Д. Жемчужины творчества программистов. – М.: Радио и связь, 1990.
2. Брукс Ф. Мифический человеко-месяц. – СПб.: Символ, 2001.
3. Бен-Ари М.. Языки программирования. – М.: Мир, 2001.
4. Страуструп Б. Язык программирования C++ . –М.: Бином, 2001
5. Страуструп Б. Дизайн и эволюция C++ . – М.: ДМК, 2000.
6. Мейер Б. Методы программирования. – М.: Мир,1982
7. Дейкстра. Наука программирования. – М., 1982.
8. Мёссенбёк Х., Вирт Н. Язык программирования Оберон-2 / Институт компьютерных систем, ETH. – Цюрих, 1996
9. Вирт Н. От модулы к Оберону. – ИнфоАрт ,1998.
10. Фьюэpа А. Языки программирования Ада, Си, Паскаль: Сравнение и оценка. – М.: Радио и связь, 1989.
11. Баpдинова Т.Ю. От Паскаля к Аде: Финансы и Статистика. – 1990.
12. Пеpминов. О.H. Введение в язык программирования Ада. – М.: Радио и связь, 1991.
13. Янг. С. Алгоритмические языки реального времени: Конструирование и разработка. – М.: Мир, 1985.
14. Hоден П., Китте К. Алгебраическая алгоpитмика. С упражнениями и решениями. – М.: Миp, 1999.
15. Кнут Д. Искусство программирования для ЭВМ. – Т. 2, 3. – 1999.
16. Сван T. Секреты 32-разрядного программирования в Delphi
17. Керниган Б., Ричи Д. Язык C. –Финансы и статистика, 1992.
18. Арнольд К., Гослинг Дж. Язык программирования Java
19. Шварц Р., Кристиансен Т. Изучаем Perl. – Изд-во BHV, 1999.
20. Буч Г. Объектно-ориентированное проектирование с примерами применений. – СПб.: Невский диалект, 1998.
21. Дейкстра Э. Дисциплина программирования.
22. Вирт Н. Алгоритмы и структуры данных. –М., 2001.
23. Рудаков П. И., Финогенов К. Г. Программируем на языке ассемблер IBM PC. – Обнинск, 1999.
24. Армстронг Дж. Секреты UNIX. – М.: Диалектика,1999.
25. Дейт К. Д. Введение в системы баз данных. – М.: Диалектика, 2002
26. Пратт. Языки программирования. – М., 1979
27. Себеста. Основные принципы языков программирования. – М., 2002.
28. Таксиль Л. Забавная библия (Б-ка атеистической литературы). – М., 1976.
29. Программирование на языке Basic для компьютера ZX Spectrum 48K. – Спб.,1993.
30. Кинг Д. Создание эффективного ПО. – М.: Мир, 1991.
31. Бек Л. Введение в системное программирование. – М.: Мир, 1988.
32. Данкан Р. Профессиональная работа в MS DOS. – М.: Мир, 1993.
33. Алдер Г. Технология НЛП. СПб., 2001.
34. CASE-технологии, Современные методы и средства проектирования информационных систем, А.М.Вендров, Методологии и технологии проектирования ИС, 1997, www.citforum.ru
35. Барышнев А.С.JPI Modula-2. – Минск, 1990.
36. Грисc. Наука программирования. – М.: Мир, 1984.
37. Programmer's Stone (c) Alan Carter and Colston Sanger, 1997 www.euro.ru /~programmersstone
38. Advanced Programming Language Design. Raphael Finkel Addison-Wesley.1996
39. Лисков. Использование абстракций и спецификаций для разработки программ. – М.: Мир, 1989.
40. Фунти К. Языки программирования и схемотехника СБИС. – М.: Мир, 1988.
41. Джоунз. Программирование на языке Оккам. – М.: Мир, 1989.
42. Брой М. Информатика. Основополагающее введение. Структуры систем и системное программирование. – Ч. III // М.: Диалог-МИФИ, 1996
43. Наумов Н. А. О некоторых подходах к расширению языков программирования. - Проблемы информационных систем. – Вып.4 / Международный центр научной и технической информации. – М., 1988.
44. Философский словарь / Под ред. Алексеева. – М.: Проспект, 1998.
45. Кауфман В.Ш. Языки программированияю. – М.: МГУ, 1986,
46. Храмцов П. Б Администрирование сети и сервисов internet: Учебное пособие.
47. Козлов Н.. Как относиться к себе и к людям, или практическая психология на каждый день . – М.: Новая школа, 1994.
48. Берн Э.. Сексуальные игры.
49. Макиавелли Н. Государь. – М.: Планета, 1990
50. Соловьев А.Е. Конспект лекций по дискретной математике.