? ?
Ни о какой безапелляционности в моих высказываниях не может быть и речи! [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

fizzbuzz: правильное решение [сент. 14, 2013|12:28 am]
Anatoly Vorobey
[Tags|]

(эта запись может быть интересна программистам и сочувствующим)

Наконец-то кто-то сделал важное и правильное дело: выложил в открытый доступ действительно качественное, основанное на правильных принципах решение известной проблемы FizzBuzz:

FizzBuzz Enterprise Edition

Я читал исходники и восхищался. Практически не к чему придраться, ну разве что я бы еще тестов добавил. Но само решение - высший класс.
СсылкаОтветить

Comments:
[User Picture]From: aa_kir
2013-09-13 09:40 pm
Сразу видна разница между профессионалом и любителем. Я-то по наивности думал что задача решается в 5 - ну в 10- строк. А тут вишь как оно. Пойду изучу в подробностях :)))

Документации только маловато.
(Ответить) (Thread)
[User Picture]From: meshko
2013-09-13 11:41 pm
comments are a bad code smell
(Ответить) (Parent) (Thread)
[User Picture]From: dmarck
2013-09-13 09:42 pm
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.factories.FizzBuzzSolutionStrategyFactory;

Oh fsck. Make me unknow it ;-P
(Ответить) (Thread)
[User Picture]From: spamsink
2013-09-13 09:48 pm
Да уж, воистину showing the importance of programming style, in an ironic way.
(Ответить) (Thread)
[User Picture]From: kosiakk
2013-09-13 09:56 pm
Да ну. Просто плохой код. Ни потоков, ни облаков, ни даже нормальных модулей в Мавене. Не рассмешился :-/
(Ответить) (Thread)
[User Picture]From: michk
2013-09-13 10:04 pm
Про сочуствующих очень к месту.
(Ответить) (Thread)
From: migmit
2013-09-13 10:13 pm
Я вдохновился уже уровнем вложенности каталогов.
(Ответить) (Thread)
[User Picture]From: egorfine
2013-09-13 10:22 pm
Не хватает горизонтального масштабирования вычислительного воркера и системы MapReduce для раздачи задач на кластер.

А вообще штука приятная, даже приятнее чем GNU Hello World.
(Ответить) (Thread)
[User Picture]From: fat_yankey
2013-09-13 10:28 pm
Ну как же не к чему придраться? А где maven-javadoc-plugin? Где maven-source-plugin? Даже если это internal product, не open source, должен на internal maven repo идти с исходным кодом. Так enterprise grade product не делают.

Edited at 2013-09-13 22:29 (UTC)
(Ответить) (Thread)
From: grep.myopenid.com
2013-09-13 11:18 pm
Ужасное нерасширяемое и неконфигурируемое решение.



com.seriousbusiness.fizzbuzz.IntegerRangeIterator




com.seriousbusiness.fizzbuzz.impl.condition.IntegerDivisionChecker



com.seriousbusiness.fizzbuzz.config.FizzBuzzStrategyConstants.FIZZ_DIVISOR





com.seriousbusiness.fizzbuzz.impl.actors.printers.FizzStringPrinter






etc.
(Ответить) (Thread)
From: grep.myopenid.com
2013-09-14 06:13 am
злобный парсер съел псевдо-xml
(Ответить) (Parent) (Thread)
From: illy_drinker
2013-09-14 12:21 am
знакомый просил джава программистов написать код для состояния шахматной доски
По его словам процентов 70 пишут иерархию классов фигура, клетка, ряд клеток, доска и любят рисовать умл диаграммы о том как эти классы связаны и взаимодействуют
(Ответить) (Thread)
[User Picture]From: efix
2013-09-14 06:08 am
"Состояние шахматной доски" -- это что, конкретная расстановка фигур на ней?
(Ответить) (Parent) (Thread)
[User Picture]From: onodera
2013-09-14 08:24 am
А что в этом плохого? Он же не просил их написать код для компактного представления состояния шахматной доски в памяти? А классовая иерархия гораздо нагляднее, нежели какой-нибудь массив из 64-х байт, где старший бит - это факт наличия фигуры, следующий - её цвет, а остальные кодируют Кр-Ф-Л-С-К-п.
Потом приходит change request: добавить в игру поддержку львов, светлячков и единорогов, а также сделать доску шестиугольной и ввести зелёные фигуры. После чего программа отправляется на полное переписывание, так как все алгоритмы были написаны под этот массив.
(Ответить) (Parent) (Thread)
[User Picture]From: kray_zemli
2013-09-14 03:24 pm
Подозреваю, "профессиональный fizzbuzz" пришлось бы переписывать раз в 10 дольше.
(Ответить) (Parent) (Thread)
From: db_ru
2013-09-15 09:43 am
Например FICS, на котором я играю (и который спокойно существует без единорогов уже без малого 20 лет), передает положение доски именно 64-байтовым массивом (на самом деле 71 - для читабельности используются пробелы между горизонталями). Черная фигура - строчная буква (kqrbnp), белая - заглавная, пустая клетка - '-'. Наглядность стопроцентная.

Edited at 2013-09-15 09:44 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]From: thedeemon
2013-09-14 06:45 am
Да ну, слабенько. Одна из цитат с критикой:

This codebase has a number of issues to resolve before it can be truly enterprise ready. Configuration is non-existent and needs to be moved into an XML layer or even better a naming service such as JNDI or LDAP. The author should consider using dependency injection to build his objects rather than invoking constructors and factories directly. As it stands you have to recompile the project to change even the simplest settings.
The most glaring error is any kind of externally configurable logging which is absolutely required to be enterprise ready. There is also a complete lack of metrics or management code. Adding some JMX support would be a good start and ideally some statsd integration so you can get some runtime insights into what the code is doing. Right now the whole thing is just a black box. How are you supposed to monitor and track this thing?
At an architectural level there is no reliability guarantee on execution either. If you crash half way through, have a power outage etc, you have to manually restart the process. The whole thing should be triggered by a durable message queue and actually processed by a set of redundant back-end services which would guarantee execution and deliver the finalized document asynchronously. This would also decouple resource usage and allow different SLAs (service level agreements). As it stands, I have no way of guaranteeing resource availability to my Gold customers and thus no way to actually deliver on contractual performance guarantees which may have been made by the sales team. Our top tier customers for example would probably have dedicated boxes reserved for handling just their traffic. Which of course requires some level of identity services/authentication.
In summary: we are missing
* configuration
* logging
* metrics
* monitoring
* reliability
* SLA support
* security/authentication
This is a good start though.
(Ответить) (Thread)
[User Picture]From: janatem
2013-09-14 07:42 am
Блин, что за издевательство? Я до сего момента не знал, что такое FizzBuzz, и наивно ожидал увидеть нормальную математическую проблему (и ее решение).
(Ответить) (Thread)
[User Picture]From: kodt_rsdn
2013-09-14 09:31 am
Есть такая математическая проблема: самый медленный алгоритм сортировки.
С физбазом та же история: найти и генерализировать как можно больше точек в программе.
(Ответить) (Parent) (Thread)
[User Picture]From: valshooter
2013-09-15 04:04 pm
По-моему, не хватает модуля для чтения писем.
(Ответить) (Thread)