Как я могу убедить моих со-программистов не делать параноик "просто чтобы быть уверенным в программировании"? - PullRequest
21 голосов
/ 30 июля 2009

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

Примеры:

Перерисовка окна, которое по какой-то причине не нарисовано так, как хотелось бы программисту:

Invalidate();
Revalidate();
ProcessMessages(); 
Update();    
Repaint();
Repaint();
ProcessMessages(); 
Repaint();

Чрезмерная настороженность:

function test1(x: boolean) 
begin
  select case x
    true: // do something
    false: // do something else
    else
      raise Exception.Create("Invalid value.") // just to be sure
  end;
end;

function test2(x: Integer);
var
  y: Integer;
begin
  y = Abs(x);
  if y >= 0 then
  begin
    // do something
  end;
end;

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

В большинстве случаев этот вид кодирования защищается программистом и / или начальником. Причины всегда сводятся к этому ответу:

  • Ну, больно, если мы перепроверим? Лучше быть в безопасности, чем потом сожалеть!
  • Это защитное программирование, разве они не учили этому в университете?!

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

Могу ли я представить какие-либо неопровержимые факты о том, что этот стиль в конечном итоге имеет плохие последствия?

РЕДАКТИРОВАТЬ: Спасибо за хорошие предложения, чтобы избавиться от этого стиля. Но я все еще интересуюсь причинами , которые я могу представить своим коллегам, чтобы объяснить и, возможно, убедить их, почему это плохо, и в их интересах не быть параноиком .

Ответы [ 17 ]

2 голосов
/ 30 июля 2009

y = Abs (x); если y> = 0, то

совершенно разумно. помните -> MIN_INT == abs (MIN_INT)

2 голосов
/ 30 июля 2009

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

  • Отменить там код, когда они пошли в обед / дома.
  • Изменен такт и с энтузиазмом согласился с ними - это часто нервировать их и заставил их думать в два раза.
1 голос
/ 30 июля 2009

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

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

1 голос
/ 30 июля 2009

Некоторое время назад я написал немного о защитном программировании:

http://www.francisfish.com/what_defensive_programming_is_and_isnt_logging_the_right_t.htm

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

1 голос
/ 30 июля 2009

Играйте в свои игры:

  • Объявите, что каждое выделение кучи должно быть помещено в блок try..catch для проверки ошибок OutOfMemoryException - который записывается на диск / отправляется на сервер системного журнала / и т. Д.
  • Проверяйте каждую переменную, просто чтобы убедиться, что она «берет» - выделяйте дважды, если это необходимо.
  • Циклам for нельзя доверять, потому что, как только вы увидели, что один «пропустил шаг» - то же самое можно сделать со всеми циклами, используя gotos.
  • Хранить хэши SHA1 для каждой строки. Сравните / обновите хэши при изменении строковых значений в «защищенных» частях программного обеспечения - чтобы убедиться, что строка не была случайно изменена.
  • Выполните тесты на целочисленное равенство, приведя к числу с плавающей точкой, и сравните, используя эпсилон, потому что вы однажды слышали историю, в которой большое значение 2 вызвало крупный инцидент на [укажите ближайшую атомную электростанцию ​​здесь].

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

0 голосов
/ 31 июля 2009

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

0 голосов
/ 30 июля 2009
  • Если они что-то так волнуются не сработает в первый раз они должны что-то переписать пока они не уверены, что это сработает.

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

...