30
Программирование глазами математика Тюменцев Евгений hwdtech.ru

04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Embed Size (px)

Citation preview

Page 1: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Программирование глазами математика

Тюменцев Евгенийhwdtech.ru

Page 2: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

О себе

15 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста

11 лет разрабатываю ПО разработчик, архитектор, PM, руководство до 70 человек

Тюменцев Евгений

Page 3: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Что такое абстракция?

Назовите, какие существенные характеристики были выделены для абстракций:1 2 3 4 5

Page 4: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Определение абстракции

Пусть L – формальный язык, обозначим через множество всех подслов языка L, X – произвольное множество

Тогда F: X → называется абстракцией, элементы множества X – сущности, F(X) – абстракции.

Page 5: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Магические константы

2 Vs int players = 2;

Построение абстракций отражает ход мыслей программиста. Плохой код – это, когда

тяжело восстановить ход мыслей того, кто его написал!

Page 6: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

и 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. Евгений Тюменцев. Программирование глазами математика

ℝ и doubleℝ → doublea*b/c≠a/c*b

Page 8: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

О подмножествах

Пусть F: X→ - . абстракция, Известно что Y⊂X Верно ли, что F(Y)⊂F(X)?

Page 9: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

О подмножествахВерно ли, что F(Y)⊂F(X)?

В общем случае: НЕТ!

Rob Martin The Liskov Substitution Principle

Класс Квадрат не является наследником от класса Прямоугольник

Page 10: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Пример Роба Мартина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. Евгений Тюменцев. Программирование глазами математика

Самое главное об абстракциях

F: X→ - абстракция

Наши представления о множестве сущностей X меняется, а код программы нет!

Page 12: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Изоморфизм Карри-Говарда

Высказывания типы≅Доказательство функции≅

Page 13: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

1969 г. An Axiomatic Basis for Computer Programming1971 г. Procedures and Parameters: An Axiomatic Approach

1980 г. премия Тьюринга1990 г. Медаль “Пионер компьютерной техники” 2000 г. рыцарский титул за заслуги в области образования и компьютерной техники, премия Киото

Логика Хоара

Чарльз Хоар

Page 14: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Логика Хоара часто противоречива!

и

Значит, что любое изменение в коде надо тестировать!

Page 15: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Противоречивость: сильно страшно?

Page 16: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Противоречивость: сильно страшно?

Page 17: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Противоречивость: сильно страшно?

Page 18: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Противоречивость: сильно страшно?

Page 19: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Экспоненциальный рост затрат!

Page 20: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Что делать?

ИтерацииНизкая степень связности

Небольшая вложенность процедурМодульное тестирование

РефакторингPlanning poker

AgileХорошо определенные требования

Page 21: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Что делать?

SOLID

Доказаны математически (2014 год)Верны не только для ООП, но и для функционального, и процедурного

программирования!

Page 22: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Если SOLID, то, скорее всего, нельзя

switchenumПриведение типовnew

Page 23: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Нарушают инкапсуляцию

if

отсутствие полиморфизма (статического или динамического)

Page 24: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Можно ли писать SOLID код?

HWdTech.DS 2013 год

Платформа для создания серверных приложений на Java

2015 год, совместно с 7bits

Page 25: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Факты о логике Хоара

Система аксиом, содержащая if и while полна

При добавлении новой конструкции в язык, существующие аксиомы для goto делают

логику противоречивой.

Page 26: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Факты о логике Хоара

Если использовать1. статическое связывание2. Рекурсию3. Вложенные процедуры4. Процедуры, принимающие в качестве параметров процедуры.5. Глобальные переменныето не существует полной системы аксиом.

Page 27: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Зачем все это знать?

VS

Page 28: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Приглашаем на спецкурс

Анатомия функционального и императивного программирования

http://hwdtech.ru/anatomy-of-formal-languarges-2015/

Page 29: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

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

3 человека

последующее трудоустройство

Стенд HWdTech во время перерыва

Page 30: 04 HappyDev-lite-2015 autumn. Евгений Тюменцев. Программирование глазами математика

Вопросы?

Тюменцев Евгений

Звоните: +7 913 150 22 04Пишите: [email protected]

Hwdtech.ru