25
Почему нужно читать исходный код инструментов Малиновский Дмитрий Студент 5 курса ОмГУ, ИМИТ DevOps Engineer в Thumbtack

2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

  • Upload
    -

  • View
    102

  • Download
    5

Embed Size (px)

Citation preview

Page 1: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Почему нужно читать исходный код инструментов Малиновский Дмитрий

Студент 5 курса ОмГУ, ИМИТ DevOps Engineer в Thumbtack

Page 2: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Идеальный код? •  Проектирование •  Документирование (sphinx, readthedocs) •  Статические анализаторы (flake8) •  Анализаторы цикломатической сложности (radon) •  Автоматические проверки (git hooks, :w, etc.) •  Тестирование (unittest, doctest, etc.) •  Continuous Integration (Travis, Jenkins, etc.)

Page 3: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Анатомия инструментов

Внутренняя кухня

•  _RSAobj •  LocalClient •  ListServers

Внешний интерфейс •  RSA.new •  salt \* test.ping •  couchbase-cli server-list

Магия

Магия

Магия

Page 4: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Анатомия инструментов, v2

Page 5: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Примеры: •  server-add myserver # OK •  server-remove myserver # FAIL: ‘myserver’ is not

a valid IPv4 address •  salt v0.17.2: pkgrepo.managed # OK •  salt v0.17.4: pkgrepo.managed # FAIL

Page 6: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

1. Чтение исходного кода 2. ???

3. Profit!

Page 7: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Опыт

●  Существуют причины, по которым это сделано так, а не иначе

●  Разработчики не могли предусмотреть всё ●  Pull request

Page 8: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Опыт

Pull request: •  Not merged - недостаточно опыта/понимания •  Merged - удовлетворение, признание ●  Contribution

Page 9: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Понимание

•  Реализует все контракты o  raise NotImplementedError

•  Движется в нужном направлении o  интеграция с puppet при сломанном yum api o  преждевременная монетизация

•  Production-ready?

Page 10: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Реализация •  Покрыто ли тестами? •  Качество тестов •  Соблюдение DRY/KISS/etc •  Как следствие,

o  простота o  расширяемость

•  Соответствие [де-факто] стандартам

Page 11: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Комментарии •  long john; // silver •  // Я посвящаю весь свой код,

// всю работу своей жене Дарлин, которой // придётся содержать меня, // наших троих детей и собаку, когда // это пойдет в паблик.

•  long long ago; /* in a galaxy far far away */

Page 12: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты

Page 13: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты “Первая ссылка в гугле”, обзор фич

Page 14: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты Сравнение фич

Page 15: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты Наличие удобного GUI

Page 16: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты Наличие удобного CLI

Page 17: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Как выбираются инструменты Наличие удобного API

urllib2 urllib2.HTTPPasswordMgrWithDefaultRealm urllib2.HTTPDigestAuthHandler urllib2.AbstractBasicAuthHandler

Page 18: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Подводные камни

5. Удобный API - отсутствие высокоуровневых абстракций, отсутствие логики взаимодействия

1. Обзор фич - маркетинг 2. Сравнение фич - платные, поверхностные обзоры 3. Удобный GUI - возможно, единственный грамотно написанный компонент 4. Удобный CLI - неконсистентный ввод/вывод, опции (--verbose vs --log verbose)

Page 19: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Вопросы, которые нужно задать Могу ли я пользоваться инструментом, который: •  не реализует маркетинговые обещания? •  не имеет внутренней логики? •  не имеет тестов? •  имеет мало тестов? •  имеет бессмысленные тесты? •  развивается от “левой пятки”?

Page 20: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Не реализует обещания Значит вместо можно увидеть

Page 21: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Не имеет внутренней логики Значит код придется писать так

Page 22: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Имеет проблемы с тестами Значит что-то где-то упадет

Page 23: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Развивается от левой пятки Значит, придется тратить ресурсы на реализацию необходимых фич и костыли

Page 24: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Читайте исходный код и помните, что баги

библиотек, которыми вы пользуетесь, становятся багами вашего проекта

Page 25: 2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инструментов

Вопросы?