Русский код, бессмысленный и беспощадный.

Форум для обсуждения любых тем
Аватара пользователя
zyxel
Неотъемлемая часть форума
Сообщения: 985
Зарегистрирован: 07 июн 2002, 12:05
Откуда: Минск, РБ
Контактная информация:

Русский код, бессмысленный и беспощадный.

Сообщение zyxel »

Написанное является никакой не провокацией, а наблюдениями натуралиста. Не бросайтесь скороспелыми выводами.

Встречаются профессиональные термины (программистские, психиатрические и матерные).

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

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

Вот скажем, индус. Ему дали задание - напиши код, который проведет, допустим, прямую от А до Б. И что вы думаете - прямая будет проведена. С использованием всех известных индусу технологий, которых больше, чем позиций в Камасутре. Например, на последней работе данные читались и писались в базу с использованием JDBC, JDO, EJB и Hibernate, иногда одновременно. Что поразительно, все это работало - из точки А в точку Б. Иное дело, если бы вдруг потребовалось провести еще одну прямую, допустим, еще и в точку Ц, тут весь продукт пришлось бы переписывать. Как мосты и тоннели никто не проектирует на многофункциональность, так же и индусский код, сплошная железная дорога без стрелок. Нужно - прокладывай новую, семью всем кормить надо, проектов мало, индусов много.

Хуже индусского кода может быть только код европейский, особенно голландцев или датчан. Это тоже объяснимо, у них источники вдохновения легализованы. Из точки А в точку Б никто никуда не едет, зато есть framework. В котором можно задать plug-in, который конфигурирует другой plug-in, который читает третий plug-in и посылает event четвертому, а тот уже знает, что делать. Через Inversion of Control, так интереснее. Я как-то цитировал одно европейское творчество, и, по-моему, это достойно повторения:
Before describing the configuration aspects of components (...), component types and implementations are described, since it is aspects of the component type that are configured by components – and the configurable aspects are defined by the component type.
И это только документация, а исполнение, поверьте моему горькому опыту, еще затейливее.

Но все это - ничто в сравнении с отечественным кодом. В нем из точки А в точку Б прямую, конечно, проведут. Квадратно-гнездовым методом. Я не очень понимаю, что такое квадратно-гнездовой метод, но будет использован именно он. Врагу достанется выжженная земля с одной стороны, и ни пяди ее - с другой. Из А в Б будет проведено столько прямых, что Лобачевский отдыхает. Еще большее количество прямых будет проведено из Б в А, на всякий случай, как в анекдоте - строительство туннеля под Ла Маншем начнется одновременно из Англии и Франции, и продлится пять или десять лет, в зависимости от того, встретятся ли строители посередине. Зато комментариев в коде не будет, потому, что код - лучше любого комментария. С этой же целью всем переменным будут даны имена из учебника по шахматам, из раздела "цугцванг". Кстати, о шахматах, помните ли вы притчу про их изобретателя, индуса (хе-хе), который в качестве вознаграждения попросил 264-1 зернышек рису? Это индийский подход, он же ламерский, отечественный программист знает, что есть функции стремительнее экспоненты. Если вы подумали "домкрат", то не угадали, домкрат только падает. Зато есть факториал, помните про такое?

На моей новой работе тоже есть outsourcing. Достался в комплекте с инвесторами, контрактная контора в городе М. (не Москва), некоторые компоненты системы написаны, увы, там. Моя новая работа - стартап, поэтому код еще не весь опробован. На днях дошло, наконец, до полевых испытаний компоненты, которая фразы ищет, на совпадение, с набором ключевых фраз из словаря. Задача - как два пальца об асфальт, фраз в словаре, для начала, тыщ восемьдесят - фигня. Ага, щас.

OutOfMemoryError, говорит компутер. Памяти у него - два гига, и даже Билла Гейтса не приплетешь, сплошной Линукс. Шо за фигня, все посмотрели на сисадмина, строго так, со значением. Сисадмин вздохнул, ударился оземь, обернулся птицей и добавил серверу еще два гигабайта памяти. OutOfMemoryError, повторил компьютер, только теперь уже не сразу, а немного подумав. Тогда все посмотрели на Ди-Би-Эя, еще строже, DBA тоже вздохнул, и урезал базу напополам, до сорока тысяч, от плеча до седла. Потом еще раз. Двадцать тысяч строк в память влезли, им там было уютно, но работать не собирались.

