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 в строку - это не паттерн...

Re: int в строку

[identity profile] kelavrik-0.livejournal.com 2010-03-05 05:32 pm (UTC)(link)
Ну начнём плясать от печки. Накуя вообще float? С ним программа работает существенно медленнее. Посему остаются int & double. Ну напишу пару раз, это не проблема. А если надо расширить функцию для комплексных чисел, то могут возникнуть ньюансы. Нет, при возведение в куб нет проблем, а вот корень третьей степени, это уже ньюанс. Да, корень третьей степени не имеет смысла для int. То есть темплейты охватывают очень мало реальных задач (имхо).

Re: int в строку

[identity profile] psilogic.livejournal.com 2010-03-05 06:04 pm (UTC)(link)
[ Накуя вообще float? С ним программа работает существенно медленнее. ]

Пример - моя (и не только моя) программа обработки звука. 16 бит достаточно для воспроизведения в отличном качестве, но при редактировании возникает эффект накопления погрешностей. Поэтому надо 32 бита. А 64 (double) бита - уже жирно, поскольку звуковые файлы и без того огромны (пока их не сжали).

Темплейты охватывают до хрена реальных задач. Пример из той же оперы. Некий модуль программы меняет pitch (высоту) звукозаписи. Хочется, чтобы он мог работать и с 32-битным звуком, ибо удобен, и с 16-битным, ибо стандарт. Алгоритм непростой (учитывая буферизацию и интерполяцию). И накуя, спрашиваетяс, я буду писать три версии этого алгоритма (под short, int, float)? Естественно, я и не пишу, у меня это оформлено как template.

Re: int в строку

[identity profile] kelavrik-0.livejournal.com 2010-03-05 06:57 pm (UTC)(link)
Понятно. Я бы считал всё с максимальной точностью, а сокращал бы при сохранении.

[identity profile] psilogic.livejournal.com 2010-03-05 08:15 pm (UTC)(link)
Я и не считаю во float, но значительную часть алгоритма составляют чтения/записи в разных точках звуковой дорожки, которые перемешаны с вычислениями. Соответственно пришлось бы делать много-много копипасты и допускать кучу ошибок, связанных с копипастой. Можно перегонять каждый раз в double и обратно, но это - дополнительные накладные расходы, которые не оправдать ничем, кроме разве что нелюбви к template-ам :)

[identity profile] kelavrik-0.livejournal.com 2010-03-05 08:48 pm (UTC)(link)
Возможно проблема в разных задачах. Я выбираю сам формат для записи промежуточных файлов, да и промежуточных у меня мало. Поэтому проблема как таковая не стоит. Ну и мне не надо копировать память на диск и обратно. Поэтому я свободен в выборе типов данных и всегда выбираю подходящий. И мне просто не нужны темплейты. Если тебе надо считать и сохранить как есть, то возможно для тебя темплейты имеют смысл.

[identity profile] psilogic.livejournal.com 2010-03-05 09:03 pm (UTC)(link)
Блять... как же заебали меня извраты с уголками в ЖЖ
ну ты понял :)

[identity profile] kelavrik-0.livejournal.com 2010-03-05 09:26 pm (UTC)(link)
Эх, за исключением того, что почту смотрю перехватывая управление другим компом. Ну понял.

Обычно мне так или иначе приходится создавать класс с деструктором. Поэтому нет проблем с удалением массива внутри класса. Ну а массив обычных доблов удаляю перед каждым ретурн. Проблема то нулевая.

[identity profile] yogsagot.livejournal.com 2010-03-06 03:20 pm (UTC)(link)
На вопрос "Можешь ли ты это написать?" хороший программист отвечает либо "могу", либо "могу, но не знаю как".
(С) классика. =)

[identity profile] psilogic.livejournal.com 2010-03-06 03:55 pm (UTC)(link)
ггг :)
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 05:51 pm (UTC)(link)
Напиши на бумажке
когда я ходил на собеседования, после этих слов я вставал со стула, вежливо прощался и сваливал.

Ketmar
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 05:54 pm (UTC)(link)
а я вот из буков делаю слова, из слов предложения, из предложениев абзацы, из абзацев текст. я теперь писатель?
no1u1w1w6c: (Default)

Re: int в строку

[personal profile] no1u1w1w6c 2010-03-06 06:00 pm (UTC)(link)
>Могут и дефайн обернуть в скобки
такой компилятор надо аккуратно собрать в архив, а архив уничтожить.

кстати, ругань компиляторов по поводу const считаю совершенно идиотской: по-сути, компилятор заставляет меня делать то, что может и сам. у любого приличного компилятора хватает мозгов понять, что параметр не меняется — ну и делай себе код, чего материться-то? но нет, какой-то мудак посчитал, что это, де, понизит качество кода. я с нетерпением жду, когда же аффтары компиляторов наконец додумаются выкинуть из них кодогенераторы, а то что-то людишки совсем разбаловались. пусть переводят высокоуровневый код в машинный руками, а задача компилятора будет — проверить перевод и выдать 9e+3 варнингов, но ни в коем случае не поправлять ничего.

