Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 1 0

  2. Чему учат в университете 1. Нужно создавать иерархии 2. Инкаспуляция,

    наследование, полиморфизм 3. CMMI 3, ISO 9001 4. TDD 5. … 6. PROFIT!
  3. Жизненный цикл проекта ТЗ Общий каркас Очень быстрая разработка Быстрая

    разработка, первые демо и фидбек Спокойная доработка Стабилизация
  4. Что есть в жизни 1. Конечный продукт плохо подходит под

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

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

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

    наследование, полиморфизм 3. CMMI 3, ISO 9001 4. TDD 5. … 6. PROFIT!
  8. Правда, которую никто не слушает 1. Нормальных семейТЗ не бывает;

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

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

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

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

    библиотеки, использование которых стоит убитого вечера и нервов; 3. Используйте проверенные библиотеки; 4. Не надейтесь, что кто-то починит вам баг; 5. Не верьте бенчмаркам; 6. Лучше изобретите маленький велосипед, тащите библиотеку от безысходности.
  13. Юниттесты 1. Проверка работоспособности — отчасти. 2. Документация — вряд

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

    работает. Пишите сразу короткую документацию. 3. Если тяжело описать что-то — сразу переписывайте.
  15. О людях 1. Чем больше синьор, тем больше приходится общаться;

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