Тесты-хуесты

Или вот, допустим, тесты. Нет ничего уёбищнее тестов. Я говорю не о unit-тестах, хотя они тоже весьма неоднозначны. И не о тестах на беременность, хотя тоже приятного мало. Говорю о тестах на так называемые «знания». Особенно для программистов.

Внимание вопрос: что вернёт следующий код?

(++i) - (i++) * (--b) + (b = 5) - (i = 6)

Единственный вменяемый ответ здесь может быть: а с какого вообще хуя мне это знать?!

Это не тест на программиста. Это не тест даже на кодера. Это тест на то, являюсь ли я машинным транслятором. А нахуй мне им являться? Трансляторы сегодня дёшевы, им много не платят.

i++ и ++i увеличивают i на единицу. Один из них возвращает значение i до увеличения, другой уже увеличенное. По-моему i++ возвращает исходное значение. А может нет. Я не помню точно, я давно не использовал возвращаемое инкрементом значение. Потому что я давно прошел этап «а давай сделаем код как можно короче, чтобы в нём вообще нихуя не было понятно».

Почему я должен держать в памяти значения нескольких переменных, последовательность комманд и выполнять их одну за другой? Может я вчера вечером водку кушал и мне сейчас тяжело этим заниматься.

Ладно, 5% подобных вопросов в тестах вполне в тему. Но посмотрите кругом, их везде по 95.

В стародавнии времена у меня в универе подобное было: «напишите код программы на бумажке». А потом: «ай-я-яй, я-я, я-яй, вы пропустили здесь точку с запятой». Блядь, почему я должен помнить о точке с запятой? За компом я её автоматически ставлю и не задумываюсь. А если забуду, компилятор напомнит и через секунду поставлю, на логику программы это никак не повлияет. Нет, блядь, вы забыли точку с запятой, забыли, а-я-яй.

Ладно в универе пердуны старые, которым ничего не нужно. И я трояк свой получил и мне тоже ничего не нужно. Но люди, которые берут на работу программистов, собираются платить им деньги, ставить доход конторы в зависимость от их работы. И эти люди проверяют их знания подобной ёбаной хуйнёй?

Вот D. Baranovskiy недавно опубликовал тест по JS под названием «Чобля, думаешь больше других знаешь?». Тест небольшой и достаточно интересный. Один из вопросов:

function a(x) {
	return x * 2;
}
var a;
alert(a);

Непосвящённые решат, что здесь сначала создаётся функция a(), потом управление доходит до var a, после чего либо функция заменяется на переменную, либо наступает конец света. Более шаристые ребята в курсе, что контекст создаётся сразу при вызове функции и все определённые в ней функции и переменные доступны сразу же. Сначала создадутся все переменные, соответствующие статически объявленным функциям, потом все переменные объявленные через var.

И здесь вопрос: а не перекроет ли var-определение определение function-declaration. А вот этого никто почти не знает, потому что никого это не ебёт. Приспичит выяснить все тонкости — можно почитать стандарт ECMA. Не приспичит, но интересно — просто запустить приведённый код.

Скорее всего var не перекроет function и alert покажет определение функции. А может перекроет. В итоге опять приходится угадывать. То есть человек, знающий про фишки с контекстом здесь ничуть не в лучшем положении, чем зелёный новичок.

Ответный вопрос — а чо ты типа умный такой предлагаешь в качестве тестов для программистов?

А ничего не предлагаю. В жопу тесты. В крайнем случае в виде: вот код, вот результат, а теперь словами объясните мне почему он таковой. А никак не выберите между A, B, C и D.

4 комментария »

Leave a comment