Download - Алексей Воинов — Языки программирования
![Page 1: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/1.jpg)
![Page 2: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/2.jpg)
Языки программирования
Алексей Воинов
Разработчик-эксперт
![Page 3: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/3.jpg)
1
Почему много языков?
● решают разные задачи
![Page 4: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/4.jpg)
2
Почему много языков?
● решают разные задачи● люди не могут договориться
![Page 5: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/5.jpg)
3
C# Java
![Page 6: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/6.jpg)
4
JScript JavaScript
![Page 7: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/7.jpg)
5
Почему много языков?
● решают разные задачи● люди не могут договориться● изоляция разработчиков
![Page 8: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/8.jpg)
6
Cook
Peter Miller, http://miller.emu.id.au/pmiller/
![Page 9: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/9.jpg)
7
Почему много языков?
● решают разные задачи● люди не могут договориться● изоляция разработчиков● эксперименты
![Page 10: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/10.jpg)
8
● Cyclone, http://cyclone.thelanguage.org/ ● D, http://dlang.org● Clojure, http://clojure.org● Io, http://iolanguage.com● Self, http://selflanguage.org
![Page 11: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/11.jpg)
9
Почему много языков?
● решают разные задачи● люди не могут договориться● изоляция разработчиков● эксперименты● развитие
![Page 12: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/12.jpg)
10
Развитие языков Вирта
Pascal (1970)
Modula (1975)
Modula-2 (1978)
Oberon (1986)
![Page 13: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/13.jpg)
11
Развитие языков обработки текста
ed (1971)
sed (1974)
awk (1977)
perl (1987)
![Page 14: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/14.jpg)
12
Зачем учить языки?
● прямая необходимость
![Page 15: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/15.jpg)
13
Зачем учить языки?
● прямая необходимость● расширение лексикона
![Page 16: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/16.jpg)
14
Зачем учить языки?
● прямая необходимость● расширение лексикона● заимствование
![Page 17: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/17.jpg)
15
Зачем учить языки?
● прямая необходимость● расширение лексикона● заимствование● понимание
![Page 18: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/18.jpg)
16
Зачем учить языки?
● прямая необходимость● расширение лексикона● заимствование● понимание
R.Osherove «The Art Of Unit Testing»R.Martin «Clean Code»
![Page 19: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/19.jpg)
17
Зачем учить языки?
● прямая необходимость● расширение лексикона● заимствование● понимание● развитие навыка изучения
![Page 20: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/20.jpg)
18
Классификации языков
![Page 21: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/21.jpg)
19
… по уровню
Языки высокого уровня● Pascal● C++● Java● ...
Языки низкого уровня● Машинный код● Ассемблеры
![Page 22: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/22.jpg)
20
… по уровню
Языки высокого уровня● Pascal● C++● Java● ...
Языки низкого уровня● Машинный код● Ассемблеры
?● C
![Page 23: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/23.jpg)
21
… по уровню
Языки высокого уровня● Pascal● C++● Java● …
JavaScript
Языки низкого уровня● Машинный код● Ассемблеры
![Page 24: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/24.jpg)
22
… по способу исполнения
Компилируемые● C● Ada● Delphi● ...
Интерпретируемые● Lua● Tcl● ...
![Page 25: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/25.jpg)
23
… по способу исполнения
Компилируемые● C● Ada● Delphi● ...
Интерпретируемые● Lua● Tcl● ...
?● Python● LISP● Java
![Page 26: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/26.jpg)
24
… по способу исполнения
Компилируемые● C● Ada● Delphi● ...
Интерпретируемые● Lua● Tcl● ...
?● Python● LISP● Java
JavaScript
![Page 27: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/27.jpg)
25
… по поколениямПервое поколение
● Машинный код
Четвёртое поколение● SQL● FoxPro● XUL● ...
Второе поколение
● Ассемблеры
Третье поколение● ALGOL● Fortran● COBOL● ...
![Page 28: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/28.jpg)
26
… по поколениямПервое поколение
● Машинный код
Четвёртое поколение● SQL● FoxPro● XUL● ...
Второе поколение
● Ассемблеры
Третье поколение● ALGOL● Fortran● COBOL● ...
Пятое поколение● Prolog● Mercury● ...
![Page 29: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/29.jpg)
27
… по поколениямПервое поколение
● Машинный код
Четвёртое поколение● SQL● FoxPro● XUL● ...
Второе поколение
● Ассемблеры
Пятое поколение● Prolog● Mercury● …Третье поколение
● ALGOL● Fortran● COBOL● …
JavaScript
![Page 30: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/30.jpg)
28
… по парадигмеОбъектно-ориетированные
● Java● Smalltalk● Ruby● ...
Логические● Prolog● Curry● ...
Процедурные
● Fortran● Ada● Pascal● ...
Функциональные● Haskell● Clean● Erlang● ...
![Page 31: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/31.jpg)
29
… по парадигмеОбъектно-ориетированные
● Java● Smalltalk● Ruby● ...
Логические● Prolog● Curry● ...
Процедурные
● Fortran● Ada● Pascal● ...
Функциональные● Haskell● Clean● Erlang● ...
?● LISP● Lua● Go● ...
![Page 32: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/32.jpg)
30
… по парадигмеОбъектно-ориетированные
● Java● Smalltalk● Ruby● ...
Логические● Prolog● Curry● ...
Процедурные
● Fortran● Ada● Pascal● ...
Функциональные● Haskell● Clean● Erlang● ...
?● LISP● Lua● Go● …
JavaScript
![Page 33: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/33.jpg)
31
… по стилю управления
Декларативные● Ant● XSL● ...
Императивные● Perl● Python● Go● ...
![Page 34: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/34.jpg)
32
… по стилю управления
Декларативные● Ant● XSL● ...
Императивные● Perl● Python● Go● …
JavaScript
![Page 35: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/35.jpg)
33
… по управлению памятью
Автоматическое● Java● T● Python● ...
Ручное● Ассемблеры● C● C++● ...
![Page 36: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/36.jpg)
34
… по управлению памятью
Автоматическое● Java● T● Python● …
JavaScript
Ручное● Ассемблеры● C● C++● …
![Page 37: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/37.jpg)
35
… по полноте
Тьюринг-полные● Erlang● Objective-C● sed● ...
Тьюринг-неполные● Regexp● Flex● ...
![Page 38: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/38.jpg)
36
… по полноте
Тьюринг-полные● Erlang● Objective-C● sed● …
JavaScript
Тьюринг-неполные● Regexp ● Flex● …
![Page 39: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/39.jpg)
37
… по назначению
Универсальные● Forth● Dylan● Clipper● ...
Предметные● Regexp● /etc/magic● конфигурация freeciv● ...
![Page 40: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/40.jpg)
38
… по назначению
Универсальные● Forth● Dylan● Clipper● …
JavaScript
Предметные● Regexp● /etc/magic● конфигурация freeciv● ...
![Page 41: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/41.jpg)
39
Домашнее задание №1● Предложить свою классификацию
– Универсальную– По 2-3 языка в каждой категории– Найти место JavaScript
![Page 42: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/42.jpg)
40
Scheme● 1975● Авторы: Guy Steele и Gerald Sussman● Базовый учебник: «Structure and
Interpretation of Computer Programs» или SICP
![Page 43: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/43.jpg)
41
Простые данные
Числа: 1, 42, 256.512 ...
Строки: "string"
Символы: define, sort, apply
Логические: #t, #f
![Page 44: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/44.jpg)
42
Списки
Пары: '(x . y)
Пустой список: '()
Списки:
'(x . ()) => '(x)'(x . (y . ())) => '(x y)
![Page 45: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/45.jpg)
43
Переменные
(let ((x 5)(y 10))
...)
(define z 15)
![Page 46: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/46.jpg)
44
Функции
(func x y z)
(+ 1 2 3 4); => 10
(apply '+ '(1 2 3 4)); => 10
(let ((func '+))
(func 1 2 3 4)); => 10
![Page 47: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/47.jpg)
45
Стандартные функции
(null? '()); => #t
(null? '(1 2 3)); => #f
![Page 48: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/48.jpg)
46
Стандартные функции
(car '(x . y)); => x
(car '(x y z)); => x
![Page 49: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/49.jpg)
47
Стандартные функции
(cdr '(x . y)); => y
(cdr '(x y z)); => '(y z)
![Page 50: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/50.jpg)
48
Ветвления
(if (= x 10)
(* x 2) (/ x 3))
![Page 51: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/51.jpg)
49
Циклы
(let loop ((i 1))
...(loop (+ i 1)))
![Page 52: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/52.jpg)
50
Пример
(define (min lst) (if (null? lst) #f (let loop ((res (car lst) (lst (cdr lst))) (if (null? lst) res (if (< res (car lst)) (loop res (cdr lst)) (loop (car lst) (cdr lst)))))))
![Page 53: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/53.jpg)
51
Домашнее задание №2● Написать что-нибудь на неизвестном
языке– Что-то совсем простое– Уметь это запустить
![Page 54: Алексей Воинов — Языки программирования](https://reader034.vdocuments.mx/reader034/viewer/2022052316/55878bbed8b42a36318b4750/html5/thumbnails/54.jpg)
52
Литература
● G.Steele, G.Sussman «The Structure and Interpretation of Computer Programs»
● D.Knuth «The Art of Computer Programming»
● R.Osherove «The Art of Unit Testing»
● R.Martin «Clean Code»
● M.Feathers «Working Effectively with Legacy Code»
+ Wikipedia!