К этому моменту индивидуальные эмоции сложились в одно большое коллективное "бля". Потому как, в production базе данных записей под миллион, а арифметику все учили еще в колледже. И я пошел смотреть в код.

То, что я там увидел, словами не описать, ибо слова есть продолжение мыслей, но я все же попытаюсь. Есть такое понятие, сложность алгоритма. Если есть N объектов, а алгоритм работает независимо от их числа, сложность такого алгоритма - константа, и это очень хороший алгоритм. Но все задачи так не решить, поэтому есть алгоритмы, работающие за время, пропорциональное логарифму N, и это тоже хорошо. Хуже, если время работы алгоритма пропорционально N, совсем плохо, если N2, и хуже некуда, если время работы растет, как экспонента от показателя N. М.-ские труженики умудрились преодолеть и этот барьер, в погоне за константной скоростью работы алгоритма они умудрились добиться факториального, N!, потребления памяти.

Идея чрезвычайно проста. Если известно заранее, что будет искаться фраза "мама мыла раму", эти орлы создавали в памяти все возможные пермутации, как то, "мама раму мыла", "мыла раму мама" и так далее. Все эти варианты засовывались в хеш-таблицу, со всеми сопутствующими объектами. Ожидалось, что время поиска в такой таблице - константа, потому, как ищется квадратно-гнездовым методом. Фразы были и по пять, и по восемь слов. Факториал восьми никто не брал? Если брали, положите на место. Тут и двадцать тысяч фраз - достижение, удивительно, что столько влезло.

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

Я хочу другой глобус.
-Сынок, вставай, 5 утра, пора на работу.
-Папа, на какую работу ? Сегодня воскресенье !
-Сынок, какое воскресенье ! Мы же негры !
(С) анекдот

Аватара пользователя
zyxel
Неотъемлемая часть форума
Сообщения: 985
Зарегистрирован: 07 июн 2002, 12:05
Откуда: Минск, РБ
Контактная информация:

Сообщение zyxel »

PS Не мое.
-Сынок, вставай, 5 утра, пора на работу.
-Папа, на какую работу ? Сегодня воскресенье !
-Сынок, какое воскресенье ! Мы же негры !
(С) анекдот

Аватара пользователя
cympak
Увлекающийся
Сообщения: 114
Зарегистрирован: 26 окт 2005, 13:38

Сообщение cympak »

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

В результате в коде встречались коменты типа #вы не поверите, но это работает

и строки $a=$b; $a=$b; - второе присваивание должно скорее всего обозначать "мамой клянуся".

И это только цветочки....

А вы говорите про хреновый код.
...а на каком основании ограниченность некоторых делать законом для всех?

LRS
Заглянувший
Сообщения: 29
Зарегистрирован: 17 сен 2005, 22:45
Откуда: Минск

Сообщение LRS »

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

В результате в коде встречались коменты типа #вы не поверите, но это работает

и строки $a=$b; $a=$b; - второе присваивание должно скорее всего обозначать "мамой клянуся".

И это только цветочки....

А вы говорите про хреновый код.
Да-да, а еще в комплекте с вышеописанным идут модули, реализующие ядро бизнес-логики, которая и сама по себе запутана так, что черт ногу сломит. И при этом реализована она, как несколько десятков килобайт перлового кода, густо пересыпанного goto с комментариями типа #for easier programming.

Аватара пользователя
vi.ki.ng
Интересующийся
Сообщения: 53
Зарегистрирован: 17 май 2006, 10:50
Контактная информация:

Сообщение vi.ki.ng »

Плохой код сродни криптографии. Только в то время, как над вторым надо голову поломать и это доставляет удовольствие, первое сразу плавит мозг.

Аватара пользователя
leikind
Неотъемлемая часть форума
Сообщения: 811
Зарегистрирован: 20 июн 2002, 03:02
Откуда: Брюссель
Контактная информация:

Сообщение leikind »

Это
В котором можно задать plug-in, который конфигурирует другой plug-in, который читает третий plug-in и посылает event четвертому, а тот уже знает, что делать. Через Inversion of Control, так интереснее.
мне очень знакомо.
Изображение

Ответить