Я вынужден писать плохой код. Как мне сохранить лицо? [закрыто]

69

Я только начинающий разработчик, но моя работа заставляет меня работать с действительно ужасным PHP-кодом (подумайте о худшем PHP-коде, который вы когда-либо видели; затем подумайте о коде вдвое хуже). Я обычно стараюсь исправлять ошибки и бороться с использованием кода, чтобы добавить новые функции. Иногда мне приказывают заставить вещи работать как можно скорее, что чаще всего включает грязные хаки.

Ранее продукт был с открытым исходным кодом, и я обеспокоен тем, что в будущем он может стать открытым. Мне было бы стыдно, если бы кто-то (особенно потенциальные работодатели) мог найти мое имя рядом с некоторыми из наборов изменений. Что я могу сделать, чтобы защитить свое доброе имя?

Я не уверен, что это актуально, но я добавлю, что ни мой начальник, ни мои коллеги не хотят признавать, что код плохой, но я не уверен, что могу обвинить их в этом - для многих это Первая работа.

Стыдно
источник
21
Как вы вынуждены писать плохой код? Почему вы не можете встать, перестать вводить свое имя в плохой код и объяснить проблему, решение, затраты времени, усилий и денег, а также преимущества решения проблем для ваших начальников сейчас?
Томас Оуэнс
17
"поощрение быстрых и грязных хаков"? Поощряя? Что хуже. Ваша гордость (и поиск новой работы) или приверженность этой работе. Может быть не плохо отстаивать то, что правильно. Что тебя останавливает? Угрозы насилия? Шантажировать? Уголовное судопроизводство? Шутки в сторону. Что мешает вам писать хороший код? Пожалуйста, будьте конкретны . И честно.
С.Лотт
113
Если это утешит, то даже хороший код, который вы пишете сегодня, будет выглядеть плохо через пять лет.
Kyralessa
7
Признайте, что PHP поощряет «быстрое и грязное», не препятствуя этому и не делая его легким делом. Я бы сказал, что PHP превосходит в «qucik and dirty» лучше, чем любой другой язык, за исключением, может быть, Perl, когда этот импульс установлен, он Трудно остановиться, особенно если руководство поощряет поведение. В конце концов, код, который работает, независимо от практики, более ценен для компании, чем вообще никакой код.
7
Извините , но есть правильные и неправильные способы написания кода. Правильный путь использует стандартные отраслевые практики; плохой способ взламывает дерьмо и говорит, что это "работает".
Уэйн Молина

Ответы:

132

Рим не был построен за один день, но вы можете быть хорошим бойскаутом. Каждый раз, когда вы касаетесь кода, оставляйте его лучше, чем это было раньше. Не требуется много времени, чтобы использовать разумные имена функций, хорошие стандарты кодирования и добавлять достойные комментарии, когда вы работаете.

Я думаю, опасность заключается в том, что все или ничего. То, что вы не можете тратить время на написание элегантного кода, не означает, что вы должны полностью сдаться и написать мусор.

Эми Анушевски
источник
2
+1. Вам не нужно жертвовать всем, во что вы верите, чтобы сделать это быстро.
tdammers
4
+1: для всех или ничего - очень верно.
Umber Ferrule
3
Правило Бойскаута в чужих руках может быть именно тем, что вызывает проблему, потому что определение «разумного имени функции» его старшего может быть «bolChkLst» (венгерская нотация для соответствия стилевому руководству, ChkLst вместо CheckList, потому что «чем короче, тем лучше» «). Вот некоторые реализации правил бойскаутов, с которыми я сталкивался на разных работах, которые я старался не выполнять: «Объединяйте функции, чтобы их было как можно меньше», «Не переносите аргументы через 3 вызова, вместо этого используйте глобальные переменные», «используйте встроенный SQL в представлениях для сделай это быстрее »
Кеппла
40
+1 заEvery time you touch the code, leave it better than it was before.
Qwerky
3
+1. Если у вас есть много явных улучшений, любой, кто действительно посмотрит на ваш вклад, не подумает, что вы дурацкий программист. Потенциальные работодатели, которые полагают, что вы дрянные, потому что проект дерьмовый, не те люди, на которых вы хотите работать.
Мэтью Прочитайте
59

Согласитесь с С.Лоттом из комментариев * (на этот раз :) Никто не заставляет вас писать плохой код. Дело в том, младший разработчик. часто (этот сайт также виноват в этом) теряются в лучших практиках, "прекрасном коде", ... как бы вы это ни называли ... и они мало что делают; или они делают это, но тратят много времени. Говоря им, что они пишут плохой код (который также работает), он получает, чем «через это», просто заставляет их что-то доставлять. Со временем это приводит к тому, что (теперь уже не :) младший разработчик очень быстро находит быстрое и грязное решение, но все остальное время тратит на его улучшение. Со временем вы узнаете больше и в какой-то момент вы начинаете предлагать быстрые и грязные решения, которые на самом деле являются хорошим кодом.

