Комментарии 18
Ни одна черепаха не пострадала в процессе.
"...Так как у нас только один класс, нам не нужны сборщики и предварительная компиляция кода..." Т.е. плюсы такого решения имеются! Недоработка налицо!
Интересный вариант: написать что-то вроде fizz buzz enterprise edition для этой задачи. То есть такой плохой код, который появляется при reducto ad absurdum правил хорошего кода
может вы не знаете, но он есть:
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Но плохой код ради плохого кода, это IMHO плохой челлендж.
Лучше - это код, который может быть трудно читать и поддерживать, который нарушает принятые соглашения, но который работает быстрее, или который проще написать и не заморачиваться, если в данный конкретный момент времени это нужно сделать?
Однострочные башизмы известны в мире админов, как вещи, которые решают здесь и сейчас. Но если это скрипт для многократного применения, его лучше расписать чуть шире, и переделать в posix-shell, например.
Так и тут - я понимаю, когда челлендж - обсфукация, или когда челлендж - использование недокументированых фич, которые возможно задепрекейтятся, но сэкономят прямо сейчас и прямо здесь пару секунд/байт/строк, или хотя бы вызовут рофл, когда код в виде картинки или false/truе детектить по длине строки.
Ну то есть объективная цель челленджа. А у вас цель невнятная..
Что-то я не вижу фабрик прокси-черепах, которые находятся сервис-локатором и внедряются в синглтон сетки координат. Дальше по вкусу добавить стратегий, посетителей, адаптеров. Если будет плохо масштабироваться, разбить на микросервисы...
Вы столько времени убили на, по сути, убийство понятных переменных и нейминга, а может быть хуже код будет делать нагрузка на производительность? Нежели просто нечитаемые переменные.
Грубо говоря если кому то придет в голову отрефакторить этот код, правильно ли я понимаю, что бОльшую часть ваших трудов он убьет просто отрефакторив нейминг переменных?
Прикольный код, но разве это плохой код? Плохой код должен выглядеть хорошо, с лёгкостью проходить code review, содержать подробные комментарии неверно описывающие работу кода, обильное, но бесполезное журналирование. Программа должна работать медленно и жрать все ресурсы, содержать "оптимизации" пускающие исполнение для тестирования и для прода по разным ветвям (навскидку - можно завязаться на число ядер), а ещё нужны гонки и дедлоки, но так, что бы это стабильно работало при тестировании и нестабильно в проде, например можно использовать неявный сброс кэшей цпу при запиcи в лог - включаем debug - всё работает, выключаем - тоже работает, но уже случайно. Для борьбы с гонками хорошо бы использовать sleep-ы, но так мы не пройдём ПР, поэтому задержки нужны неявные, вызовы во внешние сервисы... Время рабочее, внешние сервисы отвечают быстро - у нас всё хорошо, вечер, прайм-тайм, растёт RT - добавляется элемент игры.
Память, она дожна течь, но не хип, это банально, пускай течёт директ, но не всегда, тоже что бы от луны в меркурии зависел и так что бы OOMKiller приходил внезапно. В код надо добавить уязвимостей, здесь без Unsafe-а не обойтись. Исключения надо ловить все, но только в основном потоке и не ловить в параллельных. У нас же память должна течь? - значит Throwable ловить не надо или ловить, но глушить, не надо никого смущать OOM-ами. И конечно же, необходимо обеспечить выход из программы как минимум в 3-х местах через System.exit();
Видимо вы не сталкивались с действительно плохим кодом)
Если хотите большей непонятности наоборот надо расписать эту задачу в 20 классах, которые будут передавать друг другу некий "Context" с максимальной абстрактностью. Думайте, что вы не черепаху двигаете, а пишете свой движок (а лучше два, с движком внутри движка), который потом, подвинет не только черепаху, но и космический корабль запустит, причем работающий не только с теории относительности, но и с квантовой механикой
и космический корабль запустит, причем работающий не только с теории относительности, но и с квантовой механикой
Если этот код будет корректно работать и с ОТО, и с КМ одновременно, это будет гениальный код, сразу на нобелевку. Любой физик-теоретик за такой код Родину продаст. Два раза.
P. S. Для совсем тупых поясняю: про родину - это шутка.
Критерии качества кода - это (не в порядке важности):
функциональность - способность исполнять поставленные задачи наилучшим образом, в том числе с учётом разных обстоятельств типа ошибок юзера;
читаемость - понятность кода для человека, в том числе оформление и именование переменных;
оптимизированность - эффективность программы по времени и по памяти;
собственный размер - чем меньше, тем лучше.
Соответственно, ужасный код должен быть минимально работоспособным (выполнять поставленную задачу в режиме итальянской забастовки), нечитаемым, умножать дважды два через кривые Фурье полным перебором лонгинта и при этом занимать кучу места на жёстком диске. Если он ещё и самопорождается в ходе работы, причём невозможно понять, какой его фрагмент за это отвечает - идеально! В Google без испытательного, к разработке обновления Gmail приступать с завтрашнего дня!
return "0, 0, север, начало координат привязано к черепахе."
Как написать хороший код? Создать несколько классов.
В этой задаче как раз наоборот.
Чувак, где моя черепаха?