Добрый день! Вопрос такой: хорошие программные продукты с хорошей грамотной архитектурой уровня кода (т.е. отношения классов, модулей, а не архитектура в общем, типо монолит, микросервис и т.д.) и такой же хорошей реализацией на практике это миф, или реальность? Мой опыт как разработчика еще не так велик, всего год коммерческой разработки, за этот год я учавствовал в двух проектах. И в них обоих был говнокод. Обращения в базу напрямую в контроллерах минуя модели, репозитории или сервис слой (хотя там была такая возможность, были даже готовые методы для этого, но запросы все равно писались напрямую в моделях), высокая связанность классов, где порой чтобы понять как работает метод нужно разобрать 5-6 классов связанных с данным методом. Порой на мои вопросы об устройстве кода, старшие товарищи попросту не могли ответить как оно работает, хотя этот код писали они и коммит с этим участком был неделю назад, а то и меньше. И вопроса бы не возникло как такового, если бы в обеденный перерыв эти же самые люди, не обсуждали высокии материи, о качестве кода, о паттернах, принципах разработки и т.д.
Что было бы интересно узнать, это не вопрос а на самом деле наверное опрос: вы считаете что хорошо проектируете и реализуете свою задумку в коде? На сколько обьективна ваша уверенность если ответ положительный?
Вопрос не холивара ради, просто очень часто слышу от людей филосовские рассуждения о том какой должен быть код, но на деле эти товарищи пишут такое, что хоть стой хоть падай, или может просто из-за недостатка опыта (всё таки всего год боевой разработки) мне стоит думать, что не их код плохой, а просто я недостаточно умен для понимания их кода? В общем я запутался, помогите разобраться, пожалуйста.
Вопрос хороший на самом деле. Мой опыт работы, и тот опыт о котором я слышал как раз говорит о том, что в продакшн код всегда такой как вы выразились, когда эти самые программисты рассуждают о высоких материях, то уже тошнить начинает.
в основном так и есть.
бизнесу насрать на наши модели и архитектуру, ему надо деньги делать и ещё вчера.
если вылизывать архитектуру со старта - никогда не взлетишь. а когда и если взлетишь, поляна будет уже засеяна другими, которые срать–плевали на красоту кода.
это итеративный процесс: сначала столбим делянку как-нибудь (MVP), затем так и живём или приводим её в порядок.
Опыт разработки не дает в полной мере прочувствовать вонь говнокода.
Для этого нужен опыт поддержки. С каждым годом нарушение принципов чистого кода воняет все сильнее.
Владимир Коротенко, как будто говнокодер при переписывании фейсбука сделает его лучше.
Чтобы переписать фейсбук, приходится сначала определить, где его архитектура создала бутылочные горлышки. Иначе это переписывание - манки-бизнес.
Мой вопрос скорее не о говнокоде, а о людях которые говорят, что надо писать хороший, красивый, чистый код, которые обсуждают паттерны, но сами же даже не следуют MVC, который с самой своей базы зашит во фреймворк. Зачем люди на серьезной лице это обсуждают, если 90% хер на это все клали и делают как считают сами логичным, а не как они же и говорят "правильно"
DollyPapper, а еще люди говорят, что важно вести ЗОЖ и заниматься спортом. Сидя на диване с пивом и чипсами. Люди - они такие, да...
Говнокодинг неизбежен, если разработчик - макака, которому нужно срочно реализовать фичу ко вчерашнему числу, а что там будет с проектом - это не его зона ответственности. Но если он вырастет, слегка выдохнет и сможет смотреть на код с уровня повыше, оценивая возможности его рефакторинга, например - тут ему все эти умные вещи и понадобятся, и он сам будет удивляться, как можно было их так бездарно игнорировать.
DollyPapper, да, надо писать хороший и красивый код.
но так же надо блюсти интересы тех, кто им (этим кодом) пользуется и кто за этот код платит.
в этом и задача: найти золотую середину между откровенным говнокодом, красотой и сроками.
какие личности? ну кроме вашей завернутости на нет'е?
тому же фэйсбуку им бы не помешало переписать критические места да хоть и на решетке
да, можно было бы переписать с нуля, как например, сделал твитер (правда не на решетке), но можно и нет. вот фейсбук решил, что их устраивает "нет"; вы реально считаете себя умнее/разумнее/прагматичнее мордокниги, где этим вопросом занимается далеко не один человек?
Хорошо, тогда я не понимаю, какой смысл обсуждать эти все паттерны, "технический долг", культуру разработки, принципы хорошего дизайна, цитировать дядюшку Боба, если ты в хер не ставил все эти принципы и пишешь руководствуясь только своей внутренней логикой, как это должно быть. Вот этот момент мне скорее не понятен.
DollyPapper, ну, вы же, наверное, понимаете разницу между "знать ПДД" и "соблюдать ПДД".
Причем оба варианта лучше, чем не знать ПДД совсем. Если вы, конечно, за рулем.
"Все эти" не обязательны. Можно подпирать говно палками и плыть дальше.
Они понадобятся, когда приходит понимание, что плыть дальше некуда, и возникает вопрос, как спасать тонущее под весом технического долга в условиях, когда оно должно продолжать работать.
Просто обычно этим и занимаются не джуны с годом опыта.
Adamos, понял вас. Значит просто проект еще в том состоянии, когда плыть есть куда, и качество кода зависит не только от самого разраба, а так же от срока жизни проекта, когда делать качественнее уже будет необходимо.
DollyPapper, разраб после одного-другого проекта, который пришлось сильно переписывать, чтобы его вообще можно было поддерживать, обычно начинает писать аккуратнее сразу. А вот тому, кто в это дело не вступал, действительно свойственно "спрямлять дорожку", делая криво. В начале, полагаю, все через это проходят.
Всякое бывает. Я тоже хочу на работе писать код, оборачивая все в сервисы, вынося запросы в репозитории и писать тесты перед логикой)) Но когда очередная фича нужна как щит от летящей стрелы прямо в сердце на все это закрываются глаза и пишется как есть. Бывает правда потом когда позволяет время порефакторить, ди я часто говорю о том нужно бы заниаматься этими вещами, так как не дают работать
1. Сделай бизнесу денег
2. Покажи что ты умеешь делать бизнесу деньги
3. На волне успеха выбей время на рефакторинг
4. Преврати говнокод в чуть меньший говнокод
5. Повторить N раз
6. Profit!
Благими намерениями мостится дорога в ... говнокод.
Вот здесь надо быстро, лень смотреть, зафигачу прямой запрос.
Вот в этом классе сделаю это поле public. Тест провалился, хорошо, добавлю отдельный if для этого случая. А вот здесь какая-то хрень написана, ладно, напишу ещё один метод, делающий то же самое, но по-моему. Ой, а в этой либе фича новая. А вот тут жалуются, что медленно, пох, закэшируем данные... В общем, даже хорошо задуманный проект со временем обрастает вот этим вот всем. Ни разу не видел, чтобы было по-другому (видел, кривую архитектуру изначально, ещё видел полное отсутствие архитектуры как таковой).