SlideShare a Scribd company logo
1 of 19
Download to read offline
ОСНОВЫ ПРОГРАММНОГО
  КОНСТРУИРОВАНИЯ
                  Лекция № 1
              19 февраля 2013
ФОРМАЛЬНОСТИ

•4   группы. 2 на базе ИАиЭ, 2 на базе ИЯФ.

•В   неделю:
 • Одна   лекция (вторник, 17:45). 2 ак. ч.
 • Два   семинара в каждой группе. 2×3=6 ак. ч.

•В конце семестра диф. зачет (теория + проект + работа
 на семинарах).
УСЛОВИЯ РАБОТЫ


• Лекции: алгоритмы, структуры   данных, практики
 программирования.

• Семинары: язык   C, применение теоретических знаний на
 практике.

• Материалы   на сайте opk.nsu.ru: база задач и лекции.
КОМАНДА

• Владимир   Парфиненко (лекции, семинары, ИАиЭ).
 vladimir.parfinenko@gmail.com, @cypok

• Алексей   Девятайкин (семинары, ИАиЭ).

• Александр   Макеев (семинары, ИЯФ).

• Ставро   Гаязов и Павел Чеблаков (семинары, ИЯФ).
СОДЕРЖАТЕЛЬНАЯ ЧАСТЬ
  Крайне быстрое установление контекста
         для последующей работы
КРАТКО О
         ПРОГРАММИРОВАНИИ
• Есть
     тупой кусок кремния (1), годный к повторяющимся,
 рутинным операциям.

• Есть   пользователь (2).

• Программист (3) отбирает у пользователя (2) рутину,
 объясняя куску кремния (1), как ее выполнять.

•В   основе труда программиста (3) лежит модель системы.

• Хорошая    программа = хорошая модель.
ЧТО ЕСЛИ...
•   Программист отобрал у пользователя не ту рутину...

•   Программист плохо объяснил задачу тупому куску кремния...

•   Программист понял пользователя неправильно...

•   Модель у программиста в голове не соответствует
    действительности…

•   Программист решил, что он умный и сам правильно знает, как
    пользователю жить…

•   Пользователю никто не объяснил, как пользоваться программой…
…ТО
Пользователь всегда прав!




P. S. Пользователь есть всегда и у любой программы!
HOMO LOGICUS VS.
       HOMO SAPIENS
     Программист             Пользователь


    Цель: контроль          Цель: простота

                          Cтремится достичь
   Cтремится понять
                             результата

В фокусе исключительные   В фокусе обыденные
        ситуации               ситуации
ИСТОРИЯ ПРОГРАММИРОВАНИЯ
     Первые компьютеры (ENIAC, ...)
МАШИННЫЕ КОДЫ
0 и 1 хороши для кремния, но не для программистов
ПЕРВЫЙ ЯЗЫК
   ПРОГРАММИРОВАНИЯ
        .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


       Язык низкого уровня — язык Ассемблера
БАЗОВАЯ ИДЕЯ ЯЗЫКОВ
 ПРОГРАММИРОВАНИЯ

                             program cool
                             begin
                               ......
                             end
011001
110101              Транслятор
                    011001
                    110101


  Компьютер         Компьютер

Машинные коды   Использование ЯП
ЯЗЫКИ ВЫСОКОГО УРОВНЯ
•   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 г.)
СПОСОБЫ ТРАНСЛЯЦИИ
   Программа                                      Программа
 (исходный код)                                 (исходный код)



Компиляция        Компилятор    Интерпретация

                                                Интерпретатор

  Исполняемый
      код
                         Пользователь
ВИРТУАЛЬНЫЕ МАШИНЫ
  Программа
(исходный код)
                               Компилятор Компиляция


 Промежуточный
   (байт-) код

                               Виртуальная
                                 машина
            Интерпретация,
                                               Пользователь
           иногда компиляция
ТЕНДЕНЦИИ

• Языкипрограммирования становятся все мощнее за счет
 усложнения абстракций (ср. кирпич vs. разборный дом).

• Тупыекуски кремния не становятся умнее, но
 усложняются, поэтому «объяснять» им все сложнее.

