И попытаюсь ответить на ваши вопросы основываясь на своём опыте. Год назад я сменил место работы. Мне очень повезло попасть в команду, которую собирали с нуля.
У нас нет скрама, спринтов и бэклога. Зато есть понимание бизнес-требований продукта каждым членом команды. Есть глубокое понимание того, что важно на данный момент, почему мы работаем над той или иной задачей и какова конечная цель.
У нас нет утренних пятнадцатиминутных стендапов — мы сидим на расстоянии вытянутой руки друг от друга и постоянно общаемся. Мы любим парное программирование, а ещё больше мы любим программирование толпой (mob programming). Мы хорошо знаем, что совершаем кучу глупых ошибок и что вместе мы умнее, внимательнее, сильнее.
У нас нет проблем с деплоем — от коммита до деплоя в продакшн проходит не более 10 минут. У нас практически нет веток — они живут максимум сутки и то — для того, чтобы недоделанное мною вечером, мог продолжить и залить коллега, приходящий рано утром. А баги фиксятся здесь и сейчас. Какой смысл разрабатывать новую фичу, если в программе содержится ошибка и мы о ней знаем?
Да и обособленных ретроспектив, как вы наверное уже поняли, тоже нет. Процесс построен так, чтобы получать обратную связь в наикратчайшие сроки, делать выводы, обсуждать и воплощать новые идеи в жизнь.
Больно было читать. Скрам мастер, Agile менеджер… И уж не обессудьте, я процитирую твиттер Аллена Холуба:
Words that DO NOT appear in the Agile Manifesto & Principles:
sprint
backlog
product owner, scrum master
release train
story
story points
estimate
velocity
meeting
Jira
manager
productivity
utilization
Words that DO appear in the Agile Manifesto & Principles:
individuals
interaction
valuable (software)
collaboration
change
customer
deliver…frequently
conversation
technical excellence
simplicity
self-organizing
reflects on…effective
adjusts
А как же разделение вида requirements.prod.txt и requirements.dev.txt? Если зашивать версии зависимостей для вас не критично, то достаточно в этих файлах определить зависимости первого уровня.
Poetry же не работает для управления зависимостями для блокнотов.
Расскажите пожалуйста поподробнее, в чём проблема с Poetry?
Приведённый пример с константой, кажется сильно натянутым:
SUDDEN_LIST = [0, 0, 0]
def print_list(some_list):
for element in SUDDEN_LIST:
print(element)
print_list([1, 2, 3])
Разве вы напишете такое в реальном коде? Функция с названием print_list, принимающая аргумент some_list и за каким-то макаром печатающая глобальную переменную?
Вариант с as рассматривали и отклонили: https://www.python.org/dev/peps/pep-0572/#alternative-spellings.
Если вкратце: не хотели добавлять лишнюю семантику. В рассматриваемых случаях, переменная с правой стороны от as всегда присутствует в области видимости:
Мать ты моя, за эти же деньги можно полноценный Wahoo-шный тренажёрный бандл купить! С вентилятором и симулятором подъёмов/спусков. Да ещё и на велик останется.
Потому что здесь происходит замена данных, а не присваивание (связывание). Рассмотрим пример с обычным присваиванием:
numbers = [1, 2, 3]
other_number = numbers
numbers = [4, 5, 6]
# В данной ситуации, значение `other_numbers` не меняется, т.к. эта переменная продолжает ссылаться на область в памяти, к которой она была привязана изначально
print(other_numbers)
>>> [1, 2, 3]
Теперь с [:] = [...]:
numbers = [1, 2, 3]
other_number = numbers
numbers[:] = [4, 5, 6]
# Значение `other_numbers` меняется, т.к. обе переменные ссылаются на одну и ту же область памяти
print(other_numbers)
>>> [4, 5, 6]
Товарищи кто в теме, поправьте, но это же ересь какая-то — "детектирование как IntelCore 2 Duo". Это что же получается, "Эльбрус" на команду CPUID себя за Интел выдаёт?
# предложенные директора
managers_of_interest = {1, 2, 3}
data = (
{1, 2, 3, 4},
{1, 2, 3, 5},
{3, 4, 5, 6, 7}
)
for s in data:
if managers_of_interest & s:
print(s)
A в предыдущем примере так и вообще ничего вводить не надо — программа сама найдёт все организации в которых пересечение директоров больше 50%. И уже в этом результате имеет смысл искать конкретные имена.
И попытаюсь ответить на ваши вопросы основываясь на своём опыте. Год назад я сменил место работы. Мне очень повезло попасть в команду, которую собирали с нуля.
У нас нет скрама, спринтов и бэклога. Зато есть понимание бизнес-требований продукта каждым членом команды. Есть глубокое понимание того, что важно на данный момент, почему мы работаем над той или иной задачей и какова конечная цель.
У нас нет утренних пятнадцатиминутных стендапов — мы сидим на расстоянии вытянутой руки друг от друга и постоянно общаемся. Мы любим парное программирование, а ещё больше мы любим программирование толпой (mob programming). Мы хорошо знаем, что совершаем кучу глупых ошибок и что вместе мы умнее, внимательнее, сильнее.
У нас нет проблем с деплоем — от коммита до деплоя в продакшн проходит не более 10 минут. У нас практически нет веток — они живут максимум сутки и то — для того, чтобы недоделанное мною вечером, мог продолжить и залить коллега, приходящий рано утром. А баги фиксятся здесь и сейчас. Какой смысл разрабатывать новую фичу, если в программе содержится ошибка и мы о ней знаем?
Да и обособленных ретроспектив, как вы наверное уже поняли, тоже нет. Процесс построен так, чтобы получать обратную связь в наикратчайшие сроки, делать выводы, обсуждать и воплощать новые идеи в жизнь.
Больно было читать. Скрам мастер, Agile менеджер… И уж не обессудьте, я процитирую твиттер Аллена Холуба:
Words that DO NOT appear in the Agile Manifesto & Principles:
sprint
backlog
product owner, scrum master
release train
story
story points
estimate
velocity
meeting
Jira
manager
productivity
utilization
Words that DO appear in the Agile Manifesto & Principles:
individuals
interaction
valuable (software)
collaboration
change
customer
deliver…frequently
conversation
technical excellence
simplicity
self-organizing
reflects on…effective
adjusts
А как же разделение вида
requirements.prod.txt
иrequirements.dev.txt
? Если зашивать версии зависимостей для вас не критично, то достаточно в этих файлах определить зависимости первого уровня.Расскажите пожалуйста поподробнее, в чём проблема с Poetry?
И может стоило бы привести ссылку на соотвествующий раздел документации: Execution model / Resolution of names.
Приведённый пример с константой, кажется сильно натянутым:
Разве вы напишете такое в реальном коде? Функция с названием
print_list
, принимающая аргументsome_list
и за каким-то макаром печатающая глобальную переменную?PEP-505, был отложен аккурат до выхода версии 3.8.
Имеется ввиду, "не хотели добавлять новую семантику оператору
as
".Вариант с
as
рассматривали и отклонили: https://www.python.org/dev/peps/pep-0572/#alternative-spellings.Если вкратце: не хотели добавлять лишнюю семантику. В рассматриваемых случаях, переменная с правой стороны от
as
всегда присутствует в области видимости:import x.y.z as z
# z = x.y.z
with context as c:
# c = context.__enter__()
Всем на заметку: репозиторий с кейсами использования моржового оператора: https://github.com/vlevieux/Walrus-Operator-Use-Cases
Согласен. После этого кипиша (PEP-572) Гвидо и ушёл с поста BDFL — не было больше сил и нервов противостоять сообществу.
Мать ты моя, за эти же деньги можно полноценный Wahoo-шный тренажёрный бандл купить! С вентилятором и симулятором подъёмов/спусков. Да ещё и на велик останется.
Потому что здесь происходит замена данных, а не присваивание (связывание). Рассмотрим пример с обычным присваиванием:
Теперь с
[:] = [...]
:Товарищи кто в теме, поправьте, но это же ересь какая-то — "детектирование как IntelCore 2 Duo". Это что же получается, "Эльбрус" на команду CPUID себя за Интел выдаёт?
Отличный комментарий! Как вы считаете, насколько сложным будет изолирование моделей Django в слое сохранения состояния (persistence layer)?
Поторопился:
По 1-му коду — ну да, это лишь "заготовка" демонстрирующая основную идею. К ней можно приделать и красивый вывод и вообще всё что угодно :)
Спасибо! Но ведь тогда всё ещё проще:
A в предыдущем примере так и вообще ничего вводить не надо — программа сама найдёт все организации в которых пересечение директоров больше 50%. И уже в этом результате имеет смысл искать конкретные имена.
Я правильно понимаю что эта задача сводится к
Дано n множеств N1, N2,… Nn: ∀1 ≤ k ≤ n |Nk| ≥ 1
Найти множества: |Nk ⋂ Nj| ≥ max(|Nk|, |Nj|) / 2: j ≠ k
?
Потому что в этом случае решение укладывается в 3 строки:
Армин тоже разбирал этот момент: http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/