Я умею работу работать и понятия не имею, проходить этот ненужный фильтр
Для меня звучит это достаточно странно, что вы понятия не имеете про релевантность вашего опыта. Но узнать это не сложно - очень много, кто оказывает HR-консультатции. Вам подправят резюме и оценят релевантность вашего опыта, подскажут что и как подчеркнуть, а о чем лучше не писать
Их не спрашивают - вы проходите HR-скрининг резюме автоматом, если вас кто-то порекомендует внутри компании
Сложно сказать без конкретики. А откуда вы знаете про оценку 5+? Вы пытались связаться? Иногда просто бывают технические ошибки - условные ВК по моей оценке нанимает 120 человек в неделю, учитывая воронку там под 1000 собеседований каждую неделю
Извините, если вам кажется это оскорблением. Если вы реально не можете пройти HR-фильтр после десяти лет опыта, то этому есть два объяснения - какие-то явные проблемы в резюме или не релевантный опыт. Обе проблемы можно за небольшие деньги независимо оценить, а первую еще и быстро исправить
Ну так может ваша "разная работа" не очень релевантная в текущих условиях и вы мало отличаетесь от обычного человека без особого опыта - у людей без опыта сейчас большие проблемы, так как их очень много
Не понимаю этой проблемы для человека с 10 годами опыта, как вы пишете. Сейчас во всем российском бихтехе есть практика привлечения по рекомендации (за это еще обычно доплачивают 1-2 оклада привлеченного специалиста). Если у вас за 10 лет не нашлось никого, кто вас может так порекомендовать, то тут вопросы скорее к вам
Есть проблема когда объекту А нужен объект Б, которому нужен объект С, который контекстный менеджер, а вам нужен именно А. Приходится через всю ирерахию протаскивать enter/__exit__
Я чего-то не понимаю пример. Если у зависимость А стала контекстным менеджером, то ее создание я заменил на with и передал в конечное место и больше ничего не нужно менять. Если объект C стал контекстным менеджером, я заменил его создание на with передал дальше в конструктор Б. Если у меня нормальный код, абстракции уровня С не текут вниз и мне больше ничего не надо менять. Или я не понял пример?
Контейнер имеет смысл только в интеграционных тестах (то есть там где уже всё сложно), в обычных тестах я пишу так как вы сказали - просто передаю мок/фейк
В интеграционном тесте вы создаете почти всю иерархию объектов, подменив на тестовые только некоторые инфраструктурные зависимости, и не меняете зависимости слоя бизнес-логика. Я не понимаю в чем тут экономия. Вы будете вынуждены написать новую функцию, которая собирает composition root и зарегистрировать все зависимости инфрового уровня некоторые, как некоторые как обычно. Я сделаю просто создам их
Уточню, что я не считаю IoC-контейнер must-have инструментом, без которого приложение жить не может
А я считаю, что он не нужен, так как не решает никаких проблем
Это вспомогательная штука для создания вот таких фабрик. Его прелесть раскрывается когда фабрик становится много и среди них начинают встречаться контекстные менеджеры или какой-нибудь объект меняет скоуп
Нет проблемы многих фабрик - универсальная фабричная функция занимает несколько строк. Нет проблем проблемы контекстных менеджеров - вызов
dep = Constructor()
заменяется на
with Constructor() as dep
Количество строк не меняется, вы явно видите, где у вас контекстный менеджер
В результате не решается никаких реальных проблем и предлагается затащить здоровую зависимость, которая там якобы под капотом разруливает все edge кейсы асинхронности и многопоточки большая часть из которых в конкретном проекте скорее всего не нужна - спасибо, но нет
Да, стало. Теперь чтобы создать 10 объектов и прокинуть куда надо какие надо с переисползованием мне нужно писать 20+ строк фабрик и потом ещё неизвестно сколько чтобы в тестах переопределять
Вот это не понял. Если скоуп все приложение, то создаете один экземпляр в сomposition root приложения и передаете его и проблем нет. Если скокуп более более узкий, то пишите одну универсальную типизированную обертку для создания фабричной функции и передаете фабричную функцию
Если у вас контекстный менеджер, то вызываете его перед предачей и передаете ровно так же, как у вас вызывается контекстный метод для создания скоупа
Я вам более того скажу я если честно не видел приложений, где зависимостей много и при этом можно обойтись механикой скоупов. Реальных в приложениях, где зависимостей много возникает и сложная логика создания зависимостей. Вот примерчик. Есть платежный движок с многими десятками интеграций с банками. В рамках скоупа платежа создается соответствующий адаптер. Казалось бы лафа для вашего DI, но оказывается что еще есть несколько десятков типов платежей и в результате каждый из адаптеров нужно параметраризировать под каждый вид платежа при создании по разному. И вы все равно пишете развернутую логику создания зависимостей
Это конечно лучше, но все равно не понятно, какую проблему это решает. Стало кода меньше - нет. Стал он понятней - нет. Тогда зачем это нужно?
Гарантируете вы, что при вызове container.get(SomeDeps), что чего-то вернется - думаю нет, привет эксепшен в рантайме
Вы в любом месте приложения можете дернуть container.get получить любую зависимость в результате у вас нет четких границ между уровнями абстракции в коде и все постепенно превращается в big ball of mud
Когда зависимость стало много особенно не стоит полагаться на магию. Чего-нибудь отвалится, задублируешь или неправильно напишешь ключи и замучаешься разбираться. Нетипизированные dict[str, Any], глобальные переменные по капотом и инициализация размазанная по всему коду очень «помогают» пониманию кода. Явное лучше не явного - лучше в одном месте явно передать зависимости, с нормальными типами, чтобы редактор или mypy тебя лишней раз проверил
Ну, да, и общую терминологию я привел, слава богу это все существовало задолго до Go и нормальные технические переводчики придумали нормальную терминологию. А сейчас переводят люди далекие от темы и изобретают карты
Это лишь свидетельствует о том, что переводчики совсем не в теме предметной области. Map происходит от устойчивого выражения map into - в нашем конкретном случае map keys into values
С выборами действительно много разных концептуальных проблем:
Математически ваш голос ни на что не влияет в реальных даже самых честных выборах - вероятность, что вы сдвинете решение исчезающе мала
Согласно теореме Эрроу выборы не обеспечивают логическую не противоречивость решений
В идеальном политическом процессе борьба идет за медиального избирателя, и если вы далеки от медианы, то ваши интересы достаточно мало учитываются
Обычный избиратель ничего не понимает в макроэкономике, внешней политике и т.д., как он может сделать какой-то разумный выбор мало понятно
С учетом этого мы переходим к практике, что кто лучше промыл мозги мало компетентному избирателю, тот и победитель с некоторыми ограничениями. Тут только надежда, что какая-то откровенная дичь не пройдет, но практика показывает, что вполне проходит
Я или чего-то не понял, или ваше утверждение можно свести к следующему - при демократии общество имеет большие права выбора руководства, чем при диктатуре. С этим я не спорю и нигде не утверждал обратного - это в определение демократии
Я честно не видел таких анализов, хотя они наверняка есть, но думаю там тоже не все так однозначно - по тому же Джини у США все не очень, в европейских демократиях по лучше, а в социалистических диктатурах обычно очень хорошо. Но диктатуры бывают разные, например, страны персидского залива, там Джини не очень, но уровень жизни выше чем с передовых демократиях. Мир сложнее, чем кажется:)
Я ваши сложные метафоры не улавливаю. Последнее предложение понимаю, и мне кажется, что ваш мир через чур черно-белый, хотя в реальности в нем есть оттенки
Вот есть США там было рабство и геноцид индейцев, потом поражение в правах индейцев и негров, массовое помещение в концлагеря японцев, сажание на большие сроки голубых, и все это время она считалась демократией. А сей час есть крупнейшая демократия в мире Индия - там не очень сладко живется, если вы там бывали. Или южно американские страны - во многих странах там нет диктаторов, но вот например в Мексике несколько десятков тысяч человек убивают в год и очень часто заживо пилят бензопилами. Или вот был диктор Садам - нехороший человек развязал войну и убил около несколько десятков тысяч курдов. Пришли демократичные США убили злого Хусейна, а за одно по независимым оценкам 0,5-1,5 миллионов человек так и не постоив демократию - так ли плох был на этом фоне Хусейн
Мир немного разнообразней картинки в которой есть только некие идеальные демократии и диктаторы, которые всех убивают на право и на лево. И если не впадать в истерику, а более предметно посмотреть на статистику, то можно прийти к не очень очевидным на первый взгляд выводам
Я не усреднял, а лишь цитирую профессиональных исследователей в этой области, например Daron Acemoglu. Если грубо, то есть некоторые критерии демократичности, по которым выставляют степень демократичности. Дальше вы можете взять какой-нибудь показатель, например темпы роста душевого ВВП (показатель скорости развития), или дисперсию роста душевого ВВП (показатель предсказуемости экономической ситуации) и т.д. и посмотреть зависимость этих показателей от степени демократичности, провести стат тест, насколько это зависимость значима статически и сделать выводы - сильных экономических аргументов в пользу демократий нет, повторю часть предыдущей цитаты This result is surprising and even perhaps disturbing
Не понял вашу метафору. Если про ваш первый вопрос, который мне понятен, то думаю рост важен, но есть и другие факторы, например, люди ценят предсказуемость и этот вопрос тоже исследовался экономистами. Тут тоже не все так очевидно с демократиями. Не демократии обычно обеспечивают большую предсказуемость short run, но в не демократиях чаще случаются редкие, но сильные потрясения, обычно связанные со сменой авторитарного правителя. Тут как говорится, как повезет - нарвешься ты на это редкое событие или нет. Если усреднить, то опять какой-то существенной разницы не видно
Для меня звучит это достаточно странно, что вы понятия не имеете про релевантность вашего опыта. Но узнать это не сложно - очень много, кто оказывает HR-консультатции. Вам подправят резюме и оценят релевантность вашего опыта, подскажут что и как подчеркнуть, а о чем лучше не писать
Их не спрашивают - вы проходите HR-скрининг резюме автоматом, если вас кто-то порекомендует внутри компании
Сложно сказать без конкретики. А откуда вы знаете про оценку 5+? Вы пытались связаться? Иногда просто бывают технические ошибки - условные ВК по моей оценке нанимает 120 человек в неделю, учитывая воронку там под 1000 собеседований каждую неделю
Извините, если вам кажется это оскорблением. Если вы реально не можете пройти HR-фильтр после десяти лет опыта, то этому есть два объяснения - какие-то явные проблемы в резюме или не релевантный опыт. Обе проблемы можно за небольшие деньги независимо оценить, а первую еще и быстро исправить
Ну так может ваша "разная работа" не очень релевантная в текущих условиях и вы мало отличаетесь от обычного человека без особого опыта - у людей без опыта сейчас большие проблемы, так как их очень много
Не понимаю этой проблемы для человека с 10 годами опыта, как вы пишете. Сейчас во всем российском бихтехе есть практика привлечения по рекомендации (за это еще обычно доплачивают 1-2 оклада привлеченного специалиста). Если у вас за 10 лет не нашлось никого, кто вас может так порекомендовать, то тут вопросы скорее к вам
Я чего-то не понимаю пример. Если у зависимость А стала контекстным менеджером, то ее создание я заменил на with и передал в конечное место и больше ничего не нужно менять. Если объект C стал контекстным менеджером, я заменил его создание на with передал дальше в конструктор Б. Если у меня нормальный код, абстракции уровня С не текут вниз и мне больше ничего не надо менять. Или я не понял пример?
В интеграционном тесте вы создаете почти всю иерархию объектов, подменив на тестовые только некоторые инфраструктурные зависимости, и не меняете зависимости слоя бизнес-логика. Я не понимаю в чем тут экономия. Вы будете вынуждены написать новую функцию, которая собирает composition root и зарегистрировать все зависимости инфрового уровня некоторые, как некоторые как обычно. Я сделаю просто создам их
А я считаю, что он не нужен, так как не решает никаких проблем
Нет проблемы многих фабрик - универсальная фабричная функция занимает несколько строк. Нет проблем проблемы контекстных менеджеров - вызов
заменяется на
Количество строк не меняется, вы явно видите, где у вас контекстный менеджер
В результате не решается никаких реальных проблем и предлагается затащить здоровую зависимость, которая там якобы под капотом разруливает все edge кейсы асинхронности и многопоточки большая часть из которых в конкретном проекте скорее всего не нужна - спасибо, но нет
Кстати про тесты - где там экономия?
С контейнером
Создается контейнер
Создается мок зависимости
Регистрируется мок зависимости
Внедряется контейнер в тестируемый объект
Без
Создается мок зависимости
Внедряется мок в тестируемый объект
Вот это не понял. Если скоуп все приложение, то создаете один экземпляр в сomposition root приложения и передаете его и проблем нет. Если скокуп более более узкий, то пишите одну универсальную типизированную обертку для создания фабричной функции и передаете фабричную функцию
Если у вас контекстный менеджер, то вызываете его перед предачей и передаете ровно так же, как у вас вызывается контекстный метод для создания скоупа
Я вам более того скажу я если честно не видел приложений, где зависимостей много и при этом можно обойтись механикой скоупов. Реальных в приложениях, где зависимостей много возникает и сложная логика создания зависимостей. Вот примерчик. Есть платежный движок с многими десятками интеграций с банками. В рамках скоупа платежа создается соответствующий адаптер. Казалось бы лафа для вашего DI, но оказывается что еще есть несколько десятков типов платежей и в результате каждый из адаптеров нужно параметраризировать под каждый вид платежа при создании по разному. И вы все равно пишете развернутую логику создания зависимостей
Это конечно лучше, но все равно не понятно, какую проблему это решает. Стало кода меньше - нет. Стал он понятней - нет. Тогда зачем это нужно?
Гарантируете вы, что при вызове container.get(SomeDeps), что чего-то вернется - думаю нет, привет эксепшен в рантайме
Вы в любом месте приложения можете дернуть container.get получить любую зависимость в результате у вас нет четких границ между уровнями абстракции в коде и все постепенно превращается в big ball of mud
Когда зависимость стало много особенно не стоит полагаться на магию. Чего-нибудь отвалится, задублируешь или неправильно напишешь ключи и замучаешься разбираться. Нетипизированные dict[str, Any], глобальные переменные по капотом и инициализация размазанная по всему коду очень «помогают» пониманию кода. Явное лучше не явного - лучше в одном месте явно передать зависимости, с нормальными типами, чтобы редактор или mypy тебя лишней раз проверил
Одно радует, что в голосовании большинство проголосовало за не использует. Почему нельзя заинъектить зависимости руками не понятно
Ну, да, и общую терминологию я привел, слава богу это все существовало задолго до Go и нормальные технические переводчики придумали нормальную терминологию. А сейчас переводят люди далекие от темы и изобретают карты
Это лишь свидетельствует о том, что переводчики совсем не в теме предметной области. Map происходит от устойчивого выражения map into - в нашем конкретном случае map keys into values
С выборами действительно много разных концептуальных проблем:
Математически ваш голос ни на что не влияет в реальных даже самых честных выборах - вероятность, что вы сдвинете решение исчезающе мала
Согласно теореме Эрроу выборы не обеспечивают логическую не противоречивость решений
В идеальном политическом процессе борьба идет за медиального избирателя, и если вы далеки от медианы, то ваши интересы достаточно мало учитываются
Обычный избиратель ничего не понимает в макроэкономике, внешней политике и т.д., как он может сделать какой-то разумный выбор мало понятно
С учетом этого мы переходим к практике, что кто лучше промыл мозги мало компетентному избирателю, тот и победитель с некоторыми ограничениями. Тут только надежда, что какая-то откровенная дичь не пройдет, но практика показывает, что вполне проходит
Я или чего-то не понял, или ваше утверждение можно свести к следующему - при демократии общество имеет большие права выбора руководства, чем при диктатуре. С этим я не спорю и нигде не утверждал обратного - это в определение демократии
Обычно подразумевается ВВП на душу населения по ППС, я именно в таком смысле использовал уровень жизни
А дальше я не очень понял с каким моим тезисом вы спорите и чего пытаетесь доказать
Я честно не видел таких анализов, хотя они наверняка есть, но думаю там тоже не все так однозначно - по тому же Джини у США все не очень, в европейских демократиях по лучше, а в социалистических диктатурах обычно очень хорошо. Но диктатуры бывают разные, например, страны персидского залива, там Джини не очень, но уровень жизни выше чем с передовых демократиях. Мир сложнее, чем кажется:)
Я ваши сложные метафоры не улавливаю. Последнее предложение понимаю, и мне кажется, что ваш мир через чур черно-белый, хотя в реальности в нем есть оттенки
Вот есть США там было рабство и геноцид индейцев, потом поражение в правах индейцев и негров, массовое помещение в концлагеря японцев, сажание на большие сроки голубых, и все это время она считалась демократией. А сей час есть крупнейшая демократия в мире Индия - там не очень сладко живется, если вы там бывали. Или южно американские страны - во многих странах там нет диктаторов, но вот например в Мексике несколько десятков тысяч человек убивают в год и очень часто заживо пилят бензопилами. Или вот был диктор Садам - нехороший человек развязал войну и убил около несколько десятков тысяч курдов. Пришли демократичные США убили злого Хусейна, а за одно по независимым оценкам 0,5-1,5 миллионов человек так и не постоив демократию - так ли плох был на этом фоне Хусейн
Мир немного разнообразней картинки в которой есть только некие идеальные демократии и диктаторы, которые всех убивают на право и на лево. И если не впадать в истерику, а более предметно посмотреть на статистику, то можно прийти к не очень очевидным на первый взгляд выводам
Я не усреднял, а лишь цитирую профессиональных исследователей в этой области, например Daron Acemoglu. Если грубо, то есть некоторые критерии демократичности, по которым выставляют степень демократичности. Дальше вы можете взять какой-нибудь показатель, например темпы роста душевого ВВП (показатель скорости развития), или дисперсию роста душевого ВВП (показатель предсказуемости экономической ситуации) и т.д. и посмотреть зависимость этих показателей от степени демократичности, провести стат тест, насколько это зависимость значима статически и сделать выводы - сильных экономических аргументов в пользу демократий нет, повторю часть предыдущей цитаты This result is surprising and even perhaps disturbing
https://en.wikipedia.org/wiki/The_Economist_Democracy_Index
Не понял вашу метафору. Если про ваш первый вопрос, который мне понятен, то думаю рост важен, но есть и другие факторы, например, люди ценят предсказуемость и этот вопрос тоже исследовался экономистами. Тут тоже не все так очевидно с демократиями. Не демократии обычно обеспечивают большую предсказуемость short run, но в не демократиях чаще случаются редкие, но сильные потрясения, обычно связанные со сменой авторитарного правителя. Тут как говорится, как повезет - нарвешься ты на это редкое событие или нет. Если усреднить, то опять какой-то существенной разницы не видно