Но если бы вы пошли своим путем и попытались написать идеальный код с самого начала, скорее всего, вы бы потратили много времени и почти ничего не сделали.

Так что ... пишите плохой код, ... его много ... код, который едва работает, а затем ITERATE. Каждая итерация чуть лучше!

Никто не написал идеальное решение с первого раза.

* это было бы короче, был бы комментарий.

ладья
источник
1
+1 Я полностью согласен с этим ответом. Я бы проголосовал за тебя дважды.
Вит Пи
3
Я согласен. Это отличный способ преодоления «паралича анализа», который может проявиться, когда вы попытаетесь найти «идеальное» решение проблемы. Я написал нечто похожее на StackOverflow .
Kyralessa
4
+1. Я уже читал это о программистах (но не знаю источника): двум группам было поручено создавать гончарные изделия в течение определенного периода времени. Один для создания предмета наилучшего качества, а другой для создания как можно большего количества предметов. В конце концов, последняя группа предоставила предметы лучшего качества, потому что повторение - это путь к мастерству. Созерцание само по себе ни к чему не приведет. В конце концов, мы все учимся на собственном опыте, и наш страх сделать что-то не то - это то, что удерживает нас от попыток, возможно, неудач, но определенно учиться на своих ошибках.
back2dos
1
Как следствие, используйте репозиторий! Даже если это персональный файл, который вы настроили на своей машине. После того, как вы начнете их использовать, вы поймете, насколько это полезно, чтобы сделать кучу изменений, выяснить, что это не сработало, и выполнить откат. Мой личный фаворит - ископаемое
Спенсер Рэтбун
1
«Итак ... напиши плохой код, ... его много ... код, который едва работает, а затем ITERATE. Каждая итерация чуть-чуть лучше!» Что делать, если вы просто никогда не выполняете итерации, потому что новые проекты продолжают накапливаться ... и вы начинаете понимать, что то, что вы выдвигаете в виде альфы, имеет тенденцию держаться до тех пор, пока проект не умрет. Что, конечно, ускоряется в результате изначально дерьмового кода и отсутствия обновления. Я думаю, что именно такие ситуации заставляют многих младших разработчиков думать, что им нужно написать "красивый код" с самого начала ...
Сергей
40

Комментарии к коду - ваш друг здесь.

Всякий раз, когда вы чувствуете, что вам нужно написать какой-нибудь дешевый хак из-за давления, просто скажите что-то вроде: «Этот код выполняет X из-за нехватки времени. В идеале, я бы вместо этого сделал Y.

Тогда, если потенциальные работодатели увидят это, они поймут, что вы предпочитаете писать хороший код, но вы также готовы адаптировать свой стиль кодирования к потребностям бизнеса. Большинство работодателей посчитают оба из них хорошими вещами.

Боб Мерфи
источник
4
Именно так. Комментарии и коммит-сообщения тоже. Я никогда не делал этого, но было бы интересно оценить разработчика на основе ничего, кроме аннотированных наборов изменений, приписываемых им в некоторых vcs.
Тимдев
ну, вы можете сказать кое-что о ком-то, чьи комментарии коммитов «исправлено», «сделано», «
бла-бла-блах
+1 Я делал это несколько раз, и в случае с равноправными разработчиками это просто работает.
Яцек Прусия
7
Обычно я удаляю такие комментарии, когда сталкиваюсь с ними. Комментарий, помеченный как TODO или FUTURE-ENHANCEMENT, заслуживает того, чтобы остаться, но извинения - просто мусор.
Кристофер Джонсон
1
Согласитесь с включением объяснения того, почему было реализовано неоптимальное решение (и каким может быть это решение), я делаю это время от времени. Однако я не думаю, что за это стоит стыдиться или извиняться. Это просто означает, что в то время, когда вы работали над этим фрагментом кода, были более важные вещи, и что данной реализации было достаточно.
Джастин Омс
10

Это зависит от того, как они заставляют вас.

По моему опыту, есть две возможности:

Вы чувствуете себя вынужденными из-за плотного графика, устаревшего кода и т. Д.

В этом случае, как уже сказано в большинстве других ответов, вам нужно «оптимизировать для крутости». У вас может не быть времени переписать кодовую базу в MVC, но в качестве первого шага, например, вы можете перестать склеивать свой SQL вручную и вместо этого написать хороший execute_sql($query, $params), который закладывает основу для таких абстракций, как fetch_customer($filter_params)и т. Д. Помните, всего наилучшего в конечном счете, существуют практики, когда ваш начальник получает продукт раньше, поэтому существует только конфликт между тем, сколько времени инвестировать в будущее по сравнению с текущим.

