С востока люди пришли на землю Сеннаар (в нижнем течении Тигра и Евфрата), где решили построить город (Вавилон) и башню высотой до небес, чтобы «сделать себе имя». Строительство башни было прервано Богом, который создал новые языки для разных людей, из-за чего они перестали понимать друг друга, не могли продолжать строительство города и башни и рассеялись по всей земле. [1]
как вы считаете, грозит-ли подобная участь многоязыкому YouTrack, и если нет, то — почему? )
какие KPI можете посоветовать для управления такой разработкой — в каких случаях стоит писать DSL, и это будет оправдано, а в каких нужно сказать «стоп» и тупо кодить?
Выстраивание иерахрии это и есть часть самоорганизации систем. Таким образом решаются проблемы эффективности и выживаемости. В «плоских» системах количество потенциальных связей слишком велико, в результате чего возрастают расходы на их поддержание. Как «лапша» в коде. Модульность и иерархия, образующие структуры, появляются естественным образом, с целью минимизации связей, установки границ распространения дефектов, и оптимизации информационного обмена.
По-моему это пример очень правильной подачи материала. Рай и впрямь можно доверить хоть ангелу, хоть чёрту — заморочка лишь в степени рисков. :) А в данной истории может нет ничего волшебного. Вероятно, весь фокус кроется в опыте лирического героя.
Похожий сценарий был весьма популярен ещё в советских книжках, когда какой-нибудь отставной генерал приходил на завод и за день чудесным образом налаживал там процессы. :) Так и тут, этот хитровывернутый мастадонт ведь не совсем чтобы вот так сразу пришел туда, с улицы, чтобы чего-нибудь там по-разрабатывать. По его же словам, у него там куча давних знакомых в верхах, с которыми он поддерживает связь на протяжении лет 20-ти. За плечами работа в крупных компаниях над R&D проектами, отработанное целеполагание, поставленное проектное мышление и т.д. и т.п. Не студент, короче. Дальше всё очевидно.
Что касается разработчиков, то самоорганизация и свобода выбора, заявленные тут как чудо, на самом деле у них врождённые. Надоел проект, ищут что по душе и уходят работать в другую компанию. Прикольно, что они нашли способ, как замкнуть эту миграцию внутри себя. Но вряд-ли это означает анархию. Скорее, система похожа на грядку, где помидоры считают, что они растут сами собой. ;)
Тесты это инструмент. TDD — методология. Для того, чтобы ими эффективно пользоваться, необходимо учиться, вырабатывать навыки. Это как если вы всю жизнь ползаете на четвереньках, а затем решаете ходить на двух ногах — сначала передвигаться будет медленнее и набьете много шишек. Какие-то прежние привычки придетя забыть. Кто-то может решить, что такой вариант ему не подходит. Но шанс научится бегать есть у всех. :)
Вот, посмотри сюда. Синий график – это первый человек.
оси не подписаны — это не графики, а абстрактная живопись =) можете рефлексировать сколько влезет, рассуждая о том кто такие «красные» и «синие», но по сути статья ни о чём.
Только http method определяет не метод передачи данных, а указывает действие над ресурсом. поэтому, что вопросы, что ответы по данной теме в книжке — полная бессмыслица. :)
мы раньше использовали Mox, пока не наткнулись на flexmock. :)
Mox заставляет делать в тестах избыточные шаги .ReplayAll(), .VerifyAll(), что утомляет. если один из них не был вызван (например из-за того, что тестируемый код бросил непредвиденное исключение), то установленные моки могут протекать в последующие тесты, что вызывает трудно диагностируемые глюки. возможно, сейчас это всё уже не актуально. что касается функциональности, то функциональности flexmock мне хватает для повседневных нужд. не хватает, пожалуй только record'а.
У Mock синтаксис бесчеловечный. ╰_╯ Сложилось впечатление, что моки это один и тех редких случаев, где fluent интересы оказываются уместным. У нас прижился лишь flexmock.
мм… что конкретно? на данный момент есть pep-3333, описывающий инженерное решение заморочек для python3. т.е., если не впадать в научный креативизм (имею ввиду pep-0444 от Армина), можно сделать всё уже прямо сейчас.
В питоне нормальные неймспейсы и система импортов, статические методы классов поэтому там редко когда нужны.
термин «статический метод» из ООП — это самостоятельная штука, которая ортогональна и неймспейсам, и модулям. в подмене одного понятия на другие нет причинно-следственной связи — они все абсолютно нормальные, в своих понятийных областях. ООП предлагает чёткий логический фреймворк для структурирования кода, и к каким последствиям приведёт такое замещение, предсказать сложно.
думаю, хорошим контр-примером здесь служит Django, которая очень активно пытается использовать систему питонячих модулей, для структурирования ООП-кода, и каким заморочкам это приводит на практике. мм. т.е. известно к каким — при таком подходе к зависимостям от интерфейса, добавляются зависимости от неймспейса (читай — конкретных библиотек) — в результате чего код намертво привязывается к конкретной реализации.
тогда прошу прощения, я не правильно понял тезис. вот только рельсы, в этом отношении, смотрятся ещё привлекательнее, за счёт более тесной интеграции с рубячей инфраструтурой (gems, rake и т.д.). :)
Django реально выматывает своей политикой релизов. с одной стороны, они вроде бы тащат за собой кучу deprecated и legacy кода, с другой — всё равно ломают обратную совместимость в самых неожиданных местах.
какие KPI можете посоветовать для управления такой разработкой — в каких случаях стоит писать DSL, и это будет оправдано, а в каких нужно сказать «стоп» и тупо кодить?
По-моему это пример очень правильной подачи материала. Рай и впрямь можно доверить хоть ангелу, хоть чёрту — заморочка лишь в степени рисков. :) А в данной истории может нет ничего волшебного. Вероятно, весь фокус кроется в опыте лирического героя.
Похожий сценарий был весьма популярен ещё в советских книжках, когда какой-нибудь отставной генерал приходил на завод и за день чудесным образом налаживал там процессы. :) Так и тут, этот хитровывернутый мастадонт ведь не совсем чтобы вот так сразу пришел туда, с улицы, чтобы чего-нибудь там по-разрабатывать. По его же словам, у него там куча давних знакомых в верхах, с которыми он поддерживает связь на протяжении лет 20-ти. За плечами работа в крупных компаниях над R&D проектами, отработанное целеполагание, поставленное проектное мышление и т.д. и т.п. Не студент, короче. Дальше всё очевидно.
Что касается разработчиков, то самоорганизация и свобода выбора, заявленные тут как чудо, на самом деле у них врождённые. Надоел проект, ищут что по душе и уходят работать в другую компанию. Прикольно, что они нашли способ, как замкнуть эту миграцию внутри себя. Но вряд-ли это означает анархию. Скорее, система похожа на грядку, где помидоры считают, что они растут сами собой. ;)
а в целом, спасибо за статью, очень познавательно.
используйте HTTPS, чтобы не украли секретные ссылки снифером трафика. кажется, это просто www.piware.de/2011/01/creating-an-https-server-in-python/.
конечно, это перевод и придирка относится к оригинальному тексту.
Mox заставляет делать в тестах избыточные шаги .ReplayAll(), .VerifyAll(), что утомляет. если один из них не был вызван (например из-за того, что тестируемый код бросил непредвиденное исключение), то установленные моки могут протекать в последующие тесты, что вызывает трудно диагностируемые глюки. возможно, сейчас это всё уже не актуально. что касается функциональности, то функциональности flexmock мне хватает для повседневных нужд. не хватает, пожалуй только record'а.
термин «статический метод» из ООП — это самостоятельная штука, которая ортогональна и неймспейсам, и модулям. в подмене одного понятия на другие нет причинно-следственной связи — они все абсолютно нормальные, в своих понятийных областях. ООП предлагает чёткий логический фреймворк для структурирования кода, и к каким последствиям приведёт такое замещение, предсказать сложно.
думаю, хорошим контр-примером здесь служит Django, которая очень активно пытается использовать систему питонячих модулей, для структурирования ООП-кода, и каким заморочкам это приводит на практике. мм. т.е. известно к каким — при таком подходе к зависимостям от интерфейса, добавляются зависимости от неймспейса (читай — конкретных библиотек) — в результате чего код намертво привязывается к конкретной реализации.