Открыть список
Как стать автором
Обновить

Комментарии 33

Пример на python уж очень натянуто выглядит, если сравнивать с другими.

Да и отрицательный ноль — вполне самодостаточное число в мире чисел с плавающей точкой

Хуже когда надо построить гусеничный самолет с бетонными крыльями и даже самый прекрасный код его не спасёт — взлететь он может только раз и то если его столкнуть с высокой горы…

Да без проблем.
Лет 10 назад, на собеседовании, одного разработчика попросили написать простейший пример как выбрать элемент на странице по его id. Интервьюемый спросил можно ли использовать jQuery. Ему разрешили. И тогда он наваял это:


var id = 'id-of-element';
var element = null;
$('*').each(function(index, el) {
    if ($(el).id() == id) element = el;
});
console.log(element);
Знаю человека который «изобрёл» свой implode) И заюзал его 6 раз в одном файле

image
Видимо, свое роднее и понятнее

Множество раз в жизни сталкивался с ужасным кодом, на уровне примеров из статьи. Нередко, эти ужасы были написаны лицами с должностями "Senior Developer", "VP Of Engineering".


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


Из легко вспоминающегося: филиппинские "разработчики" налабали код типа:


rows = db.query("SELECT * FROM very_big_table")
rows.sort()
return rows[0]

И у них так было сделано везде! Надо ли говорить, что сайт после прикладывания их рук, стал тормозить просто неимоверно! Разработчиков поставляла аутсорсинговая компания из США. Рейтинг этой компании везде около 5* (на различных сайтах типа Yelp, и т.д.), с массой положительных отзывов.


Деньги, потраченные на несколько месяцев работы этих разработчиков, вернуть отказались.

Странно, что govnokod.ru не вспомнили. Там, признаться, и моих «перлов» парочка есть.

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


function isArray(arr) {
    if (Array.isArray(arr)) {
        return true
    } else {
        return false
    }
}

Эталонный индусокод моей юности:
if((a>b).toString().length()==4)

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

Студенческий код — это для особых ценителей, да.


Слабонервным не смотреть

(если что, смысла в этом коде и не должно быть много, тут ассемблер разбирался; претензии к эстетике скорее )





Но ладно, тут люди просто еще не понимают, что тут такого — работает же! Какие еще отступы :)

Последний кусок SQL-кода я бы сдал в палату мер и весов на вечное хранение.

Ну, если тут начали вспоминать всякие мелочи — то вариации вот этого кода я видел многократно:


for (int i=0; i<N; i++) {
    if (array[i] == foo) {
        write('Элемент найден');
    } else {
        write('Элемент не найден');
    }
}
Не понимаю, а в чём проблема? Заменить for на foreach, break добавить и норм. Ну ещё можно в отдельную функцию, возвращающую boolean, вынести.

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

Проблема в том, что вывод "Элемент не найден" можно делать только по окончанию цикла, а никак не на каждой итерации.

