Русский код, бессмысленный и беспощадный.П.С. Унес к себе, ибо потом может пропасть +)
Написанное является никакой не провокацией, а наблюдениями натуралиста. Не бросайтесь скороспелыми выводами.
Встречаются профессиональные термины (программистские, психиатрические и матерные).
Я, между прочим, опять работу поменял, позвонили старые знакомые и спросили, не ищу ли я, где глубже. Я подумал, и сказал, что, вообще-то, не ищу, но ради вас - пожалуйста. Там более, что индусский код на последнем месте уже давно привел меня в состояние, в котором ни боли, ни эмоций не чувствуешь.
Оказалось, я ошибался, может быть куда хуже, я всегда в таких случаях ошибаюсь.
Вот скажем, индус. Ему дали задание - напиши код, который проведет, допустим, прямую от А до Б. И что вы думаете - прямая будет проведена. С использованием всех известных индусу технологий, которых больше, чем позиций в Камасутре. Например, на последней работе данные читались и писались в базу с использованием 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 исправим, если не разгонят.
Я хочу другой глобус.
Облако тегов
брат
всячина
гендерный дискурс
голодный и все все все...
графика
дипломники
дисер
друзья
жена
звери
конференции семинары события
Мама
машина
Места в Иркутске
мои стихи
мои фильмы
Открытые системы
Папа
подарки
подкасты
Правила
программирование
работа
ремонт
свой дом
сервис
скринкасты
совесть
стратегическая инициатива
строительство
студенты
фильмы
фото
фразы
Чемоданчик с неприятностями
юмор
яндекс
Adobe
anatolich
apache
apple
bitrix
book
cisco
CRM
Debian
desktop
DNS
emacs
english
FreeBSD
games
garfield
google
HP
intel
java
LaTeX
LinuxFormat
lotus
mail
Mercurial
microsoft
music
mutts
Python
ruby
Sinfest
solaris
sport
SQL
Sun
SUSE SLED SLES
twitter
Ubuntu
UX
Web-программирование
Webstream
понедельник, мая 07, 2007
Русский код
Ужас просто ужас я постю так как пришло +) отличный текст...
Подписаться на:
Комментарии к сообщению (Atom)
0 коммент.:
Отправить комментарий