Successfully reported this slideshow.
Your SlideShare is downloading. ×

Программирование: от сложного к простому

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 23 Ad

Программирование: от сложного к простому

Download to read offline

Слайды для моего выступления для участников Летней Проектной Академии в детском лагере Звездный, Абакан, 20 августа 2014 г.

Слайды для моего выступления для участников Летней Проектной Академии в детском лагере Звездный, Абакан, 20 августа 2014 г.

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Программирование: от сложного к простому (20)

More from Nikolay Grebenshikov (15)

Advertisement

Recently uploaded (20)

Программирование: от сложного к простому

  1. 1. Программирование: от сложного к простому Николай Гребенщиков, руководитель центра разработки Ланит-Терком в Абакане, к.т.н.
  2. 2. Что скрыто за фасадом?
  3. 3. 8E+09 7E+09 6E+09 5E+09 4E+09 3E+09 2E+09 1E+09 0 Трудозатраты, чел/час Дом – 100 000 Linux – 30 000 000 Vista – 80 000 000
  4. 4. Слагаемые трудоемкости • Размер и сложность решаемых задач • Ограничения человеческого организма • Разница между человеческим и машинным языком • Особенности командной работы
  5. 5. Сложность задачи
  6. 6. Сложность задачи
  7. 7. Сложность задачи
  8. 8. Сложность задачи • Модель • Алгоритмы • Данные: входные, хранение • Модульность и взаимодействие • Производительность
  9. 9. Программы пишут люди
  10. 10. Свойства психологии человека Интерференция — взаимоподавление одновременно осуществляющихся психических процессов. Она обусловлена ограниченным объёмом распределяемого внимания.
  11. 11. Свойства психологии человека «Магическое число семь плюс-минус два» — закономерность, обнаруженная американским учёным-психологом Джорджем Миллером, согласно которой кратковременная человеческая память, как правило, не может запомнить и повторить более 7 ± 2 элементов.
  12. 12. Один в поле не воин! • Всю программу не удержать в голове: – Делим на части – функции, процедуры, классы, объекты; – Абстрагируемся – абстрактные типы, классы, инкапсуляция, полиморфизм, шаблоны; – Выбираем другой язык – более близкий к задаче. • Большую программу даже не написать в одиночку: – Делим на части – модули, подсистемы; – Работаем командами.
  13. 13. Команда • Общее понимание задач. • Общие принципы написания кода: – Быстрое считывание; – Через полгода ваш код не ваш. • Средства для взаимодействия: – Задачи; – Код; – Документация. • Расходы на общение (нелинейная зависимость от размера команды)
  14. 14. Программист – переводчик с человеческого на компьютерный • Контекст задачи – неопределенный • Контекст компьютера: – Процессор (регистры, набор команд); – Память; – Внешняя память; – Дисплей; – Сеть.
  15. 15. От сложного к простому Источники сложности • Предметная область • Психология человека • Команда • Разность контекстов Способы упрощения • Сближение контекстов задачи и компьютера за счет языка программирования • Модель предметной области • Абстрактные типы • Общекомандные принципы работы
  16. 16. Практика программирования Сложные концепции: • Указатель на указатель • Функция как аргумент и результат • Наследование/Полиморфизм
  17. 17. Указатель на указатель Имя A B C Адрес 0 1 2 3 4 5 6 7 8 9 Значение 3 5 8 Указатель – переменная, которая хранит адрес другой переменной. * - операция, которая возвращает значение переменной, на которую указывает указатель. A = 3 B = 5 C = 8 *A = 5 **A = 8
  18. 18. Указатель на указатель Имя A B C D E F G H I K Адрес 0 1 2 3 4 5 6 7 8 9 Значение 3 9 5 5 6 8 7 2 5 9 Указатель – переменная, которая хранит адрес другой переменной. * - операция, которая возвращает значение переменной, на которую указывает указатель. A = ? F = ? D = ? B = ? *A = ? *F = ? *D = ? *B = ? **A = ? **F = ? **D = ? **B = ?
  19. 19. Функция Квадратичный полином – ax^2 + bx + c F = function(a,b,c) { return function(x) { return ax^2 + bx + c } } Y = F(5, -3, 2); Y (4) – 5*4^2-3*4+2 = 70 A = [1,2,3,4,5] A = A.map(Y); A – [4, 16, 38, 70, 112]
  20. 20. Функция Квадратичный полином – ax^2 + bx + c F = function(a,b,c) { return function(x) { return ax^2 + bx + c } } Y1 = F(3, -5, 1); Y1(4) – ? Y1(-2) – ? Y2 = F(-4, -2, 10); Y2(4) – ? Y2(-2) – ? Придумайте свою функцию, которая возвращает функцию.
  21. 21. Наследование/Полиморфизм • Шахматная фигура (позиция, проверка хода). • Пешка, Конь, Ладья – фигуры. • Позиция – наследуется. Ходы у разных фигур разные, поэтому проверка хода должна быть изменена (полиморфизм). Фигура = Пешка Фигура.проверитьХод(x,y) Фигура = Конь Фигура.проверитьХод(x,y)
  22. 22. Наследование/Полиморфизм Придумайте свой пример наследования с полиморфизмом.
  23. 23. Спасибо за внимание!

×