Блин, не заметил(
Не ЖЭУ, а ДЖЭУ.

Один из таких примеров я даже на говнокод постил.


$opl1_type_arr = array("no","yes");
 for($i=0;$i<2;$i++){
            $str_pr = $opl1_type_arr[$i];
            echo "<option value=\"$str_pr\"";
            if($RowOP['pay_peredano']==$str_pr) echo " selected";
            switch ($str_pr) {
    case 'yes':
     echo ">Да</option>";
     break;
    case 'no':
     echo ">Нет</option>";
     break;
   }
 }
if (hahthAhthahT >= hahthahthaht ) then hahtHahthaht(hahtHahtHaht,HAhtHahthaht);
else
hahTHahthaht(hahtHahtHaht,HAhtHahthaht);

Это повышает вероятность того, что код был C ++ Builder
Вот серьезно? Там точно был then?? Это в какой же версии? Сдается мне, что тут нашла коса на камень в плане профессионализма.
Но и не Delphi, раз уж; перед else. Да, автору сначала лучше было бы определиться с языком…

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

Возможно, баян:

int n = 100;
for (int i = 0; i < n; n++)
{
// do something
}

Комментарий: «почему-то этот цикл жутко тормозит»
здесь скорее не тупость, а банальная невнимательность/очепятка.
Из наследия после одной не очень известной аутсорс галеры, которую послали нафиг, ибо проект стало поддерживать нереально дорого, и наняли меня «спасать ситуацию».
Про банальщину вроде функций вида
if(condition) return true;
else return false;
даже говорить влом…
Но вот такие перлы реально убивают до сих пор:
let chain = Promise.resolve();
chain
  .then(() => {
    doSomething1();
  })
  .then(() => {
    doSomething2();
  })
  .then(() => {
    doSomething3();    
  });
В первый месяц у меня еще была возможность спросить «зачем?». На что я получил закономерный ответ: «ну чтоб дожидалось запросов в тех функциях». А на мое объяснение, что если не вернуть из колбэка промис, то ждать не будет, а у него ни колбэк, ни вызываемые функции ничего не возвращают, я услышал лишь «разве?».
Надеюсь он больше не будет так делать… Но человек реально верил в «магию» промисов в js и даже не догадывался, что это работает несколько иначе, чем он хотел.

А вот еще одинт финт, я нашел уже когда обратная связь оборвалась:
<div v-for="(item, i) of array" v-if="i === index">
 ...
</div>
Если кто не знает, это такой способ написать цикл for и if в шаблонах vue. И я бы мог списать это на то, что человек не понимает шаблонов и пишет как умеет… Но я увидел абсолютно аналогичную штуку в js коде:
let item;
for(let i = 0; i < array.length; i++) {
  if(i === index) {
    item = array[i];
  }
}
Я так и не понял сокрального смысла сия кода, и почему нельзя было просто написать
const item = array[index];

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

Я думал, что меня одного if'ы типа: if (condition) return true... вместо return condition раздражают.


Есть еще просто непаханное поле регекспов. Раньше я не понимал высказывания "now you have two problems" про регекспы. Но теперь вижу, что 99.99% разработчиков не имеют даже минимального понимания, что такое регекспы и как они работают.


Если бы, например, мне платили по доллару за каждый увиденный регексп /.*something.*/, стал бы уже миллионером.

Сталкивался с кодом уровн:


try {
  data = parseAsFirstDataType(someFile)
} catch() {
  data = parseAsSecondDataType(someFile)
}

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

А когда-то, я написал веселую статью с примерами различного некорректного тестирования, и меня забанили на Хабре за цитирование… эх…
Мотоцикл не мой, прислали по Скайпу кусок вот такого кода на Delphi

pointer := nil;
pointer.Free;

Интересно, кто-нить заметил, что оба кода из статьи будут врать, если массив содержит только отрицательные элементы? )))

Ну почему же? Первый код отлично работает на -5 -4 -3 -2 -1, а второй — на -1 -2 -3 -4 -5!

Работаю с индусским продуктом. Php знаю поверхностно. Вижу такое:
if (условие) {
$row[0]['<option1>'] = $row[0]['<option1>'];
$row[0]['<option2>'] = $row[0]['<option2>'];
} else { ... }

Я не ошибся, обе стороны выражения равны! Может в Php это имеет какой-то смысл?
Думаю, «ну задумали что-то, ну забыли исправить, бывает». Исправляю, читаю код дальше. Ан нет, такое сплошь и рядом.
Ещё часто вижу что-то типа:
if ($_REQUEST['userType'] == '<somevalue>') {
$var = $_REQUEST['userType'];
} else {
$var = $_REQUEST['userType'];

Что мешало в одну строку написать? Ребята видимо в количествах строк кода получают зарплату. Любой мало-мальски адекватный IDE покажет предупреждения.
А уж бесконечные цепочки из if else даже упоминать не буду. Switch case видимо в Индии запрещён.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.