psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2010-03-04 03:28 pm

Мегасрач у belnetmon

На 500+ комментариев:

http://belnetmon.livejournal.com/1024560.html

Для непрограммистов объясняю суть: при собеседовании на работу программиста человеку предлагается пройти тест: написать реальную простенькую программу и посмотреть, получится ли у него.

Казалось бы, что в этом требовании такого странного? Реакция, однако, забавная. В тему набежало некоторое количество мутных личностей, которые стали писать о том, что предлагаемые задачи недостаточно простые или недостаточно стандартные.

Мне кажется, что суть проблемы такова: некоторые мои коллеги учатся не столько программировать, сколько красиво гнуть пальцы. Человек помнит огромное количество всяких продуктов, языков и систем. Но знания кандидата по каждому пункту укладываются в 1-2 абзаца. Это значит, что на собеседовании он легко может поддержать беседу о данной системе, но вот написать что-то реальное - фиг.

Я называю этот типаж "эрудитом".

Если попросить эрудита написать программу типа описанной в тесте, то он будет
- Два дня читать документацию
- Два дня гуглить
- Два дня шариться по форумам
- К началу следующей недели он найдет-таки на каком-то форуме подходящую программу, скопипастит ее, и она заработает.

При этом эрудит будет страшно горд теми фактами, что:
1. Он не изобрел велосипед (ибо изобретать велосипед неправославно).
2. Он использовал проверенный, работающий код - ибо все, что опубликовано в инете, в понимании эрудита работает идеально. В отличие от сделанного руками (см п.1)
3. Он сэкономил работодателю кучу бабок, так как см. пункт 1.

Особо продвинутый эрудит способен обернуть найденную копипасту в "паттерн". Как правило, результат от этого потеряет в качестве. Но эрудит будет убежден, что результат, напротив, приобретет дополнительные магические свойства типа "расширяемость +5". Просто потому как в книжках про "паттерны" много говорится про такие вещи. Поэтому всякий паттерн - это сразу большой плюс, а любой код, в котором эрудит сходу не увидит один из 20-30 знакомых паттернов, есть неправославный велосипед и должен вместе с афтаром гореть в аду.

Например, преобразование int в строку - это не паттерн...

[personal profile] no1u1w1w6c 2010-03-06 10:33 pm (UTC)(link)
вряд ли — я не знаю, что для тебя будет охуенным. моё «охуенно» подразумевало «легко сопровождаемый и изменяемый продукт, который будет just worx».

из забавных — могу назвать HOP или Roadsend PHP Compiler.

а охуенным для меня продукт будет, например, потому, что я буду иметь бесплатный REPL. то бишь, возможность вломиться в работающую систему и посмотреть, что там пошло не так, на реальном работающем релизе, в realtime, а не в криптологах/криптодампах при помощи libthelepaty и libtimemachine. плюс — инкрементальное построение продукта («дунул-придумал-написал-проверил»).

думаешь, откуда в современных игрушках все эти «консоли»? оттуда, что надо иметь возможность «подёргать за потроха», а язык не позволяет. в Схеме же я имею внутри продукта полную и рабочую Схему, доступ ко всем нужным переменным, возможность позвать любую функцию и ты пы. а также, например, немаловажную возможность тупо переопределить пару функций, не останавливая весь продакшн — что важно для мелких багофиксов: не надо ждать очередного релиза и тормозить рабочий процесс при его накатывании, достаточно просто запустить на самом продукте мелкофайл и работать себе дальше.

плюс, конечно, совершенно убойная выразительность языка и возможности метапрограммирования — тут все «мэйнстримовые» языки атомно отсасывают.

при всём при этом, к сожалению, я почти не пишу на Схеме. потому что найти людей, для которых «функциональное программирование», «лябмда-исчисление», «immutable structures», «state-less programs» и ты пы не просто фоновый шум, а осмысленые словосочетания, весьма сложно (или весьма дорого %-).

[identity profile] psilogic.livejournal.com 2010-03-06 10:57 pm (UTC)(link)
Хммм.... понятно: очередная экзотическая вещь, на которой можно делать много прекрасного - но только в теории :)

[personal profile] no1u1w1w6c 2010-03-06 11:16 pm (UTC)(link)
ну, как сказать (насчёт «экзотическая»). конечно, если кто привык к молотку и знает только молоток, он и дрова молотком колоть будет, и зубы молотком лечить, и презервативы молотком проверять. это всё можно, только зачем?

