Некоторое время назад мне пришлось столкнуться с достаточно большим объемом кода, написанного индийскими товарищами.
Это был мой первый опыт и, к сожалению, впечатление у меня сложилось не самое лучшее.
Я вовсе не хочу сказать, что весь код, который создают индусы, имеет столь серьезные недостатки, так как другого индийского кода я еще не встречал. Однако, огорчает то, что не смотря на явные проблемы в программировании, авторы такого кода имеют достаточный успех на западе.
А теперь конкретные замечания по коду:
1. Очень большой объем дублирования кода. Видно, что Copy-Paste используется очень активно.
Идентичные куски кода повторяются и не выделяются в отдельные функции.
2. Очень длинные многостраничные методы. Отсутствует разбиение на мелкие методы.
3. Использование условий вместо наследований. Т.е. например, вместо того, чтобы создать несколько наследников базового класса, у которого имеется одноименный метод, реализующий различные виды одного алгоритма, создается один метод, поведение которого меняется множеством последовательных повторяющих условий в его теле.
Из-за этого код становиться трудно-расширяемым.
4. Размытие слоев приложения – например, SQL-код генерируется во всех слоях приложения, вплоть до JavaScript’а, исполняемого в браузере.
5. Активное использование именований переменных, при котором первым символом обозначается тип переменной. Например, int iID или string sName. На мой взгляд очень неудобно.
6. Слабое понятие о нормализации баз данных. Большое количество дублирования данных в БД.
7. Именование всех полей в базах данных в верхнем регистре. Например, AUTHOR_NAME.
Это был мой первый опыт и, к сожалению, впечатление у меня сложилось не самое лучшее.
Я вовсе не хочу сказать, что весь код, который создают индусы, имеет столь серьезные недостатки, так как другого индийского кода я еще не встречал. Однако, огорчает то, что не смотря на явные проблемы в программировании, авторы такого кода имеют достаточный успех на западе.
А теперь конкретные замечания по коду:
1. Очень большой объем дублирования кода. Видно, что Copy-Paste используется очень активно.
Идентичные куски кода повторяются и не выделяются в отдельные функции.
2. Очень длинные многостраничные методы. Отсутствует разбиение на мелкие методы.
3. Использование условий вместо наследований. Т.е. например, вместо того, чтобы создать несколько наследников базового класса, у которого имеется одноименный метод, реализующий различные виды одного алгоритма, создается один метод, поведение которого меняется множеством последовательных повторяющих условий в его теле.
Из-за этого код становиться трудно-расширяемым.
4. Размытие слоев приложения – например, SQL-код генерируется во всех слоях приложения, вплоть до JavaScript’а, исполняемого в браузере.
5. Активное использование именований переменных, при котором первым символом обозначается тип переменной. Например, int iID или string sName. На мой взгляд очень неудобно.
6. Слабое понятие о нормализации баз данных. Большое количество дублирования данных в БД.
7. Именование всех полей в базах данных в верхнем регистре. Например, AUTHOR_NAME.
Каким образом удалось столкнуться? Что за код?
ОтветитьУдалитьСтандартные ошибки начинающих или не желающих развиваться. Смею предположить, что и у нас в России тоже так пишут.
ОтветитьУдалитьДействительно, давай поподробнее, что за контора (известная/неизвестная, многочисленная/нет), что за проект (крупный/мелкий, молодой/старый)?
Welcome to the club! Кстати я первый раз столкнулся с индийским кодом в Дотальфе, что-то допиливал за ними. Без дрожи не вспомнить... хотя воспоминания смутные. Помню только как я рассылал народу перлы из кода, ржали.
ОтветитьУдалитьSergey Konyshev Серёга, это помню даже я, ты тогда показывал.
ОтветитьУдалитьКусок кода в виде:
if (userName = "JSMITH" AND password = "x12345") then
return true
else if (userName = "DDOE" ......
до сих пор стоит перед глазами. Это был очень длинный метод. Мы тогда решили, что зато у программеров всегда есть работа, стоит только кому-то уволиться или поступить на службу :)
А чем не нравится венгерская нотация? В своё время долго бились, чтобы приучить программистов к её использованию.
ОтветитьУдалитьАндрей, в том-то и беда, что и контора крупная, известная и многочисленная.
ОтветитьУдалитьИ проект совсем не молодой...
Вот как раз в многочисленных конторах и обитает много горе-програмеров. :)
ОтветитьУдалитьОчень даже может быть :)
ОтветитьУдалитьMichael Smirnov Так вы всё, перешли на Java?
ОтветитьУдалитьНет, пока не перешли.
ОтветитьУдалитьTo greesha-ru:
ОтветитьУдалитьЕсли концептуально, то на мой взгляд она нарушает принцип инкапсуляции - т.е. открывает детали реализации.
Ну а если более приземленно - то при смене типа переменной придется выполнять ее переименование по всему коду.
1,2,3,4,6 такое сплошь и рядом, типичный пример, когда неопытный(-ые) программист(-ы) + есть существенное ограничение по времени + пофиг старшине, лишь бы работало .
ОтветитьУдалить5, пару лет назад помниться заколебался удалять в коде на барсике всякие доллары, процентики, х.ентики (не, ну честно :) ) код был ... пакистанский.