41 Отредактировано Balancer (06.02.2006 14:52:41)

Мышкин пишет:

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

Типичная ЧЛ. Но, кроме всего прочего, ещё и слабая default/big_smile

А у меня - вот, классика кода, с которым приходится работать (далеко не худший кусок, первый попавшийся, демонстрирующий общую тенденцию default/smile)

int dropConstant;
int randDropLim = 70;
int randPlusMin = 1;
dropConstant = _rand.nextInt(randDropLim);
//randomize +/-
randPlusMin = _rand.nextInt(2);
if ( randPlusMin == 1 ) dropConstant *= -1;
int newX = this.getX() + (int)Math.round(dropConstant);
dropConstant = _rand.nextInt(randDropLim);
//randomize +/-
randPlusMin = _rand.nextInt(2);
if ( randPlusMin == 1 ) dropConstant *= -1;
int newY = this.getY() + (int)Math.round(dropConstant);

// Init the dropped L2ItemInstance and add it in the world as a visible object at the position where mob was                 
dropit.dropMe(this, newX, newY, this.getZ());

default/big_smile

Но гораздо чаще придирки не к коду, а именно к общей структуре разработки default/smile

42

int dropConstant;
...
int newY = this.getY() + (int)Math.round(dropConstant);

Так, судя по коду, это какая-то фигня хаотически носится по экрану (?), сдвигаясь на каждом шаге не более чем на 69 позиций независимо по обоим координатам.

К чему тут можно придраться?
К округлению переменной типа int ? Хочу и округляю.
К использованию промежуточной переменной randPlusMin ? Хочу и использую.
Ибо сказано:

далеко не худший кусок

43

Не по экрану, а по игровому миру default/smile

По мелочам - ну, например, задачу рандомизации коорлинаты обычно решают не дебильными

randPlusMin = _rand.nextInt(2);
if ( randPlusMin == 1 ) dropConstant *= -1;

(вообще, "рандомизация знака" - это совершенно новый термин в области генерации случайных чисел default/big_smile)
а банальным

2*dx*(rnd-1/2)

А, вообще, весь этот код записывается как

dropit.dropMe(this, getX()+Rnd.get(-70,70), getY()+Rnd.get(-70,70), getZ());

44

О! Понял! ЧЛогики в программировании недолюбливают факторизацию (это же введение новых БЛ-сущностей! default/big_smile), а принципы её использования возводят в ранг умений гуру default/smile

Вообще, почитаешь changelog'и многих обширных чернологичных проектов - и становится ясно, что факторизация - это то, чем программисты этого проекта занимаются половину времени разработки спустя год после её начала default/smile

45

Факторизация - чё это?

Не знаю, у меня бОльшая часть времени уходит на то, чтобы заставить себя взяться за работу. Успех зависит главным образом от еды. Чтоб получилось, нужно, чтоб еда была хорошая по качеству и умеренная по количеству.
Хотя нет, ещё важно иметь впереди значительный интервал времени, чтобы не отвлекали.


Balancer пишет:

вообще, "рандомизация знака" - это совершенно новый термин в области генерации случайных чисел )

Наверняка если порыться в старых программах, то когда-нибудь я занимался и "рандомизацией знака". Банальный же метод может не пройти из-за краевого неравенства. Чел же не флоуты рандомизирует, а целые числа. Не получится ли так, что влево чудище будет скакать на 70 позиций, а вправо только на 69 ?

46

kaprizka пишет:

Не знаю, у меня бОльшая часть времени уходит на то, чтобы заставить себя взяться за работу.

я думаю, у большинства на этом форуме такая же проблема default/big_smile

47

вот кстати смысл постов этой темы становится мне все более понятным default/smile default/icon_mrgreen начиная с поста капризки default/smile

48 Отредактировано xeye (06.02.2006 15:51:34)

error450 пишет:

вот кстати смысл постов этой темы становится мне все более понятным default/smile default/icon_mrgreen начиная с поста капризки default/smile

