SlideShare a Scribd company logo
Программирование глазами
математика
Тюменцев Евгений
hwdtech.ru
О себе
15 лет преподаю
ИМИТ, ФКН ОмГУ
ИТ-компании
Школа программиста
11 лет разрабатываю ПО
разработчик, архитектор,
PM, руководство до 70
человек
Тюменцев Евгений
Что такое абстракция?
Назовите, какие существенные
характеристики были выделены
для абстракций:
1 2 3 4 5
Определение абстракции
Пусть L – формальный язык, обозначим через
𝐿 множество всех подслов языка L, X –
произвольное множество
Тогда F: X → 𝐿 называется абстракцией,
элементы множества X – сущности, F(X) –
абстракции.
Магические константы
2 Vs int players = 2;
Построение абстракций отражает ход мыслей
программиста. Плохой код – это, когда
тяжело восстановить ход мыслей того, кто его
написал!
ℤ216 и short int
ℤ→short int
65536 ≣ 0 (mod 65536)
65535 ≣ -1 (mod 65536)
65534 ≣ -2 (mod 65536)
…
32768 ≣ -32768 (mod 65536)
ℝ и double
ℝ → double
a*b/c≠a/c*b
О подмножествах
Пусть F: X→ 𝐿 - абстракция.
Известно, что Y⊂X
Верно ли, что F(Y)⊂F(X)?
О подмножествах
Верно ли, что F(Y)⊂F(X)?
В общем случае: НЕТ!
Rob Martin The Liskov Substitution Principle
Класс Квадрат не является наследником от
класса Прямоугольник
Пример Роба Мартина
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);
}
}
Самое главное об абстракциях
F: X→ 𝐿 - абстракция
Наши представления о множестве сущностей
X меняется, а код программы нет!
Изоморфизм Карри-Говарда
Высказывания ≅ типы
Доказательство ≅ функции
1969 г. An Axiomatic Basis for
Computer Programming
1971 г. Procedures and Parameters:
An Axiomatic Approach
1980 г. премия Тьюринга
1990 г. Медаль “Пионер
компьютерной техники”
2000 г. рыцарский титул за заслуги в
области образования и
компьютерной техники, премия
Киото
Логика Хоара
Чарльз Хоар
Логика Хоара часто противоречива!
⊢ 𝐿 𝞿 и ⊢ 𝐿 `𝞿
Значит, что любое изменение в коде надо
тестировать!
Противоречивость: сильно страшно?
Противоречивость: сильно страшно?
Противоречивость: сильно страшно?
Противоречивость: сильно страшно?
Экспоненциальный рост затрат!
Что делать?
Итерации
Низкая степень связности
Небольшая вложенность процедур
Модульное тестирование
Рефакторинг
Planning poker
Agile
Хорошо определенные требования
Что делать?
SOLID
Доказаны математически (2014 год)
Верны не только для ООП, но и для
функционального, и процедурного
программирования!
Если SOLID, то, скорее всего, нельзя
switch
enum
Приведение типов
new
Нарушают инкапсуляцию
if
отсутствие полиморфизма
(статического или динамического)
Можно ли писать SOLID код?
HWdTech.DS
2013 год
smartactors
2015 год, совместно с 7bits
Факты о логике Хоара
Система аксиом, содержащая if и while полна
При добавлении новой конструкции в язык,
существующие аксиомы для goto делают
логику противоречивой.
Факты о логике Хоара
Если использовать
1. статическое связывание
2. Рекурсию
3. Вложенные процедуры
4. Процедуры, принимающие в качестве
параметров процедуры.
5. Глобальные переменные
то не существует полной системы аксиом.
Зачем все это знать?
VS
Приглашаем на спецкурс
Анатомия функционального
и императивного программирования
http://hwdtech.ru/anatomy-of-formal-
languarges-2015/
Приглашаем на стажировку
3 человека
последующее трудоустройство
Стенд HWdTech во время перерыва
Вопросы?
Тюменцев Евгений
Звоните: +7 913 150 22 04
Пишите: etyumentcev@hwdtech.ru
Hwdtech.ru

More Related Content

Viewers also liked

Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?
etyumentcev
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистов
etyumentcev
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
etyumentcev
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
etyumentcev
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
etyumentcev
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
etyumentcev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
etyumentcev
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
etyumentcev
 

Viewers also liked (9)

Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?Большие данные: как могут навредить и ка могут помочь?
Большие данные: как могут навредить и ка могут помочь?
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
матлогика для программистов
матлогика для программистовматлогика для программистов
матлогика для программистов
 
Платформа SmartActors
Платформа SmartActorsПлатформа SmartActors
Платформа SmartActors
 
разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4разработка серверов и серверных приложений лекция №4
разработка серверов и серверных приложений лекция №4
 
Как 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проектКак 7 студентов и филолог делали сложный проект
Как 7 студентов и филолог делали сложный проект
 
Математическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принциповМатематическое обоснование S.O.L.I.D принципов
Математическое обоснование S.O.L.I.D принципов
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016
 

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

Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
ScrumTrek
 
Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзе
Aleksandr Tarasov
 
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Yauheni Akhotnikau
 
Развитие интерфейсов: из прошлого в будущее
Развитие интерфейсов: из прошлого в будущееРазвитие интерфейсов: из прошлого в будущее
Развитие интерфейсов: из прошлого в будущееAstra Media Group, Russia
 
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ScalaNsk
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
Nikolay Grebenshikov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерии
Anatoly Levenchuk
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite
 
"Война типов: сильные против слабых" Виктор Полищук
"Война типов: сильные против слабых" Виктор Полищук"Война типов: сильные против слабых" Виктор Полищук
"Война типов: сильные против слабых" Виктор Полищук
Fwdays
 
Ментальное программирование / Кирилл Мокевнин (Undev)
Ментальное программирование / Кирилл Мокевнин (Undev)Ментальное программирование / Кирилл Мокевнин (Undev)
Ментальное программирование / Кирилл Мокевнин (Undev)Ontico
 
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный PythonWebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2Computer Science Club
 
Artificial Intelligence (lecture for schoolchildren) [rus]
Artificial Intelligence (lecture for schoolchildren) [rus]Artificial Intelligence (lecture for schoolchildren) [rus]
Artificial Intelligence (lecture for schoolchildren) [rus]
Grigory Sapunov
 
А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.
Anatoly Levenchuk
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектирования
Anatoly Levenchuk
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеDaria Oreshkina
 
Обзор современного состояния области алгоритмов и структур данных
Обзор современного состояния области алгоритмов и структур данныхОбзор современного состояния области алгоритмов и структур данных
Обзор современного состояния области алгоритмов и структур данных
maxkalachev
 

Similar to Программирование глазами математика (20)

Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
Кирилл Толкачев, Александр Тарасов, Хипстеры в энтерпрайзе. Шагаем в ногу со ...
 
Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзе
 
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
 
Развитие интерфейсов: из прошлого в будущее
Развитие интерфейсов: из прошлого в будущееРазвитие интерфейсов: из прошлого в будущее
Развитие интерфейсов: из прошлого в будущее
 
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
ООП в Scala: выход из застоя (ScalaNsk meeting #5, 22.11.2013)
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Моделеориентированность в инженерии
Моделеориентированность в инженерииМоделеориентированность в инженерии
Моделеориентированность в инженерии
 
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
HappyDev-lite-2016-весна 05 Евгений Тюменцев. Не все технологии одинаково по...
 
"Война типов: сильные против слабых" Виктор Полищук
"Война типов: сильные против слабых" Виктор Полищук"Война типов: сильные против слабых" Виктор Полищук
"Война типов: сильные против слабых" Виктор Полищук
 
Ментальное программирование / Кирилл Мокевнин (Undev)
Ментальное программирование / Кирилл Мокевнин (Undev)Ментальное программирование / Кирилл Мокевнин (Undev)
Ментальное программирование / Кирилл Мокевнин (Undev)
 
WebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный PythonWebCamp 2016: Python.Максим Климишин.Типизированный Python
WebCamp 2016: Python.Максим Климишин.Типизированный Python
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
 
Artificial Intelligence (lecture for schoolchildren) [rus]
Artificial Intelligence (lecture for schoolchildren) [rus]Artificial Intelligence (lecture for schoolchildren) [rus]
Artificial Intelligence (lecture for schoolchildren) [rus]
 
А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.А.Левенчук -- инженерное образование: итоги 2014 и планы.
А.Левенчук -- инженерное образование: итоги 2014 и планы.
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
А.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектированияА.Левенчук -- Будущее проектирования
А.Левенчук -- Будущее проектирования
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программирование
 
Обзор современного состояния области алгоритмов и структур данных
Обзор современного состояния области алгоритмов и структур данныхОбзор современного состояния области алгоритмов и структур данных
Обзор современного состояния области алгоритмов и структур данных
 

More from etyumentcev

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
etyumentcev
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
etyumentcev
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1etyumentcev
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
etyumentcev
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
etyumentcev
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sqletyumentcev
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджмент
etyumentcev
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011etyumentcev
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011etyumentcev
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011etyumentcev
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011etyumentcev
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011etyumentcev
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011etyumentcev
 
ук 03.005.02 2011
ук 03.005.02 2011ук 03.005.02 2011
ук 03.005.02 2011etyumentcev
 
управление задачами
управление задачамиуправление задачами
управление задачамиetyumentcev
 

More from etyumentcev (20)

разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1разработка серверов и серверных приложений лекция №1
разработка серверов и серверных приложений лекция №1
 
высокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затратвысокопроизводиетльные системы без доп затрат
высокопроизводиетльные системы без доп затрат
 
зачем нужны системы управления проектами
зачем нужны системы управления проектамизачем нужны системы управления проектами
зачем нужны системы управления проектами
 
введение в Sql
введение в Sqlвведение в Sql
введение в Sql
 
почему буксует тайм менеджмент
почему буксует тайм менеджментпочему буксует тайм менеджмент
почему буксует тайм менеджмент
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011
 
ук 03.010.01 2011
ук 03.010.01 2011ук 03.010.01 2011
ук 03.010.01 2011
 
ук 03.009.01 2011
ук 03.009.01 2011ук 03.009.01 2011
ук 03.009.01 2011
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
ук 03.006.02 2011
ук 03.006.02 2011ук 03.006.02 2011
ук 03.006.02 2011
 
ук 03.005.03 2011
ук 03.005.03 2011ук 03.005.03 2011
ук 03.005.03 2011
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
ук 03.002.01 2011
ук 03.002.01 2011ук 03.002.01 2011
ук 03.002.01 2011
 
ук 03.005.02 2011
ук 03.005.02 2011ук 03.005.02 2011
ук 03.005.02 2011
 
трпо
трпотрпо
трпо
 
ооп
оопооп
ооп
 
управление задачами
управление задачамиуправление задачами
управление задачами
 

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