Comments 27
Стильно.
Но… писать на clojure, чтобы потом писать в JVM-байткодах?
Тот случай, когда смотришь на код и не понимаешь то ли он цикл в связном списке ищет, то ли Ктулху призывает :)
Скорей всего ты нанята.
На месте Тима я бы трижды подумал — такой вот гений сбежит с проекта, а тем, кто останется его «магию» придется поддерживать…
Ну тут одно из двух: либо потом придёт кто-то и со словами "чё тут за хрень непонятная, ща я всё это перепишу" перепиливает на код с таким запахом… либо Тим сам возьмёт и своими руками наберёт толпу вчерашних троечников из пэтэу, а этому вот гению откажет. Вы возьмётесь решать, что из этих альтернатив лучше?
Для мелкой конторы, которая клепает ширпотреб может и не нужны гении, а нужны управляемые ремесленники. Но крупные организации будут искать именно таланты. Искать и удерживать.
Крупным организациям тяжело с талантами. С крепкими середняками-ремесленниками комфортнее и спокойнее. И другим работягам и менеджменту и бухгалтерии.
Настоящая гениальность заключается в умении писать легко читаемый и поддерживаемый код с использованием эффективных алгоритмов и средств разработки.
В проектах в «крупных организациях» размер кода измеряется десятками и сотнями тысяч строк.
Представьте сколько будет стоить простейший рефакторинг такого кода, пускай даже силами команды «гениев»
Гению откажет… Искать и удерживать.
Ну вот не откажет, а через год-два "гения" собьет машиной, или он с Эвереста скувыркнётся, тем самым не "удержится". Как вам такая альтернатива?.. Оцените риски?
Тут как-бы стоит не про гениальность соискателя поговорить… Дело вот в чем: написать jvm-ный байт-код (а то и в с десяток других, включая питоний или нативный, ака asm например) смогут возможно многие, и из моего окружения в том числе, но при этом:
- они сделают это без лишнего литья воды вокруг (я про собственный загрузчик и ко, что как минимум не имеет никакого прикладного значения в рамках поставленной задачи, т. е. не комильфо оно тут — вы же не будете писать ОС с дровами и шлюзами, если вас просят прочитать из channel)
- постараются сначала или в процессе выяснить уровень "мальчика" Тима, чтобы разговор шел хотя бы на одном языке, тем самым...
- не выставят человека полным нубом (ну или если хотите не покажут ему своего к нему "отношения")
- будут вести разговор в продуктивном ключе (т. е. найдут возможность "блеснуть" так, чтобы собеседующий это хотя бы понял и проникся уровнем "гениальности")
- покажут уровень "взрослости" собеседуемого (потому что, шутки-шутками, но вот-это сильно тянет на "я вчера сбежал с детского сада", уровня "кулхацкер" в абсолюте)
- ну или как минимум уточнят рамочные условия, тем самым покажут ему что "из пушки по воробьям" для них знакомое словосочетание, а фирма не получит такого "все-на-свете-оптимизирующего" в ущерб читабельности, совместимости, безопасности (и еще с десяток ...-сти) того-самого "кода".
А так, да… как красивая история для бложика — возможно (т.е. написано-то и правда красиво, + понты, эго… все дела)…
Но как "реальная" история из жизни, — упаси боже от таких гениев-коллег.
Забыли ещё пункт — вздохнут, наступят на горло собственной песне и пойдут херачить тонны унылого абсолютно "поддерживаемого" (дебилы не понимают как работает тернарный оператор, поэтому пишем 6 строк кода вместо одной и пофиг, что метод перестал помещаться на один экран) говнокода…
Написать какую то чушь, "продуманная" структура которой развалится и обрастет костылями при первом изменении требований, может каждый криворук, что я собственно часто вижу в проектах. После они заявляют сие как гениальное, но не понятое творение.
А вот написать систему которая будет гибкой, с минимальным количеством богов и легко поддерживаемую могут едиными.
Да, я про это и написал. Для дебилов не осиливших тернарный оператор его растягивают на 6 строк и теперь любой дебил сможет его "поддерживать". Потому что вменяемых от этого бойлерплейта, простите, тошнит-с.
Нормальная минимальная еденица, позволяющая системе быть гибкой — метод (или его аналог). А что там внутри творится — если некто, называющий себя программистом не в состоянии разобраться, что делает компактный метод, то зря этот некто так себя называет.
Вы еще обвините сказку про Ивана-дурака в том, что говорящих щук не бывает. Это же IT'шная сказка, не надо относиться к ней слишком серьезно.
Люди, вы чего? Какие гении, продакшен код, преждевременная оптимизация и вот это вот все?
Ну блин никто же не пишет такой продакшен код, это же очевидно рассказ про другое…
(is (not (boolean (cycle? []))))
А зачем тут приведение к boolean? Оно лишнее и без него будет работать точно так же.
А вот вторым параметром передать строку с описанием не помешало бы, особенно на интервью и особенно если интерьер поставил практичность на первое место.
И вообще с тестом там какая-то лажа — два теста с одинаковым именем, первый не дописан, второй использует необъявленные переменные из локального скопа первого теста. В итоге это не компилябильно.
:main false
Оно по умолчанию false, можно убрать это из "бойлерплейт", чтобы не пугать интервьюера.
(int (alength bytecode)))
alength возвращает и так int, т.е. это приведение лишнее.
Short (.writeShort ds x)
Это явный копи-паст со stack overflow или подобного. Там только либо байты, либо массивы байтов. Т.о. этот супер-универсальный метод совсем ни к чему.
Так что когда мы гоняем туда и сюда классы Java, обычно происходит некоторая рефлексия
Получается, что девочка, зная на память все коды инструкций джавовского байткода, ни разу не открыла скопилированный компилятором clojure класс и не глянула, как оно работает. Java-методы там вызываются без всякого reflection-а. Т.е. можно было просто написать на своём любимом байт-коде класс и просто его вызвать из clojure. Без всего изврата с ClassLoader-ами.
Ни и самое эпичное — не знаю какой смысл считать сэкономленные байты в байткоде с таким оверхедом на clojure, но по поводу быстродействия тут небольшая лажа:
(let [cycle? (partial run-bytecode
(class-bytes racer)
"cycle_detector.core.Racer"
"Code"
[Iterable])]
… )
partial тут просто фиксирует аргументы для функции run-bytecode. Т.о. при каждом вызове функции будет создаваться экземпляр ClassLoader-а, создаваться класс на основе массивчика байтов… ну вы поняли.
Скандинавского языка не существует:)
Я плачу деньги за решение моих проблем
Тот, кто решает проблемы с отсутствием у вас чувства юмора, не справляется со своей задачей.
Примите меры.
Не понял о чем статья, может кто-то раскрыть мораль/суть? Больше похоже на художественное произведение с целью передать свои внутренние чувства-переживания чем на техническую статью.
Чувак просто написал нужный код на Java, скомпилировал в bytecode, потом тупо скопировал bytecode в кложу, а всем сказал "смотрите, какой я крутой, шестнадцатиричный bytecode могу по памяти выдавать!"
Самое удивительное в этой статье — это комментаторы, делающие вид, что не осознают шуточность данной статьи.
Заклиная техническое интервью