у капризки вообще всё запущенно: в плане мотивации на еду подсесть - это последнее дело default/icon_mrgreen:green:green

49

xeye пишет:

у капризки вообще всё запущенно: в плане мотивации на еду подсесть - это последнее дело default/icon_mrgreen:green

Это не план мотивации. Это одна из помех. Обладает свойством саморассасывания, если не повторять слишком часто.

А мотивация есть - хотя бы простое любопытство.

50

xeye пишет:
kaprizka пишет:

Не знаю, у меня бОльшая часть времени уходит на то, чтобы заставить себя взяться за работу.

я думаю, у большинства на этом форуме такая же проблема default/big_smile

о! тока хотел сказать что у меня то же самое - ты меня опередил default/icon_mrgreen

***

а вообще, лучшие программисты которых я знаю - либо Доны, либо Робы - вот и весь ответ...

51

RWinner пишет:

а вообще, лучшие программисты которых я знаю - либо Доны, либо Робы - вот и весь ответ...

узнай, чем они догоняются до рабочего настроения? оченно надо

52

xeye пишет:

узнай, чем они догоняются до рабочего настроения? оченно надо

Оченно от условий зависит. Если задача интересная, то остальное пофиг. Хоть сидя на пивных ящиках в двадцатиградумный мороз default/big_smile Если задача скучная, то:
- Убрать всё более интересное (форумы, альтернативные задачи, игры...)
- Обеспечить качественные белосенсорные условия (удобный стул, не висящие в воздухе руки, удобная клавиатура)
- Состояние лёгкой неголодности (голод отвлекает, на сытый желудок - лениво)
- Всё вышеперечисленное - без настойчивости и настырности со стороны default/big_smile

...

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

53

>Факторизация - чё это?

Тут - разбивка кучи мелких токенов на несколько хорошо кластеризуемых больших. В совсем примитивном объяснении - вынос общих логических блоков в хорошо выделяющиеся подпрограммы/модули.

Идеал факторизации - когда отдельный модуль состоит из 7+/-2 субмодулей - столько за раз охватывает человеческое сознание.

К сожалению, та же Java не особенно поощряет такой стиль, приходится ограничиваться полумерами.

>Банальный же метод может не пройти из-за краевого неравенства.

Когда метод просто (факторизован) то элементарно проверить все граничные условия.

>Чел же не флоуты рандомизирует, а целые числа.

Это же и есть главная халява. Результат гарантирован default/smile

>Не получится ли так, что влево чудище будет скакать на 70 позиций, а вправо только на 69 ?

Именно так и будет в данном случае. Традиционно в ГСЧ левый край множества включаем, правый - исключаем. Т.е. правильно нужно писать [-70, 71) или [-69, 70), но, поскольку именно в этой задаче это не принципиально (хоть -100, +50 делать можно) то просто из подсознательной красивости можно писать [-70, 70) default/smile

54

Balancer пишет:

Если задача скучная, то:
- Убрать всё более интересное (форумы, альтернативные задачи, игры...)
- Обеспечить качественные белосенсорные условия (удобный стул, не висящие в воздухе руки, удобная клавиатура)
- Состояние лёгкой неголодности (голод отвлекает, на сытый желудок - лениво)
- Всё вышеперечисленное - без настойчивости и настырности со стороны default/big_smile

...

Если задача действительно скучная, то это слабо помогает...

55

Balancer пишет:

а банальным
2*dx*(rnd-1/2)

чё такое dx?

56

Мышкин пишет:
Balancer пишет:

а банальным
2*dx*(rnd-1/2)

чё такое dx?

Максимальное смещение по оси x. default/smile

57

ты шутишь?

58

Мышкин пишет:

ты шутишь?

Ну да! Я же даже смайлик поставил. default/smile

59

Мышкин пишет:

чё такое dx?

Пределы рандомизации соответствующей координаты.

60

Казалось бы, это Программирование!!!
И вдруг - скучные задачи. Гамлеты, что ли, кругом?