$30 off During Our Annual Pro Sale. View Details »

Stuff That Works

Stuff That Works

A big rant about stuff that works in software engineering

Sergey Arkhipov

December 10, 2016
Tweet

More Decks by Sergey Arkhipov

Other Decks in Programming

Transcript

  1. Вещи, которые работают
    Архипов Сергей

    View Slide

  2. 1
    0

    View Slide

  3. lim
    n→0
    1
    n
    =∞

    View Slide

  4. lim
    n→0
    n2
    n
    =0

    View Slide

  5. x
    0
    ≡lim
    n→0
    x
    n

    View Slide

  6. Чему учат в университете
    1. Нужно создавать иерархии
    2. Инкаспуляция, наследование,
    полиморфизм
    3. CMMI 3, ISO 9001
    4. TDD
    5. …
    6. PROFIT!

    View Slide

  7. Жизненный цикл проекта
    ТЗ Общий
    каркас
    Очень быстрая
    разработка
    Быстрая
    разработка,
    первые демо
    и фидбек
    Спокойная
    доработка
    Стабилизация

    View Slide

  8. Что есть в жизни
    1. Конечный продукт плохо подходит под
    начальное ТЗ
    2. Асапчики
    3. Легаси код
    4. Костыль дривен девелопмент
    5. Бизнес лихорадит
    6. У каждого свое мнение, как правильно
    7. …

    View Slide

  9. Жизненный цикл проекта
    Поддержка, развитие
    Р В

    View Slide

  10. Что есть в жизни
    1. Конечный продукт плохо подходит под
    начальное ТЗ
    2. Асапчики
    3. Легаси код
    4. Костыль дривен девелопмент
    5. Бизнес лихорадит
    6. У каждого свое мнение, как правильно
    7. …

    View Slide

  11. Что есть в жизни
    1. Конечный продукт плохо подходит под
    начальное ТЗ
    2. Асапчики
    3. Легаси код
    4. Костыль дривен девелопмент
    5. Бизнес лихорадит
    6. У каждого свое мнение, как правильно
    7. …

    View Slide

  12. Чему учат в университете
    1. Нужно создавать иерархии
    2. Инкаспуляция, наследование,
    полиморфизм
    3. CMMI 3, ISO 9001
    4. TDD
    5. …
    6. PROFIT!

    View Slide

  13. Причины проблем на проекте
    Люди
    Технологии

    View Slide

  14. Где, блять, люди?

    View Slide

  15. Нормально делай —
    нормально будет!

    View Slide

  16. Жизненный цикл проекта
    Поддержка, развитие
    Р В

    View Slide

  17. Правда, которую никто не слушает
    1. Нормальных семейТЗ не бывает;
    2. Пишите просто. Сложно всегда успеете;
    3. Легко усложнить, сложно упростить;
    4. Стремитесь разорвать код на независимые
    куски;
    5. Относитесь к другим так, как хотите, чтобы
    относились к вам;
    6. Пишите ясные и понятные тесты

    View Slide

  18. Мировоззрение

    View Slide

  19. View Slide

  20. Ментальная карта
    проекта

    View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. Что я хотел этим сказать
    1. Большой ООП проект редко сужается;
    2. Мы можем держать только небольшой
    кусок контекста в голове;
    3. Чем сильнее отдельный кусок связан
    (coupled) с другими кусочками, тем сложнее
    восстановить в голове нужный контекст;
    4. Для любого нового человека в команде
    ваш прекрасно написанный проект
    выглядит комком плохо продуманных
    зависимостей.

    View Slide

  39. Это не работает
    1. Чем дальше — тем сложнее расширять
    проект;
    2. Вы не умнее жизни;
    3. Производительность программистов не
    должна снижаться со временем.

    View Slide

  40. Что работает
    1. Пишите абстракции только тогда, когда
    становится сложно писать реализации;
    2. Идеи из FP: иммутабельность и чистота;
    3. Unix — платформа, а не просто способ
    пускать программы;
    4. Рвите монолиты на отдельные программы;
    5. Минимизируйте зависимости;
    6. Сопротивляйтесь изменениям
    7. Однопоточность > threads > processes >
    async > distributed;

    View Slide

  41. Библиотеки

    View Slide

  42. О библиотеках
    1. Максимально используйте стандартную
    библиотеку;
    2. Используйте такие библиотеки,
    использование которых стоит убитого
    вечера и нервов;
    3. Используйте проверенные библиотеки;
    4. Не надейтесь, что кто-то починит вам баг;
    5. Не верьте бенчмаркам;
    6. Лучше изобретите маленький велосипед,
    тащите библиотеку от безысходности.

    View Slide

  43. Суббота. Вечер.
    День рождения второй
    половины.
    Въебал продакшн.

    View Slide

  44. Юниттесты

    View Slide

  45. Юниттесты
    1. Проверка работоспособности — отчасти.
    2. Документация — вряд ли;
    3. Юниттесты — трассировка контекста,
    программное закрепление дампа из
    головы;
    4. Покрывайте код максимальным
    количеством простых тестов: так лучше
    восстанавливается контекст.

    View Slide

  46. Юниттесты
    def test_something(fix1, fix2, ...):
    action1
    action2
    ...
    assert1
    ...

    View Slide

  47. Комментарии

    View Slide

  48. Комментарии
    1. Комментарии в жизни не работают.
    2. Документация — работает. Пишите сразу
    короткую документацию.
    3. Если тяжело описать что-то — сразу
    переписывайте.

    View Slide

  49. О людях

    View Slide

  50. О людях
    1. Чем больше синьор, тем больше
    приходится общаться;
    2. Не рвитесь в синьоры/менеджеры;
    3. Учитесь общаться и находить компромиссы;
    4. Минимизируйте человеческий фактор;
    5. Не будьте мудаками.

    View Slide

  51. @9seconds   
    https://speakerdeck.com/9seconds/stuff-that-works

    View Slide