Канал об IT в целом и о программировании в частности.
node_modules удваивается каждый новый релиз» resources :projects, а оно мне подготавливает целый набор урлов с правильными гетами, постами и патчами, которые указывают на специальные классы и методы в этих классах. Причем, если написать resource :project будет почти такое же самое, но, как говорит Василий Иваныч, есть один нюанс.
И, конечно же, высшие маги знают что и как там происходит под капотом и умеют применить это заклинание куда более эффективно, дописав какой-то неочевидный параметр или используя метапрограммирование, но магия не перестаёт быть магией — одно простое заклинание делает то, что вручную делать сильно сложнее.
expect(client.phone).to eq(client.phone)
Увидев такое, я, сам того не замечая, прошёл все стадии знакомства с легаси: гнев, отрицание, желание переписать и попытки пофиксить. В итоге, обретя катарсис, я занялся тем, чем следовало бы заняться с самого начала — поиском причин появления вот такого вот странного теста. Сперва были отметены какие-либо разумные причины, вроде каких-то побочных эффектов вызова геттера — всё было так, как выглядело, обычный геттер, который так же обычно читается. Потом в ход пошла история изменений файла и сопуствующие изменения в коммите. Ну и, конечно же, коммит-каменты.
Во-первых, хочу напомнить, что именно для вот таких вот случаев и нужно группировать изменения атомарно и давать внятные пояснения не того, что происходит в коммите, а того, зачем это происходит.
Во-вторых очередной раз убедился, что скваш (squash) коммитов — это неудобно.
В-третьих добавлю, что комментарии в гит-коммите должны быть самодостаточны. Комментарии, вроде Fixed issue CN-ERT-5553, наверное, помогают быстрее писать комментарии и быстрее принимать пулл реквесты, но совершенно теряют историческую ценность. Как вы понимаете, своим внутренним баг-трекером писатели кода делиться не собирались.
В итоге дедуктивного расследования выяснилось, что в какой-то момент деньги стали заканчиваться быстрее, чем набор несделанных фич и приходилось на чём-то экономить. И экономить начали на времени разработки. Сначала тест появился, как следует, с внятной плоской проверкой, вроде eq('+380999999999’). Потом попросили писать номер в определённом формате. Добавив валидацию, оказалось, что создание объекта для теста выходит чуточку сложнее. В итоге сначала убрали все вольные создания объектов и заменили на системный фабричный подход и тут (внимание) упало несколько тестов, которые говорят, мол, у вас там какой-то непонятный международный формат, а у нас тут надо просто кучу девяток. И программист в спешке решал чему же должен быть равен сгенерированный случайный номер телефона по определённому формату. Оказалось, что номер телефона строго равен номеру телефона и больше ничему другому не равен. Просто удалить тест он, конечно же, не мог, потому что падающие метрики никому не нужны.
Виноват ли этот программист? Определённо нет, по истории коммитов видно под каким давлением со стороны заказчиков и руководства приходилось исправлять неисправленное. Может быть, руководство аусорса как-то лучше могло себя показать? Вряд ли, счета по проекту внезапно грозили быть неоплаченными и нужно было срочно доделывать обещанное. Может быть, заказчику нужно быть дальновиднее? Тоже нет, ему просто выставляют счета и обещают фичи.
Вот так вот, каждый действовал оптимальным для себя образом и в итоге получилось, что получилось.А+Б выйдет сильно проще, чем В. А может и не выйдет, Оккама тут бессилен вам помочь, давайте уж как-нибудь сами.
А вот то, о чём Бритва Оккама действительно говорит, что если что-то можно объяснить с помощью утверждений А и Б или только с помощью А, то стоит отдать предпочтение только А. Из двух утверждений «давайте обойдёмся только постгресом» или «давайте рядом с постгресом ещё и редис лупанём», лучше сначала потратить силы и попробовать обойтись только постгресом, а потом пробовать что-то рядом запускать.