LINUX.ORG.RU
ФорумTalks

Я вам сейчас расскажу почему современный софт тормозит

 , ,


1

3

И расскажу вам я это не как обычный нытик, а как обычный программист.
На очень простом примере расскажу, который будет понятен даже обычному нытику.
Есть у меня в коде объект «точка». Эта точка по довольно простой траектории носится в масштабе некоторой зоны. И мне нужно отслеживать некоторое событие связанное с этой точкой и узнать в какой координате это событие произойдёт. Точка вполне самодостаточна и никаких асинхронных событий влияющих на её траекторию нет.
Легче простого — почёркал на бумаге траекторию, разложил на треугольники, обмазал тригонометрией на уровне средних классов средней школы, обернул в цикл в котором проверяю наступление ожидаемого события. Быстро и эффективно.
Да вот только не работает нихрена. Где-то ошибка. Причём ошибка довольно странная — поначалу всё ок, а потом — хлоп — и лезут какие-то странные значения. Переполнения быть не может, да и вообще каких-то очевидных багов. Погрешности там тоже накапливаться особо негде. А формул много и они некрасивые. Плюс траектория часто меняется — много изменений, связанных с симметрией. Короче — «Дiдько ногу зломе» пока найдёт там ошибку.
И что я делаю? У меня и так есть функция, которая смещает точку. Я просто вызываю эту функцию дохренища раз. Пока не наступит нужное мне событие.
Что в итоге? Решение получилось в СОТНИ раз менее эффективное, но принципиально безбажное, в десятки раз короче по коду и намного гибче в случае если траекторию движения точки придётся кардинально изменить (например вместо прямых сделать синусоиды).
Всё работает, производительность меня удовлетворяет. И думаете я когда-то вернусь к этому коду чтобы его всё-таки довести до ума и сделать его настолько быстрым, насколько это планировалось изначально? А вот фигушки. Без очень важных причин я этого делать не буду.
И таких кусков кода в большом проекте может быть очень и очень много.
Так что хватит ныть и начинайте готовиться к апгрейду своей железяки.
Есть вопросы?

★★☆

Есть вопросы?

Только один: для кого-то ещё новость, что скорость и стабильность часто стоят в обратной пропорции друг к другу?

Кстати, возможен вариант, что ошибка в вашей тригонометрии на уровне средней школы, точнее, в ваших знаниях оной.

Deleted
()
Ответ на: комментарий от Deleted

что ошибка в вашей тригонометрии

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

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Всё просто

В тригонометрии как раз всё сложно, одни только формулы тошноту вызывают. Просто - это матанализ.

Deleted
()
Ответ на: комментарий от Stahl

Не, я про формулы всяких cos(α+β) и прочее такое же.

Блин, стоило только вспомнить этот ужас, как спать захотелось. Пойду вздремну.

Deleted
()
Ответ на: комментарий от andreyu

А у Солнца ты тоже спрашиваешь зачем оно вылезло?
Просто смирись. Влиять на моё «велезание» ты можешь в приблизительно той же степени, как и на «вылезание» Солнца:)

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Влиять на моё «велезание» ты можешь в приблизительно той же степени, как и на «вылезание» Солнца:)

Солнце погасить я неспособен. А на количество погасших звезд в вашем профиле я косвенно могу повлиять. И тогда бредопостов на ЛОРе станет меньше.

andreyu ★★★★★
()
Последнее исправление: andreyu (всего исправлений: 1)
Ответ на: комментарий от andreyu

Можешь меня заигнорить — я всё равно пишу лишь в толксы так что ты ничего не потеряешь.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Можешь меня заигнорить — я всё равно пишу лишь в толксы так что ты ничего не потеряешь.

Спасибо, Кэп.

andreyu ★★★★★
()

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

tcler
()
Ответ на: комментарий от tcler

Как программист я решил поставленную задачу. У меня на выбор было несколько методов решения. Я выбрал более гибкий, простой и элегантный.
Что не так?
Ты думаешь главная характеристика программиста — биться головой об стену в конце тупика лишь потому, что это кратчайший путь если не учитывать стены?:)

Stahl ★★☆
() автор топика

Да это всё понятно. Просто когда прогресс упрётся в принципиальную невозможность сделать эту вашу точку «медленным» способом, тогда вы будете писать её оптимально. И ваше начальство, загнанное в условия «оптимально, или никак ваще» будет нормально относиться к вашим изысканиям в области производительности. Лет через 50, короче.

tiinn ★★★★★
()
Ответ на: комментарий от tcler

ну в Индустрии-то доооооо, абсолютная профпригодность

kott ★★★★★
()
Ответ на: комментарий от tcler

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

mandala ★★★★★
()
Ответ на: комментарий от Stahl

главная характеристика программиста - эффективная кодогенерация. о заморочках с оптимизацией никто не говорит, но вот это вот:

Решение получилось в СОТНИ раз менее эффективное

в адовом бреду не назовешь «гибким, простым и элегантным» методом решения задачи. учитывая, что причины появления бага так и остались покрыты мраком, неизвестно, сколько еще мин покоится в коде.

tcler
()

Почему современный игры при том же уровне графики весят в разы больше чем их аналоги семилетней давности. То же самое и касаемо программ, почему современные программы такие «толстозадые» по сравнению с их аналогами нескольколетней давности. Индусский код?