Лисп (и Схема в частности) далеко не экзотика. просто они идут вразрез с современной IT-индустрией, где совершенно не нужны думающие и понимающие, а нужны высиральщики кода. ну, that's life. понятно, что один хороший лиспер стоит по деньгам как пара десятков обезьян (и выше). понятно, что выкинуть его и взять другого — напряжно, это не обезьяны, которых на каждом углу пучок за пятак. понятно, что на модные базворды он срать хотел с колокольни. а то, что стоимость поддержки обезьяновысеров с лихвой перекроет деньги, потраченые на лиспера — это до манагеров не доходит, потому что в программерской области они не смыслят ни хуинки (гы, многие до сих пор уверены, что если в проект, который пролажал все сроки, нанять 50 обезьян заместо десяти, то проект зарелизится в пять раз быстрее). ну, и так далее.

скука, в общем, это всё — везде так, на самом деле. нанимают джамшутов, а потом удивляются, что стены косые, потолки падают, а сетевые кабеля разведены как угодно, только не так, как надо было. зато дёшево, хуле. умных слов не говорят, поставили — сразу, типа, «работают». было бы смешно, если бы рыдать не хотелось.

кстати, о Лиспе: Emacs. то, что у него марсианские кнопкобиндинги — ерунда, это можно поправить в пару минут (хоть и не надо, потому что они достаточно удобны). аналогов-конкурентов реально нет.

[identity profile] psilogic.livejournal.com 2010-03-06 11:35 pm (UTC)(link)
[ конечно, если кто привык к молотку и знает только молоток, он и дрова молотком колоть будет, и зубы молотком лечить, и презервативы молотком проверять. это всё можно, только зачем? ]

да... это к вопросу, зачем переписывать весь код на схему, ага ;)))))

[personal profile] no1u1w1w6c 2010-03-07 01:00 am (UTC)(link)
затем же, зачем стоит перейти с простого молотка на отбойный, когда надо асфальт ломать. или переписать софтину с ассемблера на хотя бы Си. впрочем, язык типа «си» в принципе не пригоден для написания программ (равно как и ассемблер), и никогда пригодет не будет. просто очень многим людям, увы, забыли об этом сказать. для написания софта подходят Forth, Smalltalk, Scheme/Lisp, Haskell, OCaml, местами Prolog, etc. к сожалению (или к счастью) все они, как инструменты простые, но очень мощные, требуют больших усилий для освоения, чем любая модная сейчас императивная срань. ведь мощность техники уже давно позволяет не заниматься байтоёбством — ну и не надо ним заниматься: это то же самое, что писать всё на ассемблере, мотивируя сие ограничеными ресурсами у процессора Z-80.

штука же в том, что обезьян-байтоёбов выращивать выгодно. это дёшево и даёт неисчерпаемый ресурс джамшутов. именно потому в MIT, например, заменили Схему на бидон: «творцы нам тут нахуй не нужны. Криэйтором, Вава, криэйтором.»

[identity profile] psilogic.livejournal.com 2010-03-07 01:33 am (UTC)(link)
Prolog - вещь очень узкоспециаизированная для случаев, когда нужен эффективный алгоритм сложного перебора вариантов. В реале такие алгоритмы нужны чуть чаще, чем никогда. Но бывают нужны. Для остальных случаев использовать Prolog - все равно, что удалять гланды через жопу.

Другие языки из перечисленного списка столь же фееричны?

[personal profile] no1u1w1w6c 2010-03-07 01:55 am (UTC)(link)
ну я же сказал — «местами». впрочем, Prolog да — это из разряда экзотики. хотя я знаю существо, которое встраивало пролог как скриптовый язык в софтины. так что я не самый ебанутый на свете. %-)

а Forth, например, отлично для однокристалок подходит. Схема тоже, но в это не все верят. %-)

но с точки зрения обезьяны-императивщика — фееричны все, да. у обезьяны от них заклинивает череп и начинается словоизвержение на тему «это высоколобая хуйна, а нам работу работать надо».

[identity profile] psilogic.livejournal.com 2010-03-07 02:40 am (UTC)(link)
Ну да, работу работать надо, а для чего еще языки? Чтобы на рабочем месте компиляторы писать? :) Я все понимаю: чем примитивнее синтаксис, тем проще написать компилятор...

[personal profile] no1u1w1w6c 2010-03-07 02:53 am (UTC)(link)
дык да. ситуация получается забавная: гипотетический чувак пилит деревья пилкой для ногтей, ему предлагают бензопилу, а он отмахивается: «свалите, мне работу работать надо!»

что забавно — он прав: ему действительно надо «работать работу». а на результат и усилия насрать — лишь бы полезная деятельность активно эмулировалась.