[identity profile] psilogic.livejournal.com 2010-03-06 06:08 pm (UTC)(link)
отказался писать на бумажку - спас дерево :)))
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 06:20 pm (UTC)(link)
два дерева — одно из них собеседование проводило.

[identity profile] psilogic.livejournal.com 2010-03-06 06:51 pm (UTC)(link)
да ладна =)
чо те стоит на бумажке накалякать 10 строк =)

[identity profile] psilogic.livejournal.com 2010-03-06 06:58 pm (UTC)(link)
Декларация функции - это что-то типа декларации о намерениях. Когда пишешь char* name вместо const char* name, то тем самым декларируешь намерение этот самый 'name' изменять. Если не сейчас, то когда-нибудь. А на вход суется то,что изменять нельзя. Отсюда и ругань.

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

Сам же на стенку от тормозов и полезешь :)

[identity profile] psilogic.livejournal.com 2010-03-06 07:01 pm (UTC)(link)
Вот ежели после накалякивания на бумажке начинаются вопли на тему опечаток и мелких багов в алгоритме - тогда и правда можно вставать и уходить... поскольку в реале умение писать все правильно с 1 раза не предполагается.
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 07:02 pm (UTC)(link)
а смысла не вижу. если они настолько бедные, что для соискателя нет даже свободной машины — нахера мне такая контора? а если они настолько ебанутые, что для соискателя нет свободной машины, то нахера мне такая контора ещё раз?

я, кстати, вообще очень плохо ручкой пишу. я мыслю блоками, а не строками, и на листочке привычно сначала пишу обрамления блока, а потом долго думаю, как туда строку вставить. мне чо, со своим нетбуком ходить, что ли? так я бы не взял, например, на работу существо, которое по доброй воле дома работает под Slackware, и водружает Слаку на все машины в области досягаемости. %-)
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 07:04 pm (UTC)(link)
кстати, для некоторых языков бумажка вообще противопоказана: для Схемы, например. не, есть, наверное, маньяки, которых прикалывает считать скобочки, но я предпочитаю, чтобы это делал редактор. %-)

Re: int в строку

[identity profile] kelavrik-0.livejournal.com 2010-03-06 07:12 pm (UTC)(link)
Может вы и правы. Это вечный источник ошибок.
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 07:17 pm (UTC)(link)
ну и пусть перепроверяет, чо. не вижу в этом ни тормозов, ни проблемы же. другое дело, что компиляторы си до сих пор живут в 70-х годах прошлого века — ну так это их личная беда. всё равно они нужны ровно для того, чтобы быстро сделать реализацию Схемы, и остальную часть проекта писать уже на нормальном языке.

хотя, конечно, тонкая настройка варнингов решает, да и я сам везде консты леплю, факт. привычка осталось ещё со времён очень тупых компиляторов, которые часто генерили лучший код, если const зафигачить.

но всё это, опять же, не отменяет того, что у компилятора должен быть нормальный lint-режим, в котором он не идиотскими варнингами будет верещать, а нежно советовать: «вот тут const поставь, чувак. а вот тут у тебя простыня на 25 экранов с охуенным LOC, сделай с ней что-нибудь!» и ты пы.
no1u1w1w6c: (Default)

Re: int в строку

[personal profile] no1u1w1w6c 2010-03-06 07:21 pm (UTC)(link)
тут, на самом деле, тонкая грань. с одной стороны — лишний мат раздражает. с другой — помогает менее опытным дисциплинироваться.

[identity profile] psilogic.livejournal.com 2010-03-06 07:21 pm (UTC)(link)
[ всё равно они нужны ровно для того, чтобы быстро сделать реализацию Схемы, и остальную часть проекта писать уже на нормальном языке. ]

гы гы гы :))

[identity profile] psilogic.livejournal.com 2010-03-06 07:23 pm (UTC)(link)
Дык, эта, ежли соискатель не может рот разинуть и сказать, дескать, не люблю я на бумажке писать, давайте я вам в каком-нить редакторе - а сразу вскакивает и обиженно уходит, то... мож он и норм. программист, но в работе с таким капризным замаешься :)
no1u1w1w6c: (Default)

[personal profile] no1u1w1w6c 2010-03-06 07:26 pm (UTC)(link)
да. я бы давно совсем на Схему перешёл (та же Ypsilon, например, офигенно крута), но не все заказчики проникаются илитарным духом, увы. что не мешает мне аккуратно встраивать в софт всякие Схемы. сначала — типа для чтения конфигов. потом — чуть-чуть скриптов («это для вашего же удобства!»). а там, глядишь, и половина софтины уже на Схеме. и никто уже никогда не поймёт, как она работает — потому я незаменим. %-)

Page 2 of 4