Grantrol
()

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

ixrws ★★★
()
Ответ на: комментарий от tcler

что причины появления бага так и остались покрыты мраком

Вот именно. Поэтому я не стал биться головой в стену, а заменил неудобный метод другим. Да, менее эффективным. Но безбажным и более гибким.

Stahl ★★☆
() автор топика

А я ведь предупреждал что циклы - зло.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от Stahl

элементарщина

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

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

а в своём говнокоде ставишь тесты и проверяешь выхлоп.

n_play
()

Чот нипонел

И что я делаю? У меня и так есть функция, которая смещает точку. Я просто вызываю эту функцию дохренища раз. Пока не наступит нужное мне событие.

А нельзя просто System.out.println("nuzhnoe sobitie"); или что у вас там? Ты же и так знаешь что ты хочешь получить, зачем пытаться привести систему в это состояние?

Есть у меня в коде объект «точка». Эта точка по довольно простой траектории носится в масштабе некоторой зоны.

Не могу придумать что на моем десктопе может использовать вот это вот. А если речь про игорей или какую-то математику - зачем мне готовиться к апгрейду?

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

А нельзя просто

Точка движется довольно самостоятельно. Событие зависит от положения точки. И положение точки мне как раз и нужно узнать.

Не могу придумать

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

Stahl ★★☆
() автор топика

точка по довольно простой траектории
А формул много и они некрасивые

Кто-то врёт.

Где-то ошибка

В ДНК.

Есть вопросы?

Должность программиста через постель получил?

redgremlin ★★★★★
()

И думаете я когда-то вернусь к этому коду чтобы его всё-таки довести до ума и сделать его настолько быстрым, насколько это планировалось изначально? А вот фигушки.

Перестанет удовлетворять производительность — обязательно вернёшься. Либо вернётся программист, которого наймут на твоё место разгребать этот бардак.

Sadler ★★★
()
Ответ на: комментарий от Sadler

Маловероятно что с производительностью будут проблемы. Этот код всё равно быстрый и вызывается очень редко.
Но да — если вдруг, то вернусь. Зато сейчас я могу спокойно продолжать работу, а не разгребать эти стрёмные формулы.

Stahl ★★☆
() автор топика
Ответ на: комментарий от kalterfive

И? Тестирование показало, что через несколько итераций алгоритм начинает выдавать муть. Причина непонятна. Что дальше?

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

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

kalterfive ★★
()
Ответ на: комментарий от kalterfive

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

Но зачем?! Результат достигнут. Претензий к его производительности нет. Багов нет. Просто чтобы заеб^W доказать самому себе, что первоначальный подход жизнеспособен?

Stahl ★★☆
() автор топика
Последнее исправление: Stahl (всего исправлений: 1)
Ответ на: комментарий от Stahl

Претензий к его производительности нет.

Так пртензий к производительности нет или «современный софт тормозит»?

чтобы заеб^W доказать самому себе, что первоначальный подход жизнеспособен?

Чтобы найти ошибку, которая сейчас есть в программе.

tailgunner ★★★★★
()
Ответ на: комментарий от Stahl

Известно, зачем: чтобы не оставлять возможного негативного влияния плохого алгоритма на весь проект и гарантировать работоспособность алгоритма даже в критических ситуациях, которые наверняка будут, потому что хоть заявленные в ПП 100 раз ты будешь вызывать один и тот же метод, хоть 200 – это гарантирует правильную работу алгоритма только для тех случаев, когда он работал правильно. Довести такой подход до ума, по-моему, ещё сложнее, чем написать сложный, но правильный алгоритм.

kalterfive ★★
()
Последнее исправление: kalterfive (всего исправлений: 2)
Ответ на: комментарий от tailgunner

которая сейчас есть в программе.

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

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Но ведь ошибки нет

Не факт.

неудавшийся алгоритм заменён другим, ошибки не содержащим.

Или удаленный алгоритм натыкался на какую-то ошибку в объемлющей программе.

tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

Скорее всего когда я назвал синтаксис Питона вырвиглазным дерьмом, мешающим написанию кода «на лету». Я действительно не осилил как в этом языке удобно что-то обернуть в цикл/условие или вывести из-под него.

Stahl ★★☆
() автор топика
Ответ на: комментарий от ixrws

ок, спросил бы «не Грибоедов ли» - было б смешнее

kott ★★★★★
()
Ответ на: комментарий от tailgunner

Не факт.

Во всяком случае тесты проходят и ошибок не выявляют.

Или удаленный алгоритм натыкался на какую-то ошибку в объемлющей программе.

Хм. Ты не понял вводного сообщения. Забей.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Deleted

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

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Или удаленный алгоритм натыкался на какую-то ошибку в объемлющей программе.

Хм. Ты не понял вводного сообщения.

Хм. Ты не понял ответа.

tailgunner ★★★★★
()

Ты - быдлокодер

И у меня нет вопросов.

FiXer ★★☆☆☆
()

Есть вопросы?

Что ты пытаешся своим постом сказать?
Что предлагаешь?
Чего хочешь добиться?

torvn77 ★★★★★
()

Есть вопросы?

какая у вас оценка за программирование в дипломе?

Sith ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.