Когда вы устанавливаете правильный контекст («в течение 6 месяцев, не получая дополнительного времени, я реорганизовал монолитный код в MVC»), вы должны оставить свое имя в коде и попытаться гордиться, как терапевт, который учит жертву инсульта скажи отдельные слова снова.

Вам явно приказано реализовать его так, как вы считаете непригодным

Попытка отделить представление от модели не выдерживает проверки, потому что «это слишком сложно, почему вы просто не делаете простые SQL-запросы?». Вы execute_sqlполучаете консервы, потому что «кодер с дисциплиной не нуждается в этом».

Это дело плохо. По моему опыту, это обычно происходит с микроуправлением и лидерами команд, которые получили повышение по политическим причинам, а не за свои успехи. Реальная проблема заключается в том, что вы отвечаете за что-то (код), который вы не можете контролировать (вы должны делать это по-своему). Лучшее решение - решить основную причину (то есть то, что с вами обращаются как ворчание). Второе лучшее (и, по моему опыту, обычное) решение - это выйти.

Положительным моментом является то, что в этом случае ваше имя вряд ли будет опубликовано в любом случае, потому что лидер команды берет на себя ответственность за весь успех.

keppla
источник
8

Я вполне уверен, что ваш начальник требует от вас быстрой доставки чего-либо, но не то, чтобы вы предпринимали дополнительные усилия, чтобы сделать это намеренно плохим. Это означает, что всякий раз, когда у вас есть выбор между действительно плохим кодом и чуть менее плохим кодом, и оба варианта будут занимать у вас одинаково много времени, вы выбираете чуть менее плохой вариант. Это краткосрочное решение, и оно не требует никаких усилий вообще.

В долгосрочной перспективе поговорите со своим боссом. Объясните, как 15-минутное инвестирование может сэкономить часы. Убедитесь, что у вас есть убедительные примеры - не такой, как «если бы я сделал это и то, что здесь, я надеюсь, что я смогу сделать то же самое в следующем году», а, скорее, «посмотрите, вот я это сделал, и потому что из этого мне потребовалось три часа, чтобы найти проблему там; если бы я сделал это так и так, ошибка была бы очевидна сразу ". Предупреждение здесь: хотя элегантный и поддерживаемый код чувствует себя намного лучше и эффективнее, иногда это не так. Бывают ситуации, когда небрежное быстрое исправление вполне оправдано: иногда вы пишете одноразовый код, иногда сохраняете устаревший кусок мусора, ожидая реального; иногда польза от правильного решения не

Если ничего не помогает, найдите другую работу.

tdammers
источник
3

Никто не заставляет вас писать плохой код. Вы можете изменить ситуацию и сделать ее позитивной. Изменение пионера для политик и процедур. И вы не всегда можете быть «да» мужчиной / женщиной. Если они говорят, что им нужна функциональность x до конца дня, скажите им, что это невозможно, но дайте обоснование, почему это действительно так. Там, где есть проблема, предложите решения. Не просто слепой глаз, или еще хуже ... добавляя к этому.

Ваш девелоперский магазин не первый, у которого есть строгие сроки, но все еще есть желание поддерживать хорошо спроектированный код.


источник
4
-1: В США, если ваш начальник скажет: «Напишите быстрый дерьмовый код», и вы откажетесь это сделать, вас могут уволить. Неповиновение прямому указанию сделать что-то законное является основанием для принудительного прекращения. Так что, хотя это может не "принуждать" вас, альтернативы тому, что говорит ваш босс, могут быть гораздо хуже.
Боб Мерфи
Все зависит от вашего подхода. В идеале у вас должна быть превосходная фигура, которая будет ценить ваш опыт, и ваше мнение должно быть высоко оценено. Часто люди, диктующие сроки, не являются разработчиками, и они должны учитывать, что возможно, а что нет. Конечно, вы могли бы написать «дерьмовый» код под прикрытием, но откат может быть достаточным, чтобы все были довольны: хорошие результаты из хорошего кода.
1
Идеальные превосходные показатели, на которые вы на самом деле не работаете, великолепны, но вам нужно угодить тому, кто подписывает вашу зарплату. Заставить коллекторов звонить в любое время, когда ты на самом деле без работы, - это отстой.
Боб Мерфи
1
Это больше, чем просто личный интерес. Я был менеджером и предпринимателем, и я могу заверить вас, что если все, за что платит клиент, быстро и грязно, то хорошая работа, которая теряет деньги, приведет к увольнению людей. Мне пришлось однажды уволить целую компанию, и я больше никогда не хочу этого делать. Так что, хотя я определенно выступаю за принятие моральных позиций ... написание дерьмового кода обычно не является моральной проблемой, и в какой-то момент нужно выбирать между личными предпочтениями и практическими проблемами людей, имеющих или не имеющих работу.
Боб Мерфи
1
Я бы почти никогда не выступал за крупномасштабное переписывание большой системы, но это не значит, что код, который вы пишете в будущем, должен быть ужасным.
PeterAllenWebb
3

Любой компании необходимо найти баланс между написанием блестящего кода, обширной документацией и модульными тестами и выходом продуктов на рынок в разумных пределах бюджета и времени.

Лучший код в мире не имеет значения, если он устарел до того, как его выпустят.

Быть прагматичным - значит пытаться найти этот баланс. Быстрое исправление функций может быть коммерчески важным в данный момент, но это не значит, что так будет всегда.

Требуется большой опыт (больше, чем у большинства программистов), чтобы правильно подобрать баланс. Это очень легко пойти на любую крайность. Найти средний путь сложнее.

Я не говорю, что твой босс прав. Как программист, есть искушение пытаться постоянно создавать красивый код, который не является коммерчески жизнеспособным. Помня об этом искушении, вы можете понять, что некоторые из этих хаков не так уж и плохи.

Большая часть кода по прошествии достаточного количества времени будет содержать хаки для конкретных ситуаций, которые были слишком дорогостоящими для рефакторинга в общую структуру.

Джереми Френч
источник
2

Я хотел бы добавить, что вы не должны просто продолжать, как вы делаете это сейчас, ничего не говоря и просто взломать и взломать.

Вы должны встать и указать на конкретный код и сказать им, что отстой в этом. Будьте конкретны и используйте метрики кода для поддержки своих утверждений. Нет ничего более неловкого, чем утверждать, что код плох, хотя на самом деле это не так, вы просто не понимаете, что делается.

Я уверен, что есть много инструментов, которые можно бесплатно использовать для анализа php-кода http://en.wikipedia.org/wiki/Code_analysis.

Также, конечно, это http://en.wikipedia.org/wiki/Code_smell

Прочтите это, подытожьте, что вы можете найти в вашем приложении, и, конечно, перечислите альтернативы . Это плохая практика - просто вставать и кричать «Мне не нравится, как это делается», не представляя альтернативного (предпочтительно) лучшего способа сделать это.

Быстрые взломы стоят денег. И не воспринимайте это как нечто негативное - вы можете многому научиться на этой работе сейчас и можете извлечь выгоду из опыта, который вы сейчас получите в своей следующей.

НТН

UrbanEsc
источник
0

Прежде всего, вы действительно используете какой-либо контроль версий, верно? Если нет, начните оттуда. Это поможет вам в первую очередь и быстро примет остальная часть команды.

Если у вас есть контроль над исходным кодом, вы не должны указывать свое имя в коде, просто укажите название вашей компании. В плохом коде обычно размещают историю изменений в комментариях в верхней части файлов, это лучше делегировать управлению исходным кодом.

Теперь, что касается качества кода, вы не сможете изменить его как подход большого взрыва. Медленно, один за другим, добавляйте новые подходы к различным вопросам. Если вы все сделаете правильно, это сэкономит вам время, и вы будете использовать его для улучшения общего качества.

Чтобы привести мой пример, я однажды прибыл в середине проекта с приложением Perl / CGI, где весь HTML был в коде. Все приложение было в одном файле без четкой структуры. Ничего не было версионировано. Я начал с настройки репозитория CVS (в то время SVN не был доступен), наложив на него веб-интерфейс для клиента. Сначала я сам обрабатывал коммиты от моих коллег. Затем я разделяю все методы на разные модули (файлы). В этот момент коллеги начали внедрять CVS. Затем я переместил HTML из кода. Затем, каждый раз, когда мне приходилось вносить изменения в какую-то часть кода, я тратил немного времени на его рефакторинг. В итоге скорость разработки настолько возросла, что клиент был очень доволен. Они попросили бы косметическое изменение, и вместо того, чтобы мы сказали им, что это займет 2 дня,

Однако этот подход будет работать, только если вы достаточно хорошо освоите весь код. Если вы не понимаете общую картину, если некоторые части приложения остаются неразборчивыми, это сделает вашу работу действительно сложной.

И последнее, полное переписывание - иногда единственное решение, но обычно очень трудно оправдать его стоимость для руководства.

Эрик Дарчис
источник
0

Поскольку вы начинающий разработчик, это на самом деле хорошая вещь. Быть брошенным в середину большого старого беспорядка кода научит вас гораздо больше о том, чего не следует делать, чем просто работать над совершенно «чистым» кодом. Воспользуйтесь ситуацией и узнайте, как реорганизовать плохой код и постепенно преобразовать его в нечто более управляемое. И не жалуйся на это как можно скорее. В этом суть - учитесь рефакторингу и очистке кода, делая вещи в сжатые сроки. В конце концов, любой может написать идеальный код, если у него есть бесконечное время.

GrandmasterB
источник