LogoHome   >>   Opinion   >>   Гайдышев

Гайдышев И.П. "Анализ и обработка данных. Специальный справочник"

Гм. До сих пор, я был лучшего мнения об издательстве "Питер".

Собственно, небрежность и отсутствие вычитки чувствуются во всем. 
Даже такое известное имя, как Hamming (метрика Хэмминга), написано с
орфографической ошибкой.

Очевидно, что этот код - прилагаемый к книге - НИКОГДА не проверялся и 
НИКОГДА не компилировался.

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

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

Вероятно, "это" следует поместить в какой-нибудь раздел "антипаттерны".
Давненько я не видел такого похабного кода. К сожалению, глупостей
понаписано столько, что нет никакой возможности выправить за один раз все,
и нет никакой уверенности, что удастся заставить "это" работать.
(Оно запускается и что-то считает, но я не пытался проверить правильность).

Судя по использованию 'cout' и перегруженных функций (тогда почему бы уж
не Templates взамен Copy/Paste кода под каждый новый тип?), автору,
вероятно, казалось, что он пишет на C++. 

На самом деле, это код "не тянет" даже на Basic. Копирование массивов 
(POD-типа), например, выполняется в цикле. Взамен собственных функций 
сортировки, вероятно, следовало бы вызывать qsort(), но я поленился с этим 
разбираться. 

Стиль форматирования лучше всего охарактеризовать как "отвратительный". 
Точнее сказать, он везде разный - никакого единого стиля нет - но везде 
отвратительный.

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

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

Глупейшая экономия на всем - на пробелах, на пустых строках, на скобках
(отличный тест на запоминание приоритетов всех операций). Декларации
лепятся в одну строку, инициализации - в заголовок цикла, присваивания - 
в условие оператора if, переменные, за редким ислючением, никогда не
инициализуются, а иногда, даже, и не используются. 

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

Компилятор выдает множество предупреждений о возможном использовании 
переменных без инициализации. 

Who care? 

Про булевские переменные автор, вероятно, никогда не слышал, и всюду наглядно 
использует 0 и -1. 

Ну, и за однобуквенные идентификаторы, надо просто давать срок.

Использование метода Якоби для вычисления собственных значений (вместо
SVD), и инвертирование по Гауссу, а не по Пенроузу-Муру, мне кажется
сомнительным.

Откровенно говоря, все это было бы проще написать заново.


© Gazlan 2013 * gazlan@yandex.ru

Hit Counter