Как программисты, мы часто гордимся нашими навыками и придерживаемся очень сильных мнений о том, что такое «хороший» код и «плохой» код.
В любой момент в нашей карьере у нас, вероятно, упала какая-то устаревшая система, и мы подумали: «Боже мой, этот код - отстой!» потому что он не вписывался в наше представление о том, каким должен быть хороший код, несмотря на тот факт, что он мог быть вполне функциональным, поддерживаемым кодом.
Как вы готовите себя мысленно, когда пытаетесь сосредоточиться на работе другого программиста?
Ответы:
Для любой унаследованной кодовой базы правильный способ подготовить себя мысленно к работе с ней - начать с написания для нее модульных тестов .
Будь это отстой или нет, сначала нужно иметь уверенность, чтобы иметь возможность изменить его, не ломая вещи!
источник
Я не могу сказать вам, сколько раз я говорил «О, это совершенно неправильно», переписывал это, а затем выяснил, почему этот код был написан именно так. Обычно это неочевидное неписаное / недокументированное требование. По крайней мере, это верно для старого кода, над которым я сейчас работаю.
источник
Вы ждете, пока не проработаете достаточно долго, чтобы наткнуться на свой собственный дерьмовый унаследованный код. Это унизительный опыт и часть процесса обучения. Я скучаю по тому времени, когда я все знал.
Я думаю, что у Fosco была отличная возможность, чтобы иметь возможность поместить это в контекст возможных ограничений времени и функциональности. Иногда вы вынуждены заставить что-то работать.
И наконец, поймите, что именно поэтому у вас есть работа.
источник
Смейся над этим, старайся не судить об этом слишком сильно, а просто пройти через это. Быть настоящим нацистским нацистом нехорошо ... Есть определенно такая вещь, как «достаточно хорошая» или даже «достаточно хорошая в то время». Во многих случаях что-то разрабатывается или перевязывается, чтобы исправить кризис, а затем никогда не пересматривается.
Если это действительно плохо, посмотри, сможешь ли ты обосновать переписывание этого ... если это не важно, просто войди и уйди.
источник
Выберите свои сражения. Знайте разницу между «я бы так не писал» и «это создает серьезную проблему поддержки или поддержки»
источник
Часто я нахожу полезным почувствовать то, что первоначальные разработчики считали хорошим.
Ищите шаблоны и темы того, что они делали, и часто вы обнаруживаете, что вначале были причины для некоторых странных решений.
Иногда вы обнаруживаете, что оригинальный разработчик на самом деле был плохим, но у вас есть представление о том, какие плохие они продавали тогда.
В любом случае, после этого вы должны иметь более четкое представление о том, где вы могли бы начать переписывание или как бы выглядело быстрое исправление без необходимости рефакторинга всего.
Самое главное, не сразу предполагать, что только потому, что это уродливо, это плохо. Ничто не заставляет вас выглядеть более глупо, чем тратить время на модернизацию чего-либо, только чтобы обнаружить, что оно менее способно, чем оригинал.
источник
Если у меня есть время, я нападаю на него и убиваю плохо написанный код.
Это война.
источник
Я всегда полагаю, что уродливый код - это код, который видел много отладок со многими тонкостями, которые не очевидны при беглом осмотре. Если я его заменю или глубоко перепроектирую, мне нужно убедиться, что я понимаю абсолютно все аспекты того, что делает код. Если у меня нет времени, чтобы добраться до сути, я должен пойти на минимальный риск, делая минимальные изменения для достижения моих целей.
Обычно я делаю небольшое исправление / изменение и предлагаю функцию для дальнейшей разработки, которая извиняет, что надо разобраться в сути дела и провести рефакторинг целиком. Затем я делаю все возможное, чтобы игнорировать код, пока функция не окажется в дорожной карте.
источник
Когда устаревшему коду более пары лет, он мог быть написан таким образом из-за ограничений в языке или операционных системах и т. Д., Которые существовали на момент написания кода. Эй, теперь это выглядит плохо, но было ли плохо тогда? Я пытаюсь предположить, что у разработчика была причина для того, что он или она сделали. Эта причина может больше не применяться, но если предположить, что такая причина существует, а не просто общая некомпетентность (молодые программисты будут думать о вашем коде то же самое через 5 лет, может быть, даже меньше), это заставит вас меньше злиться на это. Если он работает и с ним нет проблем, берегите этот унаследованный код, независимо от того, насколько он уродлив, поскольку он позволит вам решать более интересные проблемы.
источник
В прошлом, когда у меня не было времени писать на чужом коде и придавать ему «мой» стиль, мне приходилось прибегать к очень ответственному выполнению задач:
Что я пытаюсь добавить к этому коду / исправить / сделать работу?
Что я делаю, работая над этой целью? Если нет, прекратите это делать и вернитесь к последнему разу, когда я вносил ориентированные на задачи изменения.
Я закончил с этой задачей? Если это так, прекратите возиться с кодом, даже если он выглядит так, как будто он написан неумной марсианской почвой.
источник
Если вы не готовы владеть кодом и необходимыми исправлениями в будущем, не трогайте его. Вы преодолеете тенденцию хотеть что-то исправить, когда сломаете что-то, что вы не написали, потому что вы недостаточно хорошо изучили это, прежде чем погрузиться, и вам понадобится 2 дня и пожарная тренировка, чтобы снова заработать. ,
Не поймите меня неправильно ... есть законные причины для рефакторинга кода, но если бизнес требует, чтобы код работал, и вы «исправляете» его, не зная последствий, прежде чем приступить к работе, вы просите о причинении вреда ,
источник
Рефакторинг за один раз может быть полезным, но будьте особенно осторожны с изменением любого крошечного аспекта того, как на самом деле ведет себя код, если вы не понимаете, почему это поведение существует и на что оно влияет. К сожалению, код, который нуждается в этом хуже всего, иногда сложнее изменить, не затрагивая его поведение, хотя обычно вы можете исправить его части или, по крайней мере, прокомментировать его.
источник
Я работаю почти исключительно над унаследованным кодом в эти дни, и я всегда думаю: «О боже, что они думают?» , Затем я начинаю писать модульные тесты для кода, и это тот момент, когда мне действительно нужно проанализировать поток управления и зависимости.
Иногда невозможно легко написать модульные тесты. Но пока я пытаюсь это сделать, я получаю информацию о коде и пойму, почему он был написан именно так. Иногда это докажет, что код действительно беспорядок, иногда я могу понять мыслительный процесс оригинальных разработчиков и могу добавить полезную документацию или переписать кусок кода, когда я хочу добавить новую функциональность.
Для меня это помогает думать, что мой код будет выглядеть так же, когда я вернусь к нему через 12 месяцев .
источник
С опытом приходит суждение узнать, когда код действительно плох, а когда он просто написан в другом стиле. Если он идеально функционирует и обслуживается, и имеется хорошее автоматизированное тестовое покрытие , то это неплохо, и вам просто нужно открыть свой разум. Вы, вероятно, чему-то научитесь. Плохой код не является функциональным и обслуживаемым.
Вот некоторые маркеры действительно плохого кода:
Отсутствие автоматизированных тестов не означает, что код плохой, но означает, что проект плохой.
Это не вопрос вкуса; эти методы делают обслуживание программы намного дороже.
Примите тот факт, что для успешной работы над новой кодовой базой требуется некоторое время. Если оно «идеально обслуживаемо» и имеет высокий охват тестированием, это займет меньше времени, но все равно не произойдет немедленно. Если код плохой, то первое, что я делаю, это предупреждаю заинтересованные стороны, что он в плохом состоянии, и первоначальный прогресс будет медленным. Если они скептически относятся к делу, то я подтверждаю свое утверждение, показывая им пример проблем в реальном коде и объясняя, как оно отличается от лучших отраслевых практик.
источник