2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно...

42
Зачем программисту надо знать математику? HWdTech, LLC

Upload: happydev

Post on 28-Jul-2015

88 views

Category:

Education


0 download

TRANSCRIPT

Page 1: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Зачем программисту надо знать математику?

HWdTech, LLC

Page 2: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Тюменцев Евгений14 лет преподаю ИМИТ, ФКН ОмГУ ИТ-компании Школа программиста10 лет разрабатываю ПО разработчик, архитектор PM, в подчинении до 70 чел.

О себе

Page 3: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

О стажировках

2007

Page 4: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

О стажировках

60 : 0

Page 5: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

О стажировках

Page 6: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Что могут студенты?

Что было 4,5 с – время отклика страницы

70 тыс. ошибок на 1 млн. страниц

30 с - время поиска по тексту объявления

БД более 200 таблиц

Page 7: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Что могут студенты?

Что стало800 мс – время отклика страницы

< 1 ош. на 10 тыс. страниц

Однушка в нефтахМатрешка до 700 т.р.

Page 8: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Подробнее о проекте

http://www.slideshare.net/etyumentcev/7-42045466

Page 9: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

SOLID

5 архитектурных принципов

1988 г. Б. Мейер впервые описал

1995-96 г. Р. Мартин популяризировал, ввел термин SOLID

Page 10: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

The Open-Closed Principle

Программные объекты должны быть открыты для расширения, но в тоже время закрыты для

модификации.

Page 11: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Принцип подстановки Лисков

Функции, которые используют ссылки на объекты базовых

классов, должны использовать объекты производных классов,

ничего не зная о них.

Page 12: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Нарушают SOLID принципы

enumswitchif – else – ifоператоры приведения типаnew

Page 13: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Что-о-о? switch, new? Ты кто такой?

Page 14: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

ВыводимостьПусть L – множество формул, B – формула.Тогда L B⊦ , если ∃ B1, B2, …, Bn , что1.Bn – это B,2.Bi – это либо формула из L, ,либо аксиома , либо общезначимая формула либо формула полученная при помощи правила вывода

Page 15: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Логика Хоара

Page 16: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Об авторе1969 г. An Axiomatic Basis for Computer Programming1971 г. Procedures and Parameters: An Axiomatic Approach

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

Чарльз Хоар

Page 17: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Тройка Хоара

{pred} statement {post}

Пример: {x == 42} y=x+1; {y == 43 ^ x == 42}

Page 18: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиома пустого оператора

{P} skip {P}

Page 19: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиома присваивания

Пример: {(y+1)*3+w*(y+1+3) ==z} x=y+1;

{ x*3+ w*(x+3)==z}

{P[E/x]} x := E {P}

Page 20: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиомы оператора цикла

{P ^ B} S {P} {P} while B do S done {B’ ^ P} ╞

Page 21: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиомы условного оператора

{B ^ P} S {Q}, {B’ ^P} T {Q} {P} if B then S else T endif {Q}╞

{B ^ P} S {Q} {P} if B then S endif {Q}╞

Page 22: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиомы вывода

P1 → P, {P} S {Q}, Q → Q1 {P1} S {Q1}╞

P1 → P, {P} S {Q} {P1} S {Q}╞{P} S {Q}, Q → Q1 {P} S {Q1}╞

Page 23: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиома вывода согласуется с условным оператором

Пусть L = {{P} f {Q}}, B – предикат.

P^B→P (A3 исчисления высказываний){P^B}f{Q} (аксиома вывода){P}if (B) then f endif {Q} (аксиома условного оператора)

Page 24: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Аксиома композиции

{P} S {Q}, {Q} T {R} {P} S;T {R} ╞

Page 25: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

• Предусловия• Постусловия• Инварианты

Контрактное программирование

Page 26: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Модульные тесты

ArrangeAct

Assert

Page 27: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Рефакторинг

Page 28: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Повторное использование кода — методология проектирования компьютерных и других систем, заключающаяся в том, что система (компьютерная программа, программный модуль) частично либо полностью должна составляться из частей, написанных ранее компонентов и/или частей другой системы, и эти компоненты должны применяться более одного раза (если не в рамках одного проекта, то хотя бы разных).

Повторное использование

https://ru.wikipedia.org/wiki/Повторное_использование_кода

Page 29: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

А можно ли по-другому?

Выводимость прямо предписывает строить новые тройки из предыдущих!

Page 30: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Когда происходит повторное использование?

Если нужно внести изменение в существующее приложение, то мы пытаемся повторно использовать свой же собственный код, чтобы получить тоже приложение, но с

новой функциональностью.

Page 31: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Чем грозят правки кода?

B1, B2, …, A1

B3, A1, …, A2

B5, A2, …, A3

A2, B6, …, A4

A2, A4, …, A5

Page 32: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Чем грозят правки кода?

B1, B2, …, A1

B3, A1, …, A2

B5, A2, …, A3

A2, B6, …, A4

A2, A4, …, A5

Page 33: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Матрицыclass matrix { int size; double *body; public: matrix(int s): size(s) { body = new double[s*s]; } void transform() { … } double det() const { … }};

Page 34: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Матрицы: добавляем matrix()class matrix { int size; double *body; public: matrix(int s): size(s) { body = new double[s*s]; } void transform() { … } double det() const { … }};

class matrix {public: matrix(): size(0), body(0) { }};

Page 35: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Придется изменять методыclass matrix { int size; double *body; public: matrix(): size(0), body(0) { } matrix(int s): size(s) { body = new double[s*s]; }

void transform() { if(!body) throw exception(); … } double det() const { if(!body) throw exception(); … }};

Page 36: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Что случилосьИнвариант класса matrix: size > 0

Конструктор matrix() нарушил инвариант: size = 0

Предусловия методов изменились с size > 0 на size ≥ 0, но

{size ≥ 0} det {Q} не выводится из {size > 0} det {Q} , Следовательно надо изменять сами методы

Page 37: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Конструкторы по умолчаниюКонструктор должен устанавливать

инвариант классаКонструкторы по умолчанию часто этого не

делают

Стоит несколько раз подумать, прежде чем использовать конструктор по умолчанию

Page 38: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Как избавиться от switch?

Page 39: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Нерассказанные факты об императивном программировании

oopguide.ru

Разработка серверов и серверных приложений

actorsmodel.ru

Мы пишем книги

Page 40: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

с/к Разработка серверов и серверных приложений (все желающие)

Студентам 2 курса ИМИТ: выполнение курсовых работ

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

Приглашаю

Page 41: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Наш слоган

Программировать – хорошо, а хорошо программировать – еще лучше. Мы знаем как!

Page 42: 2015-04-12 07 Евгений Тюменцев. Зачем программисту нужно знать математику?

Тюменцев ЕвгенийДиректор HWdTech, LLC

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

slideshare.com/etyumentcevhwdtech.ru

СпасибоСпасибо