Какова самая необоснованная программа, которую необходимо было поддержать? [закрытый]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
24
задан Community 23 May 2017 в 12:02
поделиться

14 ответов

Я когда-то пытался записать декодер MP3 . Это не работало.

41
ответ дан Peter Mortensen 28 November 2019 в 22:14
поделиться

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

MakeMaker является установщиком для большинства модулей Perl. Когда Вы выполняете "Make-файл. МН" Вы вызов MakeMaker. Если MakeMaker повреждается, повреждения Perl. Perl работает на всем, таким образом, MakeMaker должен работать на всем. Когда я говорю все, что я имею в виду ВСЕ. Каждый причудливый вариант Unix. Windows 95 на. И VMS. Да, VMS.

, Что делает MakeMaker? Make-файл. МН программа Perl, которая пишет Make-файл, который содержит команды оболочки, которые часто выполняют Perl, чтобы создать и установить модуль Perl. Позвольте мне повториться: Это пишет команды оболочки для выполнения Perl. Perl, язык, который заменяет сценарии оболочки.

, О, это может также скомпилировать и связать код C. И это может также статически связать модули Perl в жемчуг. О, и это может управлять контролем RCS. О, и список tarballs Вашего распределения... и zip-файлов. И сделайте весь этот другой материал, неопределенно связанный с установкой модулей.

И это должно сделать все это в портативном устройстве, назад совместимый вид. Это должно иметь дело с вариантами и ошибками в...

  • делают (GNU делают, BSD делают, nmake, dmake, MMS, mmk для именования некоторых)
  • оболочка
  • Perl
  • файловая система (если Вы не думаете, что это - грандиозное предприятие, попробуйте VMS)
  • компиляторы C & компоновщики

Это абсолютно, положительно не может перестать работать и должно остаться 100%, назад совместимыми.

, О, и это имеет очень мало в способе реального дополнительного API, таким образом, это должно остаться совместимым со специальными людьми хакерства Make-файла, должны сделать для расширения его.

, Почему это делает все это? 15 лет назад, когда Perl только работал на Unix, это походило на прекрасную идею. Почему запись целая система сборки, когда можно просто использовать, делает? Perl язык обработки текста; мы будем просто использовать его для записи Make-файла!

, К счастью, существует замена, Модуль:: Сборка , и я прикрепил свои надежды, что она быстро уничтожит MakeMaker. Но его внедрение было медленным и сообщество, очень стойкое к изменению, таким образом, я застреваю, поддерживая MakeMaker.

19
ответ дан Schwern 28 November 2019 в 22:14
поделиться

What’s самая необоснованная программа you’ve должна была поддержать?

Все я когда-либо писал!

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

12
ответ дан Rob 28 November 2019 в 22:14
поделиться

Тот я только что запустил на.

  1. Никакое Управление исходным кодом.
  2. Весь источник редактируется живой. Для остановки ошибок существуют файлы резервных копий как дб-access.php.070821, замусоривший исходное дерево.
  3. код является исключительно хрупким - существует очень мало в способе проверки ошибок и абсолютно никакого падения назад, если это делает.
6
ответ дан graham.reeds 28 November 2019 в 22:14
поделиться

Я когда-то должен был поддержать наследие C приложение, которое ранее писалось и сохранялось некоторыми программистами, которые потеряли желание программировать (и возможно жить). Это имело слишком много WTFs для упоминания, но я действительно помню булеву функцию, которая под различными особыми случаями возвратила бы TRUE+1, TRUE+2, и т.д.

Тогда я читал эссе Roedy Green и смеялся много, пока я не понял, что причина, я нашел его забавным, состояла в том, что я распознал большинство примеров от кода, который я поддерживал. (Что эссе стало немного чрезмерно увеличенным в размере за годы дополнений, но оно все еще достойное внимания.)

5
ответ дан Peter Mortensen 28 November 2019 в 22:14
поделиться

Я раньше был программистом КОБОЛа (дрожь). Весь наш код попал в "необоснованную" категорию. В КОБОЛе у Вас нет пространств имен, все переменные глобальны и существует много обязательного дублирования имен файлов и других ресурсов. Для вызова процедуры Вы устанавливаете глобальные переменные, называете процедуру, и затем осматриваете содержание тех глобальных переменных (или другие, которые могли бы быть установлены).

худшее, тем не менее, поддерживало программу КОБОЛа, записанную, прежде чем я родился (я родился в 1967), и ее метод исключения управления потоком был GOTO. Это была абсолютная путаница и невозможный следовать. Незначительные изменения к типу переменной могли занять дни для разработки. Не было никаких автоматизированных тестов, и ручные планы тестирования никогда не сохранялись, таким образом, каждое изменение потребовало, чтобы новый ручной план тестирования выписывался, сопровождался исчерпывающе и возвращался с кодом.

