0
Разработка
веб-сервисов

Беседа 7: Программирование или борьба со сложностью
План занятия
 Выбор инструментария
 Борьба со сложностью

 Как делать нужно (паттерны)
 Как делать не нужно (антипатте...
Выбор языка программирования
Выбор языка. Плюсы

Если язык хорошо знаком
Выше производительность (до 30%)

Если использует...
Выбор языка программирования
Выбор языка. Плюсы

Если используется распространенный язык
Больше выбор, ниже затраты

Если ...
Выбор языка программирования
Выбор языка

 Знакомые языки
 Высокоуровневые языки

 Распространенные языки
 Специализир...
Выбор языка программирования
Выбор языка. Минусы

 На фортране можно писать на любом языке
 Нужно знать нюансы – возможн...
Выбор языка программирования
Выбор языка. Примеры ограничений

 Проверка целочисленности деления
 Проверка на переполнен...
Выбор языка программирования
Выбор языка. Примеры борьбы с ограничениями

Равенство двух чисел с плавающей точкой:
Использ...
Сложность
Программирование — это борьба со сложностью.

Хороший программист — не только тот, кто много
знает и умеет, но и...
Сложность
Желательные характеристики системы

 Минимальная сложность
 Простота сопровождения

 Слабая связность компоне...
Сложность
Борьба со сложностью

 Архитектура
 Кодирование

 Сопровождение

11
Сложность
Борьба со сложностью. Архитектура

 Разделение системы на подсистемы
 Избегайте глубокой иерархии классов

 Д...
Сложность
Борьба со сложностью. Кодирование

 По максимуму избегайте глобальных данных
 Избегайте большого числа вложенн...
Сложность
Борьба со сложностью. Сопровождение

 Придерживайтесь стандарта наименований
 Форматируйте код

 Комментируйт...
Борьба со сложностью
Зачем нужны стандарты?

 Ускоряют изучение кода
 Компенсируют недостатки языка

 Уменьшают дублиро...
Борьба со сложностью
Когда нужны стандарты?

 Несколько программистов
 Большое количество кода

 Длительное использован...
Борьба со сложностью
Примеры стандартов

Описание назначения метода или переменной
usrId = Reports.GetOwnerId( obj );

17
Борьба со сложностью
Примеры стандартов

Не используйте названий, которые не отражают суть
$tt = mainObj.make($data);

18
Борьба со сложностью
Примеры стандартов

Различия между названием переменной и метода
usrId = Reports.GetOwnerId( obj );

...
Борьба со сложностью
Примеры стандартов

Свои наименования для переменных, констант и типов
set var_data

= in_usrid;

set...
Борьба со сложностью
Примеры стандартов

Форматируйте имена для упрощения чтения
NOONEKNOWSWHATITMEANS
vs
noone_knows_what...
Борьба со сложностью
Шаблоны проектирования

Шаблон (паттерн) — конструкция (набор методов или
практик), описывающая решен...
Шаблоны проектирования
Плюсы шаблонов

 Снижают сложность, предоставляя информацию о
коде
конечно, если другие программис...
Шаблоны проектирования
Минусы шаблонов

 Иногда большие накладные ресурсы на адаптацию
 Использование шаблонов ради шабл...
Шаблоны проектирования
Примеры шаблонов

Основные
 Адаптер — преобразование интерфейса в другой интерфейс
 Декоратор — р...
Шаблоны проектирования
Примеры шаблонов

Параллельное программирование
 Обмен сообщениями — компоненты могут обмениваться...
Шаблоны проектирования
Примеры шаблонов

Другие примеры
 MVC — Model + View + Controller
 DAO — Data Access Object

27
Шаблоны проектирования
Антипаттерны

Антипаттерн — описание наиболее частых проблем в
проектировании, разработке и управле...
Шаблоны проектирования
Примеры антипаттернов
 Раздувание ПО — разрешение использования
последующими версиями программы бо...
Шаблоны проектирования
Примеры антипаттернов
 Гонка (Race Condition) — непредвидение наступления
событий в порядке, отлич...
Шаблоны проектирования
Примеры антипаттернов
 Таинственный код — неиспользование мнемонически
понятного кода
 Жесткое ко...
Шаблоны проектирования
Примеры антипаттернов
 Программирование методом Copy-Paste
 Изобретение колеса
 Изобретение квад...
Шаблоны проектирования
Примеры антипаттернов

Организационные
 Единственный знающий человек
 Рыцарь на белом коне — попы...
Резюме
 Выбирайте инструменты, а не язык
 Боритесь со сложностью

 Используйте стандартные решения проблем
 Избегайте ...
Вопросы?
Максим Бабич
tpark@maxbabich.ru
+7 916 9415275
Upcoming SlideShare
Loading in...5
×

Разработка веб-сервисов осень 2013 лекция 7

128

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
128
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Разработка веб-сервисов осень 2013 лекция 7"

  1. 1. Разработка веб-сервисов Беседа 7: Программирование или борьба со сложностью
  2. 2. План занятия  Выбор инструментария  Борьба со сложностью  Как делать нужно (паттерны)  Как делать не нужно (антипаттерны) 2
  3. 3. Выбор языка программирования Выбор языка. Плюсы Если язык хорошо знаком Выше производительность (до 30%) Если используется высокоуровневый язык Снова выше производительность 3
  4. 4. Выбор языка программирования Выбор языка. Плюсы Если используется распространенный язык Больше выбор, ниже затраты Если используется специализированный язык Более удобные инструменты, выше производительность 4
  5. 5. Выбор языка программирования Выбор языка  Знакомые языки  Высокоуровневые языки  Распространенные языки  Специализированные языки там, где нужно 5
  6. 6. Выбор языка программирования Выбор языка. Минусы  На фортране можно писать на любом языке  Нужно знать нюансы – возможности и ограничения 6
  7. 7. Выбор языка программирования Выбор языка. Примеры ограничений  Проверка целочисленности деления  Проверка на переполнение целого числа  Равенство двух чисел с плавающей точкой  Ошибки округления 7
  8. 8. Выбор языка программирования Выбор языка. Примеры борьбы с ограничениями Равенство двух чисел с плавающей точкой: Используйте допустимую точность Ошибки округления Используйте свои методы или просто целые числа 8
  9. 9. Сложность Программирование — это борьба со сложностью. Хороший программист — не только тот, кто много знает и умеет, но и тот, чей код прост для понимания и корректно решает проблему 9
  10. 10. Сложность Желательные характеристики системы  Минимальная сложность  Простота сопровождения  Слабая связность компонентов  Повторное использование кода  Минимализм и полнота  Стандартизация подходов 10
  11. 11. Сложность Борьба со сложностью  Архитектура  Кодирование  Сопровождение 11
  12. 12. Сложность Борьба со сложностью. Архитектура  Разделение системы на подсистемы  Избегайте глубокой иерархии классов  Делайте классы и методы короткими 12
  13. 13. Сложность Борьба со сложностью. Кодирование  По максимуму избегайте глобальных данных  Избегайте большого числа вложенных циклов  Определите стратегию отлова ошибок  Не используйте несколько парадигм одновременно 13
  14. 14. Сложность Борьба со сложностью. Сопровождение  Придерживайтесь стандарта наименований  Форматируйте код  Комментируйте код  Избегайте «религиозных войн» 14
  15. 15. Борьба со сложностью Зачем нужны стандарты?  Ускоряют изучение кода  Компенсируют недостатки языка  Уменьшают дублирование названий 15
  16. 16. Борьба со сложностью Когда нужны стандарты?  Несколько программистов  Большое количество кода  Длительное использование кода 16
  17. 17. Борьба со сложностью Примеры стандартов Описание назначения метода или переменной usrId = Reports.GetOwnerId( obj ); 17
  18. 18. Борьба со сложностью Примеры стандартов Не используйте названий, которые не отражают суть $tt = mainObj.make($data); 18
  19. 19. Борьба со сложностью Примеры стандартов Различия между названием переменной и метода usrId = Reports.GetOwnerId( obj ); 19
  20. 20. Борьба со сложностью Примеры стандартов Свои наименования для переменных, констант и типов set var_data = in_usrid; set t_user.min_age = const_min_age; 20
  21. 21. Борьба со сложностью Примеры стандартов Форматируйте имена для упрощения чтения NOONEKNOWSWHATITMEANS vs noone_knows_what_it_means 21
  22. 22. Борьба со сложностью Шаблоны проектирования Шаблон (паттерн) — конструкция (набор методов или практик), описывающая решение типовой проблемы 22
  23. 23. Шаблоны проектирования Плюсы шаблонов  Снижают сложность, предоставляя информацию о коде конечно, если другие программисты с ними знакомы  Снижают число ошибок за счет стандартов  Ускоряют проектирование 23
  24. 24. Шаблоны проектирования Минусы шаблонов  Иногда большие накладные ресурсы на адаптацию  Использование шаблонов ради шаблонов 24
  25. 25. Шаблоны проектирования Примеры шаблонов Основные  Адаптер — преобразование интерфейса в другой интерфейс  Декоратор — расширение функциональности класса без наследования  Одиночка (Singleton) — класс только с одним экземпляром 25
  26. 26. Шаблоны проектирования Примеры шаблонов Параллельное программирование  Обмен сообщениями — компоненты могут обмениваться информацией  Блокировка (Lock) — использование ресурса в эксклюзивном режиме  Read-write lock — раздельное чтение, эксклюзивная запись 26
  27. 27. Шаблоны проектирования Примеры шаблонов Другие примеры  MVC — Model + View + Controller  DAO — Data Access Object 27
  28. 28. Шаблоны проектирования Антипаттерны Антипаттерн — описание наиболее частых проблем в проектировании, разработке и управлении 28
  29. 29. Шаблоны проектирования Примеры антипаттернов  Раздувание ПО — разрешение использования последующими версиями программы большего числа ресурсов  Бензиновая фабрика — излишнее переусложнение архитектуры  Ненужная сложность — чрезмерная сложность в решении проблемы 29
  30. 30. Шаблоны проектирования Примеры антипаттернов  Гонка (Race Condition) — непредвидение наступления событий в порядке, отличном от ожидаемого  Божественный объект — чрезмерная концентрация функций в одном объекте  Лодочный якорь — сохранение более не используемого кода 30
  31. 31. Шаблоны проектирования Примеры антипаттернов  Таинственный код — неиспользование мнемонически понятного кода  Жесткое кодирование (Hard Code) — жесткие рамки использования кода  Мягкое кодирование — настраивается всё, что угодно. Программирование на конфигах  Волшебные числа — включение в алгоритмы чисел без объяснения смысла 31
  32. 32. Шаблоны проектирования Примеры антипаттернов  Программирование методом Copy-Paste  Изобретение колеса  Изобретение квадратного колеса  Коммит-убийца — внесение кода в репозиторий без тестирование влияния на другие части кода  Преждевременная оптимизация 32
  33. 33. Шаблоны проектирования Примеры антипаттернов Организационные  Единственный знающий человек  Рыцарь на белом коне — попытки починить без информирования что сделал и почему  Управление грибами — недостаточное информирование сотрудников о целях задачи и способе решения 33
  34. 34. Резюме  Выбирайте инструменты, а не язык  Боритесь со сложностью  Используйте стандартные решения проблем  Избегайте неправильных подходов 34
  35. 35. Вопросы? Максим Бабич tpark@maxbabich.ru +7 916 9415275
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×