1. Организационные и формальные вопросы.
2. Пользователь всегда прав!
3. Что такое язык программирования?
4. Краткая история развития языков программирования: машинные коды, ассемблер, языки высокого уровня.
5. Способы трансляции: компиляция и интерпретация.
6. Виртуальные машины.
7. Ученье — свет, неученье — тьма (для программиста: потеря работы).
2. ФОРМАЛЬНОСТИ
•4 группы. 2 на базе ИАиЭ, 2 на базе ИЯФ.
•В неделю:
• Одна лекция (вторник, 17:45). 2 ак. ч.
• Два семинара в каждой группе. 2×3=6 ак. ч.
•В конце семестра диф. зачет (теория + проект + работа
на семинарах).
3. УСЛОВИЯ РАБОТЫ
• Лекции: алгоритмы, структуры данных, практики
программирования.
• Семинары: язык C, применение теоретических знаний на
практике.
• Материалы на сайте opk.nsu.ru: база задач и лекции.
4. КОМАНДА
• Владимир Парфиненко (лекции, семинары, ИАиЭ).
vladimir.parfinenko@gmail.com, @cypok
• Алексей Девятайкин (семинары, ИАиЭ).
• Александр Макеев (семинары, ИЯФ).
• Ставро Гаязов и Павел Чеблаков (семинары, ИЯФ).
5. СОДЕРЖАТЕЛЬНАЯ ЧАСТЬ
Крайне быстрое установление контекста
для последующей работы
6. КРАТКО О
ПРОГРАММИРОВАНИИ
• Есть
тупой кусок кремния (1), годный к повторяющимся,
рутинным операциям.
• Есть пользователь (2).
• Программист (3) отбирает у пользователя (2) рутину,
объясняя куску кремния (1), как ее выполнять.
•В основе труда программиста (3) лежит модель системы.
• Хорошая программа = хорошая модель.
7. ЧТО ЕСЛИ...
• Программист отобрал у пользователя не ту рутину...
• Программист плохо объяснил задачу тупому куску кремния...
• Программист понял пользователя неправильно...
• Модель у программиста в голове не соответствует
действительности…
• Программист решил, что он умный и сам правильно знает, как
пользователю жить…
• Пользователю никто не объяснил, как пользоваться программой…
9. HOMO LOGICUS VS.
HOMO SAPIENS
Программист Пользователь
Цель: контроль Цель: простота
Cтремится достичь
Cтремится понять
результата
В фокусе исключительные В фокусе обыденные
ситуации ситуации
12. ПЕРВЫЙ ЯЗЫК
ПРОГРАММИРОВАНИЯ
.TITLE HELLO WORLD
.MCALL .TTYOUT,.EXIT
HELLO:: MOV #MSG,R1 ;STARTING ADDRESS OF STRING
1$: MOVB (R1)+,R0 ;FETCH NEXT CHARACTER
BEQ DONE ;IF ZERO, EXIT LOOP
.TTYOUT ;OTHERWISE PRINT IT
BR 1$ ;REPEAT LOOP
DONE: .EXIT
MSG: .ASCIZ /Hello, world!/
.END HELLO
Язык низкого уровня — язык Ассемблера
13. БАЗОВАЯ ИДЕЯ ЯЗЫКОВ
ПРОГРАММИРОВАНИЯ
program cool
begin
......
end
011001
110101 Транслятор
011001
110101
Компьютер Компьютер
Машинные коды Использование ЯП
14. ЯЗЫКИ ВЫСОКОГО УРОВНЯ
• FORTRAN (1950-е гг.) • Python (1991 г.)
• LISP (1950-е гг.) • Ruby (1993 г.)
• … • Java (1995 г.)
• [Visual] BASIC (1964 г.) • JavaScript (1995 г.)
• C (1972 г.) • PHP (1995 г.)
• C++ (1983 г.) • C# (2001 г.)
• Perl (1987 г.) • Scala (2003 г.)
15. СПОСОБЫ ТРАНСЛЯЦИИ
Программа Программа
(исходный код) (исходный код)
Компиляция Компилятор Интерпретация
Интерпретатор
Исполняемый
код
Пользователь
16. ВИРТУАЛЬНЫЕ МАШИНЫ
Программа
(исходный код)
Компилятор Компиляция
Промежуточный
(байт-) код
Виртуальная
машина
Интерпретация,
Пользователь
иногда компиляция
17. ТЕНДЕНЦИИ
• Языкипрограммирования становятся все мощнее за счет
усложнения абстракций (ср. кирпич vs. разборный дом).
• Тупыекуски кремния не становятся умнее, но
усложняются, поэтому «объяснять» им все сложнее.
• Трансляторы становятся все сложнее.
• Ожидания пользователей растут.
18. WTF?!
• Программист просто обязан
постоянно учиться — новые
технологии появляются ежедневно.
• Естьбазовые вещи (алгоритмы,
структуры данных, …).
• Ими-то мы и займемся!