Как ни странно, это - то, что делает КОБОЛ настолько успешным. КОБОЛ часто выполняется Языком управления заданиями (JCL). Так как КОБОЛ так слаб, программы не делают много, таким образом, JCL выделил бы некоторое дисковое пространство (часто вниз к цилиндрическому уровню), и выполнять маленькую программу КОБОЛа для чтения данных, и затем выписать просто данные Вам нужно. Тогда JCL мог бы назвать программу вида для сортировки получающегося файла. Тогда другую программу КОБОЛа назвали бы, чтобы считать отсортированный файл и суммировать данные и возможно повторно извлечь необходимые результаты. И возможно JCL привык бы снова к переместить файл где-то в другом месте, и все же другую программу КОБОЛа назвать, чтобы считать результаты и сохранить их в базе данных и так далее. Каждая программа КОБОЛа имела тенденцию только делать, одна вещь и примитивная версия конвейерной модели Unix были созданы - все, потому что КОБОЛ слишком труден, чтобы поддержать или сделать что-либо сложное с. У нас были слабая связь и трудное сцепление (между программами, не в них), потому что было почти невозможно записать КОБОЛу любой другой путь.

2
ответ дан Ovid 28 November 2019 в 22:14
поделиться

Я поддерживаю веб-приложение планирования, которое мы используем в нашей интранет. Когда меня спросили, мог ли я удалить агент из планировщика, я думал, уверенный почему нет. Когда я смотрел в исходный код, я выяснил, что каждый час дня этого агента был кодирован отдельно. Так был каждый день его недели. И так была каждая неделя каждого агента этого региона. И так был каждый регион приблизительно 5 регионов. HTML fies, которые содержат код asp повсеместно.

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

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

1
ответ дан Tobias 28 November 2019 в 22:14
поделиться

Система управления контактами PHP/MySQL-driven онлайн, где таблица контакта не имела естественного ключа. Были многочисленные экземпляры полей базы данных, содержащих составные данные в форме разграниченной строки, которая впоследствии должна была быть проанализирована кодом приложения.

HTML и логика были переплетены, почти никакие функции не использовались, а скорее код был вырезан и вставлен в десятки файлов исходного кода. Данные не были санированы и так поля с (например). встроенные вертикальные вкладки вызвали XML, возвращенный вызовами Ajax к неправильному функционированию, и в довершение ко всему прочь, файлы с десятками если не сотни пустых операторов, состоящих из закрывающих фигурных скобок, сразу сопровождаемых точками с запятой: "}";

1
ответ дан Peter Mortensen 28 November 2019 в 22:14
поделиться

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

0
ответ дан dsimcha 28 November 2019 в 22:14
поделиться

Интерпретатор для языка обработки геометрии CAD/CAM (P1 = 10,10; P2 = 20,20; L1 = P1, P2; - такая вещь), записанный в Microsoft BASIC Professional Development System (PDS), с минимальными именами переменной длины (это исчерпало одни буквы быстро, так шел дальше для удвоения букв. PP, PQ, PR, кто-либо?). И, честно говоря, [приблизительно 110] комментарии. На итальянском языке.

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

0
ответ дан metadaddy 28 November 2019 в 22:14
поделиться

Я когда-то был призван, чтобы помочь разыскать периодический катастрофический отказ в читателе EDIF. Почти сразу я начал страдать от головной боли. Исходный автор, казалось, чувствовал, что Yacc собирался оштрафовать его за пробел, и его грамматика Yacc была плотной, нечитабельной путаницей. Я провел несколько часов, форматируя его, добавляя правила для недостающих терминалов, когда они появились, структурировав объявления для предотвращения роста стека, и вуаля, катастрофический отказ был погашен.

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

0
ответ дан Peter Mortensen 28 November 2019 в 22:14
поделиться

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

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

0
ответ дан Peter Mortensen 28 November 2019 в 22:14
поделиться

Прямо из аспирантуры в Lucent мне дали компилятор и интерпретатор для поддержки, написанные на PL / I. Компилируемый язык описывает сложный набор ограничений целостности, и интерпретатор запускает эти ограничения для большого набора данных, который позже будет сформирован в исходной базе данных, управляющей переключателем 4ESS. 4ESS был и остается коммутатором каналов для междугороднего голосового трафика.

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

«Это» Хуже того, компилятор не проверял синтаксис и очень часто приводил к указанию ограничения, которое незаметно отображалось в неправильной логике, часто с очень плохими последствиями.

Хуже было впереди. По мере того, как я копался в недрах интерпретатора, я обнаружил, что он построен на гигантском процессе сортировки. Раньше сортировка была процессом ввода, который генерировал входные данные сортировки из необработанных данных и ограничений целостности. Итак, если у вас есть таблица с 5000 определениями магистралей в ней, и каждая запись магистрали имеет три значения полей, которые должны быть уникальными для всего набора входных данных, процесс ввода создаст 3 * 5000 = 15000 входных записей сортировки, каждая из которых является необработанной. запись данных с префиксом номера ограничения целостности и копией значения поля для сортировки. Вместо трех сортировок по 5000 записей он произвел одну сортировку по 15000 записей.

2
ответ дан 28 November 2019 в 22:14
поделиться

I once worked on a CAD application written in BASIC where the company policy was that every program must begin with the statement:

ON ERROR RESUME

jMM

1
ответ дан 28 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: