Pull to refresh

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-а, создаваться класс на основе массивчика байтов… ну вы поняли.

UFO just landed and posted this here

Скандинавского языка не существует:)

UFO just landed and posted this here

Еще говорят «в калидоре» и «ло́жить», да.

UFO just landed and posted this here
Я плачу деньги за решение моих проблем

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

У меня с чувством юмора все в порядке, но ничего смешного или забавного я в этом тексте не увидел. Это какой-то особенный юмор, наверное, доступный не многим.

Не понял о чем статья, может кто-то раскрыть мораль/суть? Больше похоже на художественное произведение с целью передать свои внутренние чувства-переживания чем на техническую статью.

А это художественное произведение и есть...

Чувак просто написал нужный код на Java, скомпилировал в bytecode, потом тупо скопировал bytecode в кложу, а всем сказал "смотрите, какой я крутой, шестнадцатиричный bytecode могу по памяти выдавать!"

Самое удивительное в этой статье — это комментаторы, делающие вид, что не осознают шуточность данной статьи.

Sign up to leave a comment.

Articles