C# - pattern matching - many discards
Пока есть старпёры, которым удобнее писать развесистую лапшу с дополнительными типами, служащими лишь для хранения передаваемых данных (DTO), и длинные списки параметров методов - они будут это делать.
Пока есть те, кто заинтересован в тестируемом коде, "старперы" будут бить "новичков" по рукм. Больно. Очень больно :)
У нас сейчас весёлая борьба нанайских мальчиков. Я предложил погромиздам голосовать за отдельные правила написания кода, они радостно имитировади бурную деятельность, предлагали правила, обсуждали и голосовали. Принятые варианты собрал им в Code Convention, а теперь... Не даю мержить изменения, нарушающие договорённости.
Полярная лиса подкралась к коболистам незаметно. Они думали что будет как обычно. Что написано в проектной документации никого не интересует :)
И теперь два 50+ мальчика обиделись. Страдают над тикетами, к которым я уже две недели как написал всё, что они должны поправить. Но править их код у них... Нет времени. Они уже всё написали, а гадкий я не пускаю в релиз. Это провокация! Из-за меня в релиз не уйдёт супер важная фича!
Ходим по кругу. Сегодня 3й раз "побеседовали":
- когда аппрувишь мой код?
- когда приведёшь в соответствии с требованиями.
- а кто тебе дал право требовать!!!???
- команда. Мы сами установили наши требования и свели их в code conventions
- а у меня нет время на эти глупости!
- ну, найди время
- а я не должен!
- Должен. Код не пройдёт в релиз, пока не будет соответствовать правилам. Если хочешь поменять правила, на следующем ретро можешь обсудить.
- я буду жаловаться! (так и хочется добавить "прокурору!" :))
Две недели назад первый раз так побеседовали. Потом тишина на неделю, и новая итерация. Романтика.
Что-то у вас не то с атмосферой в команде... Не выглядит здоровой:)
Жесть конечно. Ну и климат у вас похоже токсичный....
Она не то что не выглядит... Она у нас как в привокзальном туалете. Руками пощупать можно. У нас просто 4 Олёша-подобных разработчиков. Самые умные. "Чо ты мне своей арзитектурой тычешь". Которые 10-20 лет писали на коболе, потом за 3 дня "научились" писать на яве и теперь уже 5 лет пишут так, как научились за эти три дня.
Но так как у них лужёные глотки и "авторитет" они задавили всех остальных, что те не крякают. Сидят как мышь под веником, не отсвечивают. Но никто не понимает что же эти 4 гения написали. В результате остальные "разрабатывают" с помощью копипасты.
А я пытаюсь это сломать. Заставляю гениев писать документацию, чтобы другие понимали что же делает этот метод с 7 параметрами. В процессе написания
гении даже приходили к мнению что оказывается все 7 и не нужны... И (о боже!) заставляю их переименовывать переменные, методы и классы, чтобы имя хоть немного соответствовало тому, что они делают. В общем отношусь без должного пиитета. У олёшенек подгорает и они устравивают подковёрную борьбу :)
можно пример кода, который ты не пускаешь в прод из-за нарушений конвенции?
Это может быть совершенно обычный код без криминала.
У нас например в кодинг стандартах написано, что сначала должны быть перечислены все using System.*, потом все остальные. Разумное это требование или нет - вообще не важно.
Есть стандарт кода и ему надо следовать. Если не нравится - нет проблем, стандарты кода можно поменять, но им все равно надо следовать.
В данном случае скоманда сама сформулировала для себя требования к коду, но некоторые члены комманды считают себя ровнее :)
любой проект за 15-20 лет можно изменить до неузнаваемости в худшую сторону
------
Хи-хи... Покажи мне хоть один. который активно эксплуатируется, модифицируется и остается в том же качестве...
то таким он и должен быть остаться.
---------------
почему?
мой заводик помнишь? переход с оракла на постгрее... и коннективити под постгрее обрабатывающая ошибки... оракла.
Все всегда делается в меру понимания исполнителем и чаще всего исполнитель не интересуется архитектурой
Должен.
-----
Угу...
Как то с бывшим шефом бодались - где рабочий код? - бо, у обоих локально что-то работает - постановили - в соурсэйве! - потом сильно помогало по жизни.
должны быть перечислены все using System.*
-----
а как учитывается то, что в .НЕТ не только System.*?
а как учитывается то, что в .НЕТ не только System.*?
Никак. Требование - сначала System.*
Но можно ввести и иерархию:
1) System.*
2) Все 3rd party
3) Свои
У нас сейчас весёлая борьба нанайских мальчиков. Я предложил погромиздам голосовать за отдельные правила написания кода, они радостно имитировади бурную деятельность, предлагали правила, обсуждали и голосовали. Принятые варианты собрал им в Code Convention, а теперь... Не даю мержить изменения, нарушающие договорённости.
Полярная лиса подкралась к коболистам незаметно. Они думали что будет как обычно. Что написано в проектной документации никого не интересует :)
И теперь два 50+ мальчика обиделись. Страдают над тикетами, к которым я уже две недели как написал всё, что они должны поправить. Но править их код у них... Нет времени. Они уже всё написали, а гадкий я не пускаю в релиз. Это провокация! Из-за меня в релиз не уйдёт супер важная фича!
Ходим по кругу. Сегодня 3й раз "побеседовали":
- когда аппрувишь мой код?- когда приведёшь в соответствии с требованиями.
- а кто тебе дал право требовать!!!???
- команда. Мы сами установили наши требования и свели их в code conventions
- а у меня нет время на эти глупости!
- ну, найди время
- а я не должен!
- Должен. Код не пройдёт в релиз, пока не будет соответствовать правилам. Если хочешь поменять правила, на следующем ретро можешь обсудить.
- я буду жаловаться! (так и хочется добавить "прокурору!" :))
Две недели назад первый раз так побеседовали. Потом тишина на неделю, и новая итерация. Романтика.
Прямо "Санта-Барбара".
В процессе написания гении даже приходили к мнению что оказывается все 7 и не нужны... И (о боже!) заставляю их переименовывать переменные, методы и классы, чтобы имя хоть немного соответствовало тому, что они делают.
А время на конструирование абстрактных фабрик для абстрактных фабрик остаётся? Если ещё скажете, сколько примерно зарабатывают ваши "ветераны", будет совсем хорошо.
Чёта мне кажется, что даже у меня ситуация получше. ))
Это может быть совершенно обычный код без криминала.
У нас например в кодинг стандартах написано, что сначала должны быть перечислены все using System.*, потом все остальные. Разумное это требование или нет - вообще не важно.
Есть стандарт кода и ему надо следовать. Если не нравится - нет проблем, стандарты кода можно поменять, но им все равно надо следовать.
Разве нет штуки, которая сама сортирует юзигни по вашему шаблону после любой команды автоформата (ctrl + K, D, например)?
У меня обычно этими юзингами почти полный экран засориться может. Ещё после рефакторинга могут быть дырки между ними (после удаления строк). Я всю портянку с юзингами просто сворачиваю. После появления в Студии фичи автодобаления юзингов, я туда даже смотреть перестал. Максимум, если какой конфликт имён классов. Но это тоже не требует уделять внимание юзингам - просто соглашаешься на какой-нибудь предложенный Студией рефакторинг, типа добавить полное имя класса.
Вот бы кто подсказал, как в Студии удалить строку без замены её на пустую строку. Я обычно использую окошко "найти-заменить", где в "заменить" оставляю пустое место. Но это оставляет пустые строки в коде.
Значит постоянные терки по поводу что тут, что там...
а как учитывается то, что в .НЕТ не только System.*?Никак. Требование - сначала System.*
Но можно ввести и иерархию:
1) System.*
2) Все 3rd party
3) Свои
Наф оно нужно вообще? Это ещё тупее, чем "пробелы против табов".
Наф оно нужно вообще?
От куда ж мне знать? :) Но требование такое есть. Будь любезен исполнять.
Это ещё тупее, чем "пробелы против табов".
Пробелы против табов - это как раз не тупо. Тут важно, чтобы у всех были одинаковые настройки. Если у кого-то настройки отличаются, то трындец.
можно пример кода, который ты не пускаешь в прод из-за нарушений конвенции?
Как уже отметили, совершенно обычный код, без особого криминала. Просто нарушающий принятые соглашения. Если я с криминалом нахожу, мне никакие конвеншены не нужны :)
Например, вот такая фигня (кто на яве пишет, поймёт, остальным поясню, имя класса поменял, мало ли, Datenschutz и всё такое):
/** * identisch zu * @param adresse AdresseMitLand */ public Boolean identischZu(AdresseMitLand adresse) { return true; }
Начинаем с вопроса - а нафига мне метод сравнения, которые ничего не сравнивает? Нет ответа. Почему в документации не написано, мол, временная реализация, в настоящий момент, говорит что все всем равны, но надо использовать там-то и там-то потому что в будущем будет заменено.
Где описание параметра, где описание результата? Метод-то публичный.
Почему Boolean? (объект - оболочка вокруг примитивного типа boolean). Он может быть null. Зачем нам такое счастье? Мы (даже в конвенции написали) "используем примитивные типы если нет причин использовать врэпперы, причина описывается в документации".
До сих пор всё такое счастье тупо коммитилось, потом проходило 3 года и все сидели чесали репу а нафига ж такое сотворили, и чего хотели этим сказать.
нафига мне метод
------
Как зачем?
Дырку в интерфейсе затыкает...
даже в конвенции написали
------
Ну это только из-за объема писанины/поддержки.
Есть охрененные преимущества когда все элементы строго типизированы - просто дооределяешь что можно делать и не беспокоишься, скажем, об сложение количества чего-нибудь с телефонным номером... причем - на этапе трансляции.