пятница, 11 марта 2011 г. - www.msmirnov.ru

Индийский код

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

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

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


А теперь конкретные замечания по коду:
1. Очень большой объем дублирования кода. Видно, что Copy-Paste используется очень активно.
Идентичные куски кода повторяются и не выделяются в отдельные функции.

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

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

4. Размытие слоев приложения – например, SQL-код генерируется во всех слоях приложения, вплоть до JavaScript’а, исполняемого в браузере.

5. Активное использование именований переменных, при котором первым символом обозначается тип переменной. Например, int iID или string sName. На мой взгляд очень неудобно.

6. Слабое понятие о нормализации баз данных. Большое количество дублирования данных в БД.

7. Именование всех полей в базах данных в верхнем регистре. Например, AUTHOR_NAME.
Мой сайт - www.msmirnov.ru

12 комментариев:

  1. Каким образом удалось столкнуться? Что за код?

    ОтветитьУдалить
  2. Стандартные ошибки начинающих или не желающих развиваться. Смею предположить, что и у нас в России тоже так пишут.
    Действительно, давай поподробнее, что за контора (известная/неизвестная, многочисленная/нет), что за проект (крупный/мелкий, молодой/старый)?

    ОтветитьУдалить
  3. Welcome to the club! Кстати я первый раз столкнулся с индийским кодом в Дотальфе, что-то допиливал за ними. Без дрожи не вспомнить... хотя воспоминания смутные. Помню только как я рассылал народу перлы из кода, ржали.

    ОтветитьУдалить
  4. Sergey Konyshev Серёга, это помню даже я, ты тогда показывал.
    Кусок кода в виде:
    if (userName = "JSMITH" AND password = "x12345") then
    return true
    else if (userName = "DDOE" ......

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

    ОтветитьУдалить
  5. А чем не нравится венгерская нотация? В своё время долго бились, чтобы приучить программистов к её использованию.

    ОтветитьУдалить
  6. Андрей, в том-то и беда, что и контора крупная, известная и многочисленная.
    И проект совсем не молодой...

    ОтветитьУдалить
  7. Вот как раз в многочисленных конторах и обитает много горе-програмеров. :)

    ОтветитьУдалить
  8. To greesha-ru:
    Если концептуально, то на мой взгляд она нарушает принцип инкапсуляции - т.е. открывает детали реализации.
    Ну а если более приземленно - то при смене типа переменной придется выполнять ее переименование по всему коду.

    ОтветитьУдалить
  9. 1,2,3,4,6 такое сплошь и рядом, типичный пример, когда неопытный(-ые) программист(-ы) + есть существенное ограничение по времени + пофиг старшине, лишь бы работало .
    5, пару лет назад помниться заколебался удалять в коде на барсике всякие доллары, процентики, х.ентики (не, ну честно :) ) код был ... пакистанский.

    ОтветитьУдалить