![Page 1: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/1.jpg)
Программирование глазами математика
Тюменцев Евгенийhwdtech.ru
![Page 2: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/2.jpg)
О себе
15 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста
11 лет разрабатываю ПО разработчик, архитектор, PM, руководство до 70 человек
Тюменцев Евгений
![Page 3: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/3.jpg)
Что такое абстракция?
Назовите, какие существенные характеристики были выделены для абстракций:1 2 3 4 5
![Page 4: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/4.jpg)
Определение абстракции
Пусть L – формальный язык, обозначим через множество всех подслов языка L, X – произвольное множество
Тогда F: X → называется абстракцией, элементы множества X – сущности, F(X) – абстракции.
![Page 5: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/5.jpg)
Магические константы
2 Vs int players = 2;
Построение абстракций отражает ход мыслей программиста. Плохой код – это, когда
тяжело восстановить ход мыслей того, кто его написал!
![Page 6: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/6.jpg)
и short int
ℤ→short int 65536 ≣ 0 (mod 65536) 65535 ≣ -1 (mod 65536) 65534 ≣ -2 (mod 65536) … 32768 ≣ -32768 (mod 65536)
![Page 7: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/7.jpg)
ℝ и doubleℝ → doublea*b/c≠a/c*b
![Page 8: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/8.jpg)
О подмножествах
Пусть F: X→ - . абстракция, Известно что Y⊂X Верно ли, что F(Y)⊂F(X)?
![Page 9: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/9.jpg)
О подмножествахВерно ли, что F(Y)⊂F(X)?
В общем случае: НЕТ!
Rob Martin The Liskov Substitution Principle
Класс Квадрат не является наследником от класса Прямоугольник
![Page 10: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/10.jpg)
Пример Роба Мартинаclass Rectangle { private double height; private double width; public double getHeight() { return height; } public void setHeight(int value) { height = value;} public double getWidth() { return width; } public void setWidth(int value) { width = value; } } …. void f(Rectangle r) { r.setHeight (5); r.setWidth (4); Debug.Assert(r.getHeight() * r.getWidth() == 20); }
class Square extends Rectangle { public void setHeight(int value) { super.setHeight(value); super.setWidth(value); } public void setWidth(int value) { super.setHeight(value); super.setWidth(value); } }
![Page 11: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/11.jpg)
Самое главное об абстракциях
F: X→ - абстракция
Наши представления о множестве сущностей X меняется, а код программы нет!
![Page 12: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/12.jpg)
Изоморфизм Карри-Говарда
Высказывания типы≅Доказательство функции≅
![Page 13: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/13.jpg)
1969 г. An Axiomatic Basis for Computer Programming1971 г. Procedures and Parameters: An Axiomatic Approach
1980 г. премия Тьюринга1990 г. Медаль “Пионер компьютерной техники” 2000 г. рыцарский титул за заслуги в области образования и компьютерной техники, премия Киото
Логика Хоара
Чарльз Хоар
![Page 14: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/14.jpg)
Логика Хоара часто противоречива!
и
Значит, что любое изменение в коде надо тестировать!
![Page 15: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/15.jpg)
Противоречивость: сильно страшно?
![Page 16: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/16.jpg)
Противоречивость: сильно страшно?
![Page 17: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/17.jpg)
Противоречивость: сильно страшно?
![Page 18: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/18.jpg)
Противоречивость: сильно страшно?
![Page 19: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/19.jpg)
Экспоненциальный рост затрат!
![Page 20: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/20.jpg)
Что делать?
ИтерацииНизкая степень связности
Небольшая вложенность процедурМодульное тестирование
РефакторингPlanning poker
AgileХорошо определенные требования
![Page 21: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/21.jpg)
Что делать?
SOLID
Доказаны математически (2014 год)Верны не только для ООП, но и для функционального, и процедурного
программирования!
![Page 22: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/22.jpg)
Если SOLID, то, скорее всего, нельзя
switchenumПриведение типовnew
![Page 23: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/23.jpg)
Нарушают инкапсуляцию
if
отсутствие полиморфизма (статического или динамического)
![Page 24: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/24.jpg)
Можно ли писать SOLID код?
HWdTech.DS 2013 год
Платформа для создания серверных приложений на Java
2015 год, совместно с 7bits
![Page 25: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/25.jpg)
Факты о логике Хоара
Система аксиом, содержащая if и while полна
При добавлении новой конструкции в язык, существующие аксиомы для goto делают
логику противоречивой.
![Page 26: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/26.jpg)
Факты о логике Хоара
Если использовать1. статическое связывание2. Рекурсию3. Вложенные процедуры4. Процедуры, принимающие в качестве параметров процедуры.5. Глобальные переменныето не существует полной системы аксиом.
![Page 27: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/27.jpg)
Зачем все это знать?
VS
![Page 28: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/28.jpg)
Приглашаем на спецкурс
Анатомия функционального и императивного программирования
http://hwdtech.ru/anatomy-of-formal-languarges-2015/
![Page 29: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика](https://reader035.vdocuments.site/reader035/viewer/2022070511/58a1c6ba1a28ab9d338b582b/html5/thumbnails/29.jpg)
Приглашаем на стажировку
3 человека
последующее трудоустройство
Стенд HWdTech во время перерыва