Здравствуйте, netch80, Вы писали:
N>Здравствуйте, Gattaka, Вы писали:
G>>>>Уже хорошо. Теперь идем дальше. Утверждение. Программист не ОБЯЗАН знать различие между бинарным деревом и хэш таблицей. Во всяком случае менее обязан, чем знать принципы ООП. C>>>Обязан знать, причём куда лучше "принципов ООП". G>>Не обязан. Обязан лишь знать, что хеш таблицы быстрее. Все!
N>Нет, потому что если у заметного количества ключей hashcode совпадает — типовая хэш-таблица будет медленнее.
И как в таком случае быть? Ты не находишь, что выбор должен осуществляться динамически? Это как раз то что делает база и то чего не делает кастомная реализация.
N>Если нет инкрементального ресайзинга (у >90% реализаций его нет), а важно максимальное время на ключ — хэш-таблица будет медленнее. N>Так что если кому-то это "Все!", то он просто некомпетентен.
Радикален. Здесь не вопрос того знаешь ты это или нет. Вопрос в том готов ли ты пожертвовать этими знаниями в ущерб производительности для достижения простоты кода.
G>> Остальное — опциальные знания никак не влияющие на результирующие системы. Даже наоборот не знание уменьшает вариатность блеснуть и улучшает качество кода. Потому что самое главное в программировании это сопровождаемость кода, который вы выдаете. Он должен быть простой и понятный только что пришедшему человеку.
N>Не самое главное.
Самое главное. N>Не должен.
Должен.
N>Если мы говорим о программировании в целом, а не сайтоклепании на формочках.
Как дело доходит до того чтобы сварганить бизнес приложение вы городите такой код, что потом сами в нем разобраться не можете. Свой nginx, своя файловая подсистема и пошло поехало.
N>А вы — хозяином галеры с типовыми копеечными гребцами. Что ж, и таким есть работа.
Вы излишне утрируете. Когда вы озадачитесь написанием максимально простого кода вы поймете что это очень сложно. Рассматривайте это как этюд — найти максимально простое решение при прочих равных. Это сложно. Очень.
Re[23]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
G>>>>>Уже хорошо. Теперь идем дальше. Утверждение. Программист не ОБЯЗАН знать различие между бинарным деревом и хэш таблицей. Во всяком случае менее обязан, чем знать принципы ООП. C>>>>Обязан знать, причём куда лучше "принципов ООП". G>>>Не обязан. Обязан лишь знать, что хеш таблицы быстрее. Все! N>>Нет, потому что если у заметного количества ключей hashcode совпадает — типовая хэш-таблица будет медленнее. G>И как в таком случае быть? Ты не находишь, что выбор должен осуществляться динамически? Это как раз то что делает база и то чего не делает кастомная реализация.
Ты сказал, что "хеш таблицы быстрее" (дословно). Теперь, оказывается, какая-то "база" делает выбор (реально — никакая не делает из распространённых). У тебя богатая духовная жизнь, но она не совместима с IT.
N>>Если нет инкрементального ресайзинга (у >90% реализаций его нет), а важно максимальное время на ключ — хэш-таблица будет медленнее. N>>Так что если кому-то это "Все!", то он просто некомпетентен. G>Радикален. Здесь не вопрос того знаешь ты это или нет. Вопрос в том готов ли ты пожертвовать этими знаниями в ущерб производительности для достижения простоты кода.
Конечно, не готов. Там, где нужна производительность — ничем жертвовать не буду, и такие предложения сразу пойдут в сад.
G>>> Остальное — опциальные знания никак не влияющие на результирующие системы. Даже наоборот не знание уменьшает вариатность блеснуть и улучшает качество кода. Потому что самое главное в программировании это сопровождаемость кода, который вы выдаете. Он должен быть простой и понятный только что пришедшему человеку. N>>Не самое главное. G>Самое главное. N>>Не должен. G>Должен.
Ну и сиди дальше в формошлёпстве.
У меня тут даже вход в общую тематику — это месяцы.
N>>Если мы говорим о программировании в целом, а не сайтоклепании на формочках. G>Как дело доходит до того чтобы сварганить бизнес приложение вы городите такой код, что потом сами в нем разобраться не можете. Свой nginx, своя файловая подсистема и пошло поехало.
Фантазёр.
N>>А вы — хозяином галеры с типовыми копеечными гребцами. Что ж, и таким есть работа. G>Вы излишне утрируете. Когда вы озадачитесь написанием максимально простого кода вы поймете что это очень сложно. Рассматривайте это как этюд — найти максимально простое решение при прочих равных. Это сложно. Очень.
Там, где это сложно, тем более не подойдут советы некомпетентного стратега-фантазёра.
The God is real, unless declared integer.
Re[24]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, Gattaka, Вы писали:
N>Конечно, не готов. Там, где нужна производительность — ничем жертвовать не буду, и такие предложения сразу пойдут в сад.
Производительность мало где нужна. Но везде ценится сопроваждаемость вашего кода.
N>>>Не должен. G>>Должен.
N>Ну и сиди дальше в формошлёпстве. N>У меня тут даже вход в общую тематику — это месяцы.
Тото и оно. Правильно разработать UI сложно. Это знатоки алгоритмов занимаются формошлепством как до таких задач доходит дело. Нашлепают — фиг разберешься. MVC, MVP, MVVM для них пустой звук. Вся логика в UI потоке, все сверстано в кривь и вкось. Зато был мучительный выбор между хештаблицей и деревом. В итоге знаток алгоритмов решает свой написать. Его и вкорячивает. Вот типичная история формошлеперов.
N>>>Если мы говорим о программировании в целом, а не сайтоклепании на формочках. G>>Как дело доходит до того чтобы сварганить бизнес приложение вы городите такой код, что потом сами в нем разобраться не можете. Свой nginx, своя файловая подсистема и пошло поехало.
N>Фантазёр.
N>>>А вы — хозяином галеры с типовыми копеечными гребцами. Что ж, и таким есть работа. G>>Вы излишне утрируете. Когда вы озадачитесь написанием максимально простого кода вы поймете что это очень сложно. Рассматривайте это как этюд — найти максимально простое решение при прочих равных. Это сложно. Очень.
N>Там, где это сложно, тем более не подойдут советы некомпетентного стратега-фантазёра.
А вот тут на личности перешел — непорядок. Покажи мне твой код и я скажу тебе кто ты. Знатоки алгоритмов генерируют неподдерживаемый код? Это все знают!
Re: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
G>Коллеги, создал голосование о необходимости выбора между binary tree и хэш таблицей. Если вы такой выбор осуществляли не могли бы вы описать код и ситуацию где это возникло.
Писал диплом, ещё в институте.
Транслятор языка описания логических схем цифровых устройств.
Главные объекты транслятора -- словари элементов, их контактов, а также цепей.
Это всё -- имена, идентификаторы в свободной форме.
Словари делались через хэш-таблицы, таблицы было интересно сделать самому (молодой же был), а также нужно было быстро,
а также в общем и не было доступных готовых реализаций (интернета тогда не было).
Функцию хэширования писал сам, подгоняя под примерные стандарты именования элементов на плате:
D0001, D0002 и так далее.
Проблема в том, что когда импортировали схемы из других CAD, где модули автоматом именовались
на основе координат на плате, а не просто по порядку, т.е. был другой формат имени,
хеш-функция вырождалась (давала одно или 2 значения), и поиск по хэш-таблице вырождался в линейный.
Поскольку алгоритм именования модулей недетерминирован, то теоретически нормальную хэш-функцию
подобрать достаточно сложно, потому что это надо проводить было бы отдельные исследования.
В принципе, эта проблема не решается даже с очень хорошей хеш-функцией, в таблицах возможны
коллизии.
Ну и применить там B+Tree был бы удачный вариант и по памяти, и по производительности.
Применён он не был, потому что не было ресурсов (времени) на эту дополнительную разработку.
Re: [Голосование] Нужен ли binary tree если есть hash таблица
Хотел в начале тоже присоединиться к дискуссии, но потом немного по наблюдал и понял, что это бесполезно дело. Единственная польза от данной темки — это собирать из неё фееричные цитатки, чтобы потом веселить народ. Пока у меня в фаворитах эти две:
Программист не ОБЯЗАН знать различие между бинарным деревом и хэш таблицей.
Производительность мало где нужна.
Но я надеюсь, что это ещё не конец!
Re[2]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Gattaka, Вы писали:
_>Хотел в начале тоже присоединиться к дискуссии, но потом немного по наблюдал и понял, что это бесполезно дело. Единственная польза от данной темки — это собирать из неё фееричные цитатки, чтобы потом веселить народ. Пока у меня в фаворитах эти две:
_>
Программист не ОБЯЗАН знать различие между бинарным деревом и хэш таблицей.
_>
Производительность мало где нужна.
_>Но я надеюсь, что это ещё не конец!
Ок! Держи нас в курсе.
Re[19]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, netch80, Вы писали:
C>>Но вот свою хэш-таблицу, например, я писал. Из-за того, что дефолтная глючила (вопрос: почему ключи в hash-таблице в Java должны реализовывать Comparable правильно?) N>"To ameliorate impact"... — это?
Угу.
N>А в каком JDK глючила?
В последнем. У нас есть местечковый RPC-фреймворк, который генерирует неправильную реализацию Comparable в стабах. До перехода на JDK8 это никого не волновало, так как HashMap был простым HashMap'ом.
Ну и так как для получения бага нужно особое сочетание фаз планет, то искали его долго.
N>И почему они продолжают звать "это" хэш-таблицей?
Ну вот не знаю.
Sapienti sat!
Re[20]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Cyberax, Вы писали:
N>>А в каком JDK глючила? C>В последнем. У нас есть местечковый RPC-фреймворк, который генерирует неправильную реализацию Comparable в стабах. До перехода на JDK8 это никого не волновало, так как HashMap был простым HashMap'ом.
C>Ну и так как для получения бага нужно особое сочетание фаз планет, то искали его долго.
Re[21]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
C>>Обязан знать, причём куда лучше "принципов ООП". G>Не обязан. Обязан лишь знать, что хеш таблицы быстрее. Все! Остальное — опциальные знания никак не влияющие на результирующие системы.
Рекомендую подучить матчасть. Хэш-таблицы совсем необязательно быстрее, особенно при работе со враждебными данными (hint: хэш-коллизии).
C>>Какая разница где лежит код? От положения кода функциональность не меняется. Одним условием приёмки у нас является покрытие кода тестами минимум на 85% (с редкими специальными исключениями), так что пусть кто хочет улучшает. G>После этого вопроса можно инфаркт схватить. Это самое главное! В программировании. Где что лежит, как называются классы, какова сложность.
Не главное. Совсем не главное. Перенести код — это дело нескольких минут.
G>Самое главное — бороться со сложностью систем. Если у вас все лежит абы где — сложность возрастает. В итоге вы получаете говнокод и говнопроект с которым никто не может разобраться кроме автора. Да и автор со временем забывает где и что он назвал, пложил.
Проблемы аффторов. 100500 пакетов с одним классом внутри ничуть не лучше.
G>В любом случае нужно бороться со сложностью. Ваши кастомные реализации эту сложность увеличивают ничего не давая в замен. Ну может пару тактов процессора выигрышь. Оно того не стоит. И зачем лукавить, в глубине души вы надеетесь стать незаменимым экспертом по проекту.
Я тут уже несколько раз наводящий вопрос про Comparable задавал.
Да, и "несколько тактов выиграешь" как раз и рождает злобные сайты на 100500 гигабайт на страницу, тормозящие весь компьютер.
Sapienti sat!
Re[22]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Gattaka, Вы писали:
C>Рекомендую подучить матчасть. Хэш-таблицы совсем необязательно быстрее, особенно при работе со враждебными данными (hint: хэш-коллизии).
Вы в своей практике сталкивались с такой ситуацией? Или выучили матчасть хорошо? В теории.
C>Не главное. Совсем не главное. Перенести код — это дело нескольких минут.
Все так говорят. Переносите сразу — не будет проблем.
C>Проблемы аффторов. 100500 пакетов с одним классом внутри ничуть не лучше.
Ну так никто не говорит, что это панацея.
C>Да, и "несколько тактов выиграешь" как раз и рождает злобные сайты на 100500 гигабайт на страницу, тормозящие весь компьютер.
Преувеличение. Приведите пример такого сайта, мы его разберем и вы увидите, что там везде алгоритм на алгоритме.
Re[21]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
N>>>А в каком JDK глючила? C>>В последнем. У нас есть местечковый RPC-фреймворк, который генерирует неправильную реализацию Comparable в стабах. До перехода на JDK8 это никого не волновало, так как HashMap был простым HashMap'ом. C>>Ну и так как для получения бага нужно особое сочетание фаз планет, то искали его долго. G>
Что именно?
Sapienti sat!
Re[10]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Cyberax, Вы писали:
C> G>Зарплату кто-нибудь считает на этой лабуде? Или сбережения свои хранит? C> Зарплату компании любого размера нынче даже мои наручные часы могут посчитать.
На i7 c 8ГБ правильная зарплата со всеми налогами считалась на 300 человек за 45 минут.
У тебя часы мощнее i7? На руке ожогов нет?
Здравствуйте, DenisCh, Вы писали:
DC>Здравствуйте, Cyberax, Вы писали:
C>> G>Зарплату кто-нибудь считает на этой лабуде? Или сбережения свои хранит? C>> Зарплату компании любого размера нынче даже мои наручные часы могут посчитать.
DC>На i7 c 8ГБ правильная зарплата со всеми налогами считалась на 300 человек за 45 минут. DC>У тебя часы мощнее i7? На руке ожогов нет?
Вот это похоже на реальность. Суровую реальность. Во всем виновата однобокость опыта. Если человек занимался какими-то CAD системами, занимался техническими проблемами он редко идет работать в финансовую сферу. Смотрит на нее пренебрежительно. Хотя там возникают тоже сложные проблемы и красивые решения этих сложных проблем.
Re[11]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, DenisCh, Вы писали:
C>> G>Зарплату кто-нибудь считает на этой лабуде? Или сбережения свои хранит? C>> Зарплату компании любого размера нынче даже мои наручные часы могут посчитать. DC>На i7 c 8ГБ правильная зарплата со всеми налогами считалась на 300 человек за 45 минут.
Ну так обрывайте руки разработчикам, которые ТАКОЕ пишут.
Sapienti sat!
Re[12]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Cyberax, Вы писали:
C>Ну так обрывайте руки разработчикам, которые ТАКОЕ пишут.
Какое такое? Тыж не писал ничего подобного. Ну вот вижу просто...
Есть целый класс программистов, которые никогда не пойдут в банк или бухгалтерию. Типа это недостойно их участия. На самом деле это тепличные слабаки, которые выросли в среде четких правил и ясности технических систем. Они абсолютно не жизнеспособны при написании финансового софта. Они не знают как общаться с заказчиком, какими средствами устранять ошибки взаимопонимания. То есть целый пласт проблем информационных технологий прошел мимо них. Причина — банальная лень.
Re[13]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
C>>Ну так обрывайте руки разработчикам, которые ТАКОЕ пишут. G>Какое такое? Тыж не писал ничего подобного. Ну вот вижу просто...
Вот не надо мне это говорить. Я писал систему, которая занималась расчётом зарплаты с учётом данных посещения. Считала она за секунды для тысяч человек — с учётом overtime и прочего.
А программистов, которые считают зарплату неделями для человека — надо нафиг пинать ногами из профессии.
G>Причина — банальная лень.
Вот-вот. И продолжают оправдывать эту лень словами типа: "Это всё неподдерживаемо" или "И скорость не нужна".
Sapienti sat!
Re[11]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, DenisCh, Вы писали:
C>> G>Зарплату кто-нибудь считает на этой лабуде? Или сбережения свои хранит? C>> Зарплату компании любого размера нынче даже мои наручные часы могут посчитать. DC>На i7 c 8ГБ правильная зарплата со всеми налогами считалась на 300 человек за 45 минут. DC>У тебя часы мощнее i7? На руке ожогов нет?
А можно примерно описать что может считаться 9 секунд для одного человека? Это же миллиарды операций и гигабайты данных... а налоги/платёжки обычно дают такой процесс вычисления, который потенциально может быть проверен человеком вручную на бумажке. Что-то не сходится. Скорее всего, типичный ентерпрайзнутый код с кучей слоёв и фреймворков, переливающих из пустого в порожнее.
По своему опыту могу сказать, что в налогах и зарплатах вычислительной сложности — никакой. Кучка сложений и умножений, перемеженных с if-ами. Самая сложная алгоритмическая проблема — правильно считать проценты и округлять. Наиболее сложный алгоритм который мне попадался это был рассчёт capital gains tax — там пришлось использовать сортировку!
Сложность совсем в другом: разобраться с предметной областью и выразить все эти правила и налоги в коде таким образом, чтобы это было хоть как-то читаемо и поддерживаемо.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, ·, Вы писали:
·>Сложность совсем в другом: разобраться с предметной областью и выразить все эти правила и налоги в коде таким образом, чтобы это было хоть как-то читаемо и поддерживаемо.
Вот это уже ближе к правде.
Re[13]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, Gattaka, Вы писали:
G>·>Сложность совсем в другом: разобраться с предметной областью и выразить все эти правила и налоги в коде таким образом, чтобы это было хоть как-то читаемо и поддерживаемо. G>Вот это уже ближе к правде.
Верно. Но это интересно только в начале карьеры, студентам. Когда только начинаешь изучать всякие новые системы, узнаёшь красивые слова типа "кардиналити", вставляешь в свою речь DRY акронимы... но главное тут не задерживаться. Ведь столько всего вкусного, когда понимаешь что всемогущие СУБД ну никак не тянут. Ведь даже рассчёт вероятностей лошадиных забегов и теннисных матчей поинтереснее будет, чем банковское округление. Та же биоинформатика гораздо сложнее и многограннее.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[14]: [Голосование] Нужен ли binary tree если есть hash таблица
Здравствуйте, ·, Вы писали:
·>Здравствуйте, Gattaka, Вы писали: ·>Верно. Но это интересно только в начале карьеры, студентам. Когда только начинаешь изучать всякие новые системы, узнаёшь красивые слова типа "кардиналити", вставляешь в свою речь DRY акронимы... но главное тут не задерживаться. Ведь столько всего вкусного, когда понимаешь что всемогущие СУБД ну никак не тянут. Ведь даже рассчёт вероятностей лошадиных забегов и теннисных матчей поинтереснее будет, чем банковское округление. Та же биоинформатика гораздо сложнее и многограннее.
Парадокс заключается в том, что пройдя весь этот цикл разработчики так и не знают что такое Specflow, кто такой Гойко Аджич. Биоинформатика нудная, узкоспециализированная вещь. Базы данных не тянут — это скорее всего сводится к "не осилил".