• Трансляторы   становятся все сложнее.

• Ожидания   пользователей растут.
WTF?!

• Программист просто обязан
 постоянно учиться — новые
 технологии появляются ежедневно.

• Естьбазовые вещи (алгоритмы,
 структуры данных, …).

 • Ими-то   мы и займемся!
КОНЕЦ ПЕРВОЙ ЛЕКЦИИ

More Related Content

Viewers also liked

ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиVladimir Parfinenko
 
ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселVladimir Parfinenko
 
ОПК № 3 – Машинное представление целых чисел, символов, строк
ОПК № 3 – Машинное представление целых чисел, символов, строкОПК № 3 – Машинное представление целых чисел, символов, строк
ОПК № 3 – Машинное представление целых чисел, символов, строкVladimir Parfinenko
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CVladimir Parfinenko
 

Viewers also liked (6)

A bit about Scala
A bit about ScalaA bit about Scala
A bit about Scala
 
ОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, спискиОПК № 5 – Составные типы данных, списки
ОПК № 5 – Составные типы данных, списки
 
ОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чиселОПК № 4 – Представление действительных чисел
ОПК № 4 – Представление действительных чисел
 
Scala for Jedi
Scala for JediScala for Jedi
Scala for Jedi
 
ОПК № 3 – Машинное представление целых чисел, символов, строк
ОПК № 3 – Машинное представление целых чисел, символов, строкОПК № 3 – Машинное представление целых чисел, символов, строк
ОПК № 3 – Машинное представление целых чисел, символов, строк
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
 

Similar to ОПК № 1 – Вводная

Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniyaaysel9r2
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2 aysel9r2
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...SBTech
 
программирование
программированиепрограммирование
программированиеalex2012_1981
 
программирование
программированиепрограммирование
программированиеalex2012_1981
 
программирование
программированиепрограммирование
программированиеalex2012_1981
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. AlgorithmIhor Porotikov
 
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняTech Talks @NSU
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasickvlar
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияpaulsmirnov
 
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...Mikhail Payson
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программированияnhfkzkz
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Программирование
ПрограммированиеПрограммирование
Программированиеalecsa
 

Similar to ОПК № 1 – Вводная (20)

Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
программирование
программированиепрограммирование
программирование
 
программирование
программированиепрограммирование
программирование
 
программирование
программированиепрограммирование
программирование
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
 
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
 
Функции в языке программирования QBasic
Функции в языке программирования QBasicФункции в языке программирования QBasic
Функции в языке программирования QBasic
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Фишки и прелести TypeScript
Фишки и прелести TypeScriptФишки и прелести TypeScript
Фишки и прелести TypeScript
 
BE SOLID
BE SOLIDBE SOLID
BE SOLID
 
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программирования
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Программирование
ПрограммированиеПрограммирование
Программирование
 

ОПК № 1 – Вводная

  • 1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 1 19 февраля 2013
  • 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. ЧТО ЕСЛИ... • Программист отобрал у пользователя не ту рутину... • Программист плохо объяснил задачу тупому куску кремния... • Программист понял пользователя неправильно... • Модель у программиста в голове не соответствует действительности… • Программист решил, что он умный и сам правильно знает, как пользователю жить… • Пользователю никто не объяснил, как пользоваться программой…
  • 8. …ТО Пользователь всегда прав! P. S. Пользователь есть всегда и у любой программы!
  • 9. HOMO LOGICUS VS. HOMO SAPIENS Программист Пользователь Цель: контроль Цель: простота Cтремится достичь Cтремится понять результата В фокусе исключительные В фокусе обыденные ситуации ситуации
  • 10. ИСТОРИЯ ПРОГРАММИРОВАНИЯ Первые компьютеры (ENIAC, ...)
  • 11. МАШИННЫЕ КОДЫ 0 и 1 хороши для кремния, но не для программистов
  • 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?! • Программист просто обязан постоянно учиться — новые технологии появляются ежедневно. • Естьбазовые вещи (алгоритмы, структуры данных, …). • Ими-то мы и займемся!