Когда вы должны использовать плохой дизайн, чтобы закончить проект?
Существует много разных плохих практик, таких как утечки памяти, которые легко вставить в программу в случае аварии. Иногда они могут даже судить вашу программу вместе.
Я сейчас работаю над проектом, и он сработает, если я намеренно добавлю утечку памяти в свой код. Если я устраню утечку, код вылетает. Очевидно, что это плохо, и должно быть (и будет исправлено) в ближайшее время.
У меня вопрос: когда вы решите доставить код в таком состоянии, если невозможно вовремя выпустить код без этих плохих методов?
10 ответов
Если можно предположить, что влияние проблемы на фактическое использование системы будет нулевым или незначительным, а дату доставки не может быть перенесена назад, и ее можно исправить в течение определенного периода времени, прежде чем влияние проблемы станет более чем незначительным, отправьте ее,
Очевидно, что это не идеально или даже не рекомендуется, но в этот момент вы явно загнаны в угол. Иногда нет хорошего выбора, но прагматизм должен победить формальную правильность. Если у приложения есть утечка памяти, но мы можем разумно ожидать, что приложение будет переработано или перезапущено, или что-то еще, прежде чем утечка станет реальной проблемой, что иногда может быть лучше, чем доставка с опозданием. Это зависит от условий договора и от заказчика.
Всегда лучше хотя бы попытаться отодвинуть дату доставки, но я предполагаю, что вы уже пробовали это, и это не вариант здесь.
Это типично, как только приложение было отправлено, чтобы игнорировать техническую задолженность и двигаться дальше. Разработчики обязаны четко информировать заинтересованные стороны о важности выплаты части этого долга, особенно в таком случае.
Однако, учитывая, что, похоже, клиент больше заботится о дате поставки, чем о правильности, менее вероятно, что кто-либо будет убежден погасить любой долг после того, как вы начнете жить. Это плохая ситуация. Только человек со всеми фактами может сделать правильный выбор.
"У меня вопрос: когда вы решите доставить код в таком состоянии, если невозможно вовремя выпустить код без этих плохих практик?"
Никогда.
Что вы делаете вместо этого: расставьте приоритеты и сосредоточиться.
Если то, над чем вы работаете, действительно имеет высокий приоритет, и вы его неправильно спроектировали, то чем-то с низким приоритетом нужно пожертвовать. Часто некоторые функции должны быть отложены, чтобы дать вам время сосредоточиться на высокоприоритетной функции, которая не работает.
Если то, над чем вы работаете, действительно имеет низкий приоритет, вам нужно спросить, почему вы не работаете над чем-то с более высоким приоритетом. И вам все еще нужно сосредоточиться и расставить приоритеты. Иногда вещи, которые имеют очень низкий приоритет, должны быть принесены в жертву.
Когда вы не можете сделать "все", вам нужно выбрать то, что вы можете сделать, и это будет безошибочно.
У вас есть только три ручки, которые вы можете повернуть при поставке программного обеспечения, при условии, что разработчики установили фиксированное количество: функции, качество и дата поставки, а если повернуть одну, значит, другим отказано.
Одна из самых сложных вещей в разработке программного обеспечения состоит в том, чтобы создать свой продукт с правильными ручками. Например, ребята из Duke Nukem Forever повернули ручку функций и качества до одиннадцати и выбросили ручку даты корабля в окно. Microsoft часто, кажется, приклеивает ручку даты отгрузки на место и поворачивает ручку функции по мере необходимости, затем отсоединяет ручку даты отгрузки, немного поворачивает ее вверх, приклеивает обратно и продолжает вертеть остальные две. И кажется, что существует бесконечное количество продуктов, которые поставляются постоянно, но никогда не используют те функции, которые им необходимы для успеха.
В конце концов, вам не платят, если вы не доставляете. Низкое качество причиняет вам ужасную боль в долгосрочной перспективе; репутацию трудно восстановить. Практически всегда было правильно отключить функции, если у вас слишком много ошибок. Всегда.
Однако сортировка ошибок так же важна, как и разработка функций. О какой утечке мы говорим здесь? Вы пропускаете байт? Маленький предмет? Тысяча предметов? Целые DLL? Существуют сценарии, в которых, вероятно, лучше немного просочиться, чем не доставить продукт.
А что ты имеешь в виду под утечкой? У вашего приложения есть четко определенный жизненный цикл? Где вы выделяете что-то один раз при запуске, а затем никогда не освобождаете это, пока процесс не умирает? Ну, как долго работает ваш процесс? Ожидаете ли вы запустить несколько копий вашего процесса?
Очевидно, что вы никогда не хотите утечки, и вы должны разработать лучшие практики, которые минимизируют утечки, но в конце вы должны сделать суждение. Может быть, вы можете просто объяснить ошибку своим клиентам, объяснить влияние, и они все равно купят его. Может быть, вы можете исправить это через неделю. Может быть, вам действительно нужно это исправить. Но нам нужно знать больше об этом, чтобы дать хороший совет.
Я скажу, что отправил известные утечки в прошлом. Я не буду говорить, какой продукт или компания, но у меня была ошибка, из-за которой зависимости DLL и безумное управление временем жизни делали невозможным правильное освобождение наших ссылок на определенную DLL после ее загрузки, поэтому в итоге мы просто слили ее. И я все еще думаю, что это было правильно. В других случаях я видел, как умышленно просачивались вещи, чтобы не допустить сбоя стороннего кода, который был написан неправильно (хотя это совершенно отдельная дискуссия).
Но, в конце концов, я считаю, что такие случаи редки, и как только вы определили источник утечки памяти, для ее исправления может потребоваться не больше дня. Действительно, я редко бываю с известной утечкой памяти и исправлением. Это должно было бы быть чем-то, что требовало бы серьезной реорганизации, связанной с изменением модели многопоточности или рефакторингом огромного количества кода, и буквально за один или два дня потребовалось бы выпустить продукт. В этот момент я мог бы просто просочиться в память и пообещать исправление в слабой версии после того, как на ре-архитекторе можно будет провести надлежащее тестирование.
Возможно, когда вы не собираетесь поддерживать код позже, вы не заботитесь о своем клиенте / работодателе, и никакие последствия вашего кода не могут повлиять на вас.
Другими словами, в вашей профессиональной жизни программиста это никогда не будет хорошей идеей.
Если вы работаете на кого-то, кто меньше беспокоится о качестве кода, чем вы, и просто хочет, чтобы вы закончили код любой ценой, тогда я вижу, как вы окажетесь в сложной ситуации. Завершая быстрее, но беднее, вы получите немедленную награду. Тем не менее, вы должны помнить, что даже если ваши работодатели / клиенты не смогут рассчитывать на веху только один раз, ваш плохой код может по-прежнему кусать вас в будущем не только из-за трудностей с его поддержкой, но и из-за негативного впечатления других. может сформировать вас вниз по дорожке.
Мне было бы очень неудобно выпускать с такой известной ошибкой. Это может произойти по-другому.
Вы не указали свою среду или язык, но я предлагаю вам взглянуть на использование инструмента проверки памяти, такого как:
Очистить (доступна пробная версия)
или даже бесплатный, Visual Leak Detector
Для того, чтобы пройти внутреннюю веха, это спорно, хотя до сих пор ничего не было принято, скорее всего.
Чтобы освободить, никогда. Он всегда возвращается и кусает тебя. Если ваше программное обеспечение находится в таком плохом пространстве, что кусок некачественного дизайна превзойдет его, у вас будут гораздо большие проблемы, нависающие за углом
В конечном итоге такое решение должно быть принято заказчиком или руководителем проекта. Отдельные разработчики не должны принимать такие решения самостоятельно или хранить эту информацию при себе.
Скажите им, в чем проблема, и каковы будут последствия, если вы ее не исправите. Если они хотят, чтобы вы отправили его сломанным вовремя, это их зов.
Если вы не хотите работать для людей, которые принимают некачественные продукты, это ваш призыв, но ошибочно думать, что разработчики несут какую-то профессиональную ответственность за игнорирование приоритетов своих клиентов и начальников в отношении качества / стоимости / времени.
Если кто-то может умереть, если вы отправляете плохое программное обеспечение, не делайте этого, но если в худшем случае кому-то придется перезагрузиться пару раз в день, то делайте то, что вам говорят, или найдите другое работа.
Если это единственная (или ограниченная) утечка памяти, и она не растет, и говорят, что она вызывает сбой только при выключении (самый распространенный случай подобных вещей), то это зависит. Если это клиентское / настольное программное обеспечение, и пользователи будут выходить из строя каждый раз, когда выходят из него, я бы сделал это с очень высоким приоритетом. Если его сервер, и единственный, на котором работает сервер, это вы, а все остальное работает нормально, я бы сказал, что можно войти в бета-версию. Но если утечки растут или могут вызывать сбои в "случайное" время, их необходимо устранить как можно скорее.
Никогда, если только вы не заботитесь о бедном разработчике, который будет поддерживать вашу работу впоследствии.