Приводится объяснение, почему для программистов не подходят системы тайм-менеджмента. Презентация шла как сопровождение к устному выступлению, поэтому сама по себе без записи доклада, возможно, будет непонятна.
Многие программисты прилагают много усилий, чтобы писать с их точки зрения качественный код. Однако в силу проблемы индукции, понимание хорошего кода целиком зависит от конкретного опыта программиста. Как следствие, один и тот же код для одного человека может казаться вершиной качества, а для другого - говнокодом. Как только Вы перестали видеть проблемы в коде - это не значит, что код стал качественным, это всего лишь значит, что уровень проблем вышел за рамки Вашего понимания.
Это презентация доклада с Омского ИТ-субботника. Ссылка на видео самого доклада http://www.youtube.com/watch?v=JzxJUrvoO1Y
Приводится объяснение, почему для программистов не подходят системы тайм-менеджмента. Презентация шла как сопровождение к устному выступлению, поэтому сама по себе без записи доклада, возможно, будет непонятна.
Многие программисты прилагают много усилий, чтобы писать с их точки зрения качественный код. Однако в силу проблемы индукции, понимание хорошего кода целиком зависит от конкретного опыта программиста. Как следствие, один и тот же код для одного человека может казаться вершиной качества, а для другого - говнокодом. Как только Вы перестали видеть проблемы в коде - это не значит, что код стал качественным, это всего лишь значит, что уровень проблем вышел за рамки Вашего понимания.
Это презентация доклада с Омского ИТ-субботника. Ссылка на видео самого доклада http://www.youtube.com/watch?v=JzxJUrvoO1Y
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
зачем нужны системы управления проектами и задачамиtiktokcoach
Почему сотрудники не выполняют поручения и как системы управления проектами и задачами могут помочь. Какие возникают трудности при внедрении этих систем и чем на самом деле оказываются возражения против внедрения
Машинное обучение в электронной коммерции — практика использования и подводны...Ontico
HighLoad++ 2017
Зал «Найроби+Касабланка», 7 ноября, 16:00
Тезисы:
http://www.highload.ru/2017/abstracts/2851.html
Анализ, проектирование, разработка и эксплуатация моделей предиктивной аналитики в Битрикс24.
В докладе расскажем, как мы создали несколько хайлоад-моделей для предсказания платных клиентов, потенциальной прибыли клиентов и клиентов, вероятно покидающих сервис. Поделимся опытом выбора алгоритмов, библиотек, тонкой настройки моделей в Spark MLib, фильтрации и обработки бигдаты на кластерах Spark в Amazon Web Services и всем тем, что необходимо для доведения "предиктивных" моделей до работающего при высоких нагрузках сервиса.
Самое важное в докладе - опыт доведения алгоритмов до прикладного бизнес-применения, тонкости и техники выжимания из данных самой ценной информации.
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...Mail.ru Group
Расскажу про различные полезные библиотеки и функции Python: от простых и известных, до специфичных и редких. Поделюсь тем, какие технологии мы используем при разработке, обучении и деплое наших моделей: что помогало улучшить качество, а что тормозило разработку.
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Yandex
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Первый Я.Субботник в Санкт-Петербурге
О докладе:
Как протестировать сложную, динамично развивающуюся и высоконагруженную систему? В докладе рассказывается о разработке технологий автоматизированного тестирования баннерокрутилки: о ключевых особенностях сервиса, о возникавших перед группой тестирования задачах, выборе рациональных подходов, о некоторых разработанных инструментах и текущих проблемах, находящихся в стадии решения.”
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
В докладе описан опыт построения нагруженной отказоустойчивой системы, использующей jsonb для хранения данных. В частности рассказываются механизмы, которые заменили join, транзакции, в том числе распределенные, репликации обычных SQL баз данных.
В докладе описываются основные проблемы, которые возникают при разработке проектов, и демонстрируется, что эти проблемы можно предсказать и решать с помощью математической теории, лежащей в основе языков программирования.
Большие данные: как могут навредить и ка могут помочь?etyumentcev
Большие данные — модная и быстро распространяющаяся концепция, которая позволяет нам извлекать разные полезные факты из окружающей нас информации. На конкретных примерах покажу как можно большие данные использовать, а также к каким проблемам может привести неверная интерпретация полученных результатов.
Дается математическое обоснование S.O.L.I.D принципов с помощью логики Хоара, из которого следует, что S.O.L.I.D верны не только для ООП, но и для статического полиморфизма, но и для императивного программирования вообще.
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
Работа с данными - это ключевая функция большинства приложений. Но работать с данными не так просто как кажется. С одной стороны, нам нужна производительность, с другой все best practices диктуют нам принцип persistence ignorance, с третьей еще и хочется писать красивый и понятный код. Как найти баланс между всем этим? Чем хороший IRepository отличается от плохого? Что такое CQRS и причем тут функциональное программирование? Об этом и пойдет речь, а так же немного граблей и личного опыта.
зачем нужны системы управления проектами и задачамиtiktokcoach
Почему сотрудники не выполняют поручения и как системы управления проектами и задачами могут помочь. Какие возникают трудности при внедрении этих систем и чем на самом деле оказываются возражения против внедрения
Машинное обучение в электронной коммерции — практика использования и подводны...Ontico
HighLoad++ 2017
Зал «Найроби+Касабланка», 7 ноября, 16:00
Тезисы:
http://www.highload.ru/2017/abstracts/2851.html
Анализ, проектирование, разработка и эксплуатация моделей предиктивной аналитики в Битрикс24.
В докладе расскажем, как мы создали несколько хайлоад-моделей для предсказания платных клиентов, потенциальной прибыли клиентов и клиентов, вероятно покидающих сервис. Поделимся опытом выбора алгоритмов, библиотек, тонкой настройки моделей в Spark MLib, фильтрации и обработки бигдаты на кластерах Spark в Amazon Web Services и всем тем, что необходимо для доведения "предиктивных" моделей до работающего при высоких нагрузках сервиса.
Самое важное в докладе - опыт доведения алгоритмов до прикладного бизнес-применения, тонкости и техники выжимания из данных самой ценной информации.
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...Mail.ru Group
Расскажу про различные полезные библиотеки и функции Python: от простых и известных, до специфичных и редких. Поделюсь тем, какие технологии мы используем при разработке, обучении и деплое наших моделей: что помогало улучшить качество, а что тормозило разработку.
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Yandex
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Первый Я.Субботник в Санкт-Петербурге
О докладе:
Как протестировать сложную, динамично развивающуюся и высоконагруженную систему? В докладе рассказывается о разработке технологий автоматизированного тестирования баннерокрутилки: о ключевых особенностях сервиса, о возникавших перед группой тестирования задачах, выборе рациональных подходов, о некоторых разработанных инструментах и текущих проблемах, находящихся в стадии решения.”
Техносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Об опыте применения jsonb в реальных проектах. Выступление на PgConf.Russia 2016etyumentcev
В докладе описан опыт построения нагруженной отказоустойчивой системы, использующей jsonb для хранения данных. В частности рассказываются механизмы, которые заменили join, транзакции, в том числе распределенные, репликации обычных SQL баз данных.
В докладе описываются основные проблемы, которые возникают при разработке проектов, и демонстрируется, что эти проблемы можно предсказать и решать с помощью математической теории, лежащей в основе языков программирования.
Большие данные: как могут навредить и ка могут помочь?etyumentcev
Большие данные — модная и быстро распространяющаяся концепция, которая позволяет нам извлекать разные полезные факты из окружающей нас информации. На конкретных примерах покажу как можно большие данные использовать, а также к каким проблемам может привести неверная интерпретация полученных результатов.
Дается математическое обоснование S.O.L.I.D принципов с помощью логики Хоара, из которого следует, что S.O.L.I.D верны не только для ООП, но и для статического полиморфизма, но и для императивного программирования вообще.
разработка серверов и серверных приложений лекция №4etyumentcev
В данной лекции рассмотрена минимальная реализация акторной модели, включающая
- отправку сообщений,
- создание новых акторов и смену поведения для приема следующего сообщения.
Исходный код реализации выложен на https://github.com/hwdtech/HWdTech.DS. Код на C#.
При разработке использовались библиотеки: Autofac, NuUnit, Moq
разработка серверов и серверных приложений лекция №3etyumentcev
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
разработка серверов и серверных приложений лекция №2etyumentcev
Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.
высокопроизводиетльные системы без доп затратetyumentcev
Нами был разработана библиотека HWdTech.DS для разработки многопоточных и распределенных приложений на платформе .Net. Эта библиотека использует модель акторов и позволяет существенно снизить требования к квалификации программистов при построении высоконагруженных приложений.
6. Правило 7±2
The magical Number Seven,
Plus or Minus Two
СЛЕДСТВИЕ: Чтобы удержать
в памяти большее количество
предметов, человек
разбивает их на логические
группы
Джордж Миллер
06 TIKTOKCOACH.RU
16. Определение ООП
Объектно-ориентированное
программирование - это
методология
программирования, основанная
на представлении программы в
виде совокупности объектов,
каждый из которых является
экземпляром определенного
класса, а классы образуют
иерархию наследования.
16 TIKTOKCOACH.RU
Гради Буч
17. Чем может помочь ООП?
Естественный язык
ООП
Слово
Правила
Жанры
Приемы
Класс
Синтаксис
Архитектура
Паттерны
Теорема Ферма
Война и Мир
Высокие нагрузки
Операционная система
17 TIKTOKCOACH.RU
18. ООП – это инструмент
Необходимое vs достаточное
18 TIKTOKCOACH.RU
23. Сюрпризы абстракций
Реальный объект
Абстракция
• Вещественное число
• Число с плавающей точкой
• Денежная единица
• Число с плавающей точкой
• Квадрат
• Класс квадрат
• Бизнес-операция
• Процедура
23 TIKTOKCOACH.RU
24. Группировка идей сверху вниз
Чтобы донести мысли до другого
человека, нужно убедиться, что
он группирует предметы так же
как и Вы
24 TIKTOKCOACH.RU
33. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
33 TIKTOKCOACH.RU
34. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
34 TIKTOKCOACH.RU
35. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
35 TIKTOKCOACH.RU
• switch
• If /else – if/else
36. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
36 TIKTOKCOACH.RU
• switch
• If /else – if/else
• Неполиморфная
операция
•
37. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
37 TIKTOKCOACH.RU
• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
38. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
38 TIKTOKCOACH.RU
• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
39. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
39 TIKTOKCOACH.RU
• switch
• If /else – if/else
• Неполиморфная
операция
• операторы
приведения типа
• enum
40. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
40 TIKTOKCOACH.RU
• …
• Магические
константы
41. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
41 TIKTOKCOACH.RU
• …
• Магические
константы
• Copy-paste
42. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
42 TIKTOKCOACH.RU
• …
• Магические
константы
• Copy-paste
• Public поля
• …
43. Открытые vs закрытые
• Полиморфная
операция
• Паттерны
• DI контейнеры
• Код, ген. по
метаописанию
43 TIKTOKCOACH.RU
• …
• Магические
константы
• Copy-paste
• Public поля
• Глобальные
переменные
51. Открытость: где предел?
Ассемблер –> if, for, switch
Алгоритмы -> процедуры
Процедуры -> классы
Собственный код -> библиотеки
Компьютер -> облако
4
51 TIKTOKCOACH.RU
62. Аксиомы и правила логики Хоара
Аксиома пустого оператора
{P} skip {P}
Аксиома присваивания
{P[E/x]} x := E {P}
Правило композиции
{P} S {Q}, {Q} T {R} ╞ {P} S;T {R}
Правило условного оператора
{B ^ P} S {Q}, {B’ ^P} T {Q} ╞ {P} if B then S else T endif {Q}
Правило вывода
P1 → P, {P} S {Q}, Q → Q1 ╞ {P1} S {Q1}
Правило оператора цикла
{P ^ B} S {P} ╞ {P} while B do S done {B’ ^ P}
62 TIKTOKCOACH.RU
63. Два подхода к параллельности
• CSP
• Модель акторов
63 TIKTOKCOACH.RU
64. Какой язык лучше?
На языке, который содержит
операцию ветвления и цикл,
можно реализовать любой
алгоритм
64 TIKTOKCOACH.RU
67. Следствия - 2
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение
67 TIKTOKCOACH.RU
68. Следствия - 3
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение
Техника RAII
68 TIKTOKCOACH.RU
69. Следствия - 4
Конструктор используется для инвариантов
класса
При нарушении условия выбрасывается
исключение
Техника RAII
Модульное тестирование
69 TIKTOKCOACH.RU
71. Контракт процедуры
• возможные типы входных данных и их значение;
• типы возвращаемых данных и их значение;
• условия возникновения исключений, их типы и
значения;
• присутствие побочного эффекта;
• (иногда) качественные характеристики, такие как
гарантии производительности, например,
временная сложность или сложность по памяти
71 TIKTOKCOACH.RU
75. Ключевые идеи
• Косвенный вызов процедуры
• Пред- и постусловия процедур
• Грубо: Абстракция ООП – это набор
процедур, предназначенных для
совместного использования
75 TIKTOKCOACH.RU
77. Контракт метода
• предусловия, которые могут быть
ослаблены (но не усилены) в подклассах;
• постусловия, которые могут быть усилены
(но не ослаблены) в подклассах;
77 TIKTOKCOACH.RU
78. Контракт метода
• предусловия, которые могут быть
ослаблены (но не усилены) в подклассах;
• постусловия, которые могут быть усилены
(но не ослаблены) в подклассах;
• инварианты, которые могут быть усилены
(но не ослаблены) в подклассах;
78 TIKTOKCOACH.RU
79. Принцип подстановки Лисков
Функции, которые используют
ссылки на базовые классы, должны
иметь возможность
использовать объекты
производных классов, не зная об
этом.
79 TIKTOKCOACH.RU
80. Нарушение принципа Лисков -1
void Draw(Shape s)
{
if (s is Point)
{
DrawPoint(s as Point);
}
else if (s is Circle)
{
DrawCircle(s as Circle);
}
else if(s is Square)
{
DrawSquare(s as Square);
}
}
80 TIKTOKCOACH.RU
81. Нарушение принципа Лисков -2
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);
}
81 TIKTOKCOACH.RU
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);
}
}
87. Принцип обращения зависимостей
Высокоуровневые компоненты не
должны зависеть от низкоуровневых
компонент. И те, и те должны
зависеть от абстракций.
Абстракции не должны зависеть от
деталей. Детали должны зависеть
от абстракций.
87 TIKTOKCOACH.RU
89. Лампочка - 1
class Lamp
{
public void TurnOn() {…}
public void TurnOff() {…}
}
89 TIKTOKCOACH.RU
class Button
{
private Lamp lamp;
public Button(Lamp lamp)
{this.lamp = lamp;}
public void Detect()
{
if(GetPhisicalState())
lamp.TurnOn();
else lamp.TurnOff();
}
}
90. Лампочка - 2
interface IButtonClient
{
void TurnOn();
void TurnOff();
}
class Button
{
private IButtonClient client;
public Button(IButtonClient client)
{ this.client = client; }
public void Detect()
{
if (GetPhisicalState()) client.TurnOn();
else client.TurnOff();
}
}
90 TIKTOKCOACH.RU
class Button
{
private Lamp lamp;
public Button(Lamp lamp)
{this.lamp = lamp;}
public void Detect()
{
if(GetPhisicalState())
lamp.TurnOn();
else lamp.TurnOff();
}
}
91. Следствия
• Сторонний код должен быть скрыт за
обертками, реализующими собственные
интерфейсы
• Обертки можно строить к старому
наследуемому коду
• Переписывание не всегда самый лучший
путь
91 TIKTOKCOACH.RU
92. DI-контейнеры
В коде
new Circle(3,4, 10)
new Rectangle(0, 0, 10, 10)
92 TIKTOKCOACH.RU
Фабрика
Shape Create(ShapeType sType)
{
switch(sType)
{
case Circle: return new Circle(3,4, 10);
case Rec: new Rectangle(0, 0, 10, 10);
}
}
94. Mock-объекты
Тестирование основанное на поведении –
• какие методы вызываются,
• в какой последовательности,
• какие результаты выдают
Mock-объект – прокси-объект, который
определяет прошел ли тестируемый
объект тест или нет
94 TIKTOKCOACH.RU
95. Дверь и таймер -1
abstract class Door
{
abstract void Lock();
abstract void Unlock();
abstract bool IsDoorOpen() ;
}
95 TIKTOKCOACH.RU
96. Дверь и таймер -2
abstract class Timer
{
abstract void Regsiter(int timeout, TimerClient
client);
}
abstract class TimerClient
{
abstract void TimeOut();
}
96 TIKTOKCOACH.RU
97. Дверь и таймер -3
Как правильно объединить две иерархи?
97 TIKTOKCOACH.RU
98. Дверь и таймер - 4
abstract class Door: TimerClient {}
abstract class TimedDoor: Door{}
98 TIKTOKCOACH.RU
99. Дверь и таймер - 5
class TimedDoorAdapter:
TimerClient
{
private TimedDoor
itsTimedDoor;
public void TimeOut(int
timeOutId)
{
itsTimedDoor.DoorTimeOut(ti
meOutId);
}
}
99 TIKTOKCOACH.RU
class TimedDoor : Door
{
public virtual void
DoorTimeOut(int timeOutId);
};
107. Модульность
1. Какой наилучший критерий для
разбиения на модули?
2. Какие отношения существуют
между модулями и каким
принципам они подчиняются?
3. Что первично класс или
модуль?
4. Физическое представление
модулей?
107 TIKTOKCOACH.RU
109. Повторное использование
Классы в пакете повторно
используются совместно. То есть,
если хотя бы один класс пакета
повторно используется, то повторно
используются и все остальные.
109 TIKTOKCOACH.RU
110. Обобщенная замкнутость
Классы в пакете должны быть
замкнуты от одних и тех же
изменений. Изменение, влияющее на
пакет, влияет на все классы этого
пакета.
110 TIKTOKCOACH.RU
115. Метрика нестабильности I
Ca – зависимые классы за пределами пакета
Ce – зависисмые классы внутри пакета
𝐶𝑒
𝐼=
𝐶𝑒 + 𝐶𝑎
115 TIKTOKCOACH.RU
116. Стабильные абстракции
Пакеты, которые максимально
стабильны, должны быть
абстрактными. Нестабильными
пакеты должны быть максимально
конкретными.
116 TIKTOKCOACH.RU