алсо, ты говоришь «простой синтаксис» так, как будто это что-то плохое. тем не менее вон авторы Scheme48 взяли Схему, которая совсем уж проста, сделали из неё путём кастрации Pre-Scheme — и получился охуительный байтоёбский инструмент. на этой самой Pre-Scheme написали VM для Scheme48, забив на традиционное применение сей в таких задачах. а Си использовали как и полагается — как ассемблер, компилируя в него Pre-Scheme (потому что в машинный код лениво, зачем, если есть отличный переносимый макроассемблер?).

[identity profile] psilogic.livejournal.com 2010-03-07 11:07 am (UTC)(link)
Написать компилятор макроассемблера трудно, йа панимайу.

То есть, алгоритм схемера такой: берется какой-нибудь максимально примитивный синтаксис, для него пишется конвертер на C. такой конвертер любой сишник назовет скромно кодогенератором. но схемер назовет его компилятором и выпятит груди: "йа компиляторы пишу!"

казалось бы, при чем тут джамшуты...

[personal profile] no1u1w1w6c 2010-03-07 11:44 am (UTC)(link)
>Написать компилятор макроассемблера трудно, йа панимайу.
не трудно, а нудно. да и зачем, коли уже есть вполне рабочий?

>То есть, алгоритм схемера такой: берется какой-нибудь максимально примитивный
>синтаксис, для него пишется конвертер на C.

а) у Схемы и так примитивный синтаксис, куда уж проще-то? лиспы вообще простые в этом плане — оттуда и их сила;
б) ну с чего ты так решил? разных Схем — 9e+3. какие-то в Си компилят, какие-то в машинный код, какие-то в JVM, .Net и ты пы. а у кого-то вообще байткод.

а с «кодогенератором» не всё так просто, на самом деле. Схема-то язык динамический: прямая и тупая трансляция в Си даст несмешной говнокод. потому в больших Схемах как раз не «кодогенераторы», а весьма серьёзные компиляторы, умеющие и типы выводить, и оптимизировать выходной код так, чтобы сям было удобней, и ещё много разных гитик. попробуй скажи, что Stalin — это такой вот «кодогенератор», а не компилятор. только тихо очень говори, а то конфуз получится. или посмотри на Ikarus, к примеру — там сями не воняло вообще никогда.

странно: вроде бы раньше за тобой не замечалось желания делать скоропалительные выводы. стареешь, что ли?

зыж алсо, написание компилятора Схемы — это вовсе не самоцель. просто это достаточно простая (в общем случае) задача, что иногда действительно удобней быстро накидать свой компилятор под конкретные условия.

плюс — оно полезно: хороший способ понять, что и как в языке происходит, и почему. собственно, вторая часть SICP и описывает сначала metaevaluator, а потом и компилятор Схемы. и это действительно настолько просто, что поначалу даже не верится. особенно тем, кто пытался делать компилятор хотя бы подмножества сей и жестоко посидел на ёжиках в процессе.

алсо, почитай Абдулазиза Гильома (кажется, он так транскрибируется %-): An Incremental Approach to Compiler Construction: весьма доставляющее чтиво.

схемеры в этом плане похожи на фортеров немного: писать компиляторы для Схемы забавно и помогает устаканить понимание. именно потому оно входит в классический курс.

понятно, что сишники охуевают: у них-то компилятор — это что-то из разряда чёрной магии, постичь которую попивая пивко не выйдет. эвон, цельная Драконья Книга написана (очень хорошая, если чо). а всё от того, что базы разные: лямбда-исчисление простое, как тапок, отсюда и трансляция простая достаточно (про оптимизаторы тут не говорим, это совсем другая история; но и они для Схемы как-то попонятней получаются).

[identity profile] psilogic.livejournal.com 2010-03-07 02:56 pm (UTC)(link)
[ не трудно, а нудно. да и зачем, коли уже есть вполне рабочий? ]

Казалось бы, при чем тут трудноудержимые позывы схемеров написать компилятор для схемы... видимо, нет рабочего. :)

[ странно: вроде бы раньше за тобой не замечалось желания делать скоропалительные выводы. стареешь, что ли? ]

Чья бы корова мычала :)))

[personal profile] no1u1w1w6c 2010-03-08 07:55 am (UTC)(link)
нет идеального. впрочем, если хочешь увидеть «лисперов как сишников» — посмотри на Common Lisp и его комьюнити. там всё точно так же запущено: парочка мегакомпиляторов, исходники которых даже просто прочитать нереально, 9e+3 всяких библиотек, в которых разобраться — проще свою сделать и текст стандарта, которым от гопников можно отбиться (если, конечно, книжку вообще сможешь поднять).

(пошёл досыпать)