?

Log in

No account? Create an account

Previous Entry | Next Entry

Тест -- какой Вы программист?

Тест устроен следующим образом -- дана простенькая программистская задача и 9 вариантов решения. Надо выбрать тот вариант, который Вам наиболее близок. Потом в описании можно будет посмотреть КАКОЙ Вы программист. Этот тест расскажет о вашем программировании возможно даже больше, чем Вы сами хотели бы знать.

УСЛОВИЯ ЗАДАЧИ
Переменная I представляет собой полное слово с фиксированной точкой. I принимает значения 1 либо 2. Если I оказалось равным 1, замените его на 2 и наоборот. Выберите наиболее близкое вам решение
   
РЕШЕНИЯ

1. IF I='2' THEN I=1;
ELSE I=2;
______________________________________
2. IF I=2 THEN I=1;
IF I=1 THEN I=2;
______________________________________
3. IF I=1 THEN GOTO SKIP;
I=1;
GOTO DONE;
SKIP: I=2;
DONE:
______________________________________
4. J=2;
IF I=2 THEN J=1;
I=J;
______________________________________
5. DECLARE SWITCH LABEL;
. . .
IF I=1 THEN SWITCH=ONE;
IF I=2 THEN SWITCH=TWO;
GOTO SWITCH;
ONE: I=2;
GOTO DONE;
TWO: I=1;
DONE:

DECLARE ONETWO(2) FIXED BIN(31) INIT (2,1);
. . .
I=ONETWO(I);
______________________________________
6. I=3-I;
______________________________________
7. I=I-(I/2*2)+1;
______________________________________
8. IF I=2
THEN DO;
I=1;
END;
ELSE DO;
I=2;
END;
______________________________________
9. IF I=1 THEN I=2;
IF I^=2 THEN DO;
PUT LIST('ПЛOXOE I — ЗAMEHEHO HA 1');
I=1;
END;

[Смотреть результаты]
1. Недавний выпускник трехмесячных курсов программистов.
Не более одного из десяти окончивших такие курсы знают разницу между 2 и "2". Удивительно, как можно вообще программировать без знания столь фундаментальной концепции.

2. Преподаватель программирования на 3-х месячных курсах.
Это решение хуже предыдущего. Много ли, однако, обучающих программированию сами написали и отладили хотя бы одну программу?

3. Программист на FORTRAN'е, только что окончивший курс PL/1.
Да, старую собаку не научишь новым штукам! Это решение дает верный результат, но это все, что можно про него сказать.

4. Программист на ассемблере, прошедший тот же курс.
Это решение не является ни прямым ни эффективным. Возможно, это результат обучения языку PL/1. В нем есть та прелесть, что оно не содержит самомодифицирующих кодов, но это лишь результат возврата на землю после изучения языка высокого уровня.

4. Системный аналитик.
Прекрасная иллюстрация для тех, кто думает, что обязанность системного аналитика — такая разработка алгоритма, в которой окажется некомпетентен даже хороший и опытный программист.

5. Сomputer Scientist.
Наверное, это самое умное решение. Однако такие "сальто-мортали" без комментариев оказываются весьма непонятными. Искусство требует жертв, а жертвой будет тот, кто разбирается в этой программе — может быть, сам автор через три месяца.

6. Математик.
Очень похоже на предыдущее, столь же элегантно, но опять-таки встает проблема: как же в нем разобраться?

7. Программист, заботящийся о секретности своей программы.
Вот работа настоящего композитора, и конечно, никаких комментариев. "Я могла бы придумать и более запутанный способ, как это сделать, — с гордостью сказала белая королева".

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

9. Хороший программист.
Заметьте, что ни одно из решений 1-9 не проверяло диапазон значений I, а это весьма опасно. К несчастью, вас не спасут ни структурность, ни фантастические алгоритмы, ни элегантность решения, если вдруг окажется, что I первоначально не было равно ни единице ни двойке.

Для любопытных -- я выбрал решение 6. И в половине моих программок выбирается по типу "решение 6". Хорошо это или плохо -- смотря для чего и для кого...
promo torin_kr december 5, 2015 19:43 25
Buy for 200 tokens
Этот пост -- заказной. Меня его попросила написать одна моя хорошая знакомая, с которой мы знакомы такое количество лет. что аж страшно становится. Как говорит в таких случаях мой младший брат -- "Да ну нафиг. Столько и не живут". Живут... к сожалению. Ладно, это было лирическое…

Comments

( 31 comments — Leave a comment )
sergio_ivanov
Feb. 22nd, 2019 02:31 pm (UTC)
Это походу модификация старого анекдота-притчи про трех программистов, нанимавшихся куда-то в гигант индустрии типа IBM. Один был обычный прикладник, второй - кул хацкер, третий - старый пердун, который кодил когда-то в молодости, а в последнее время занимался разработкой и проектированием, редко прикасаясь к компьютеру.
Так вот хакер выбрал вариант 6, и его с треском вытурили с собеседования ;)
А устроился на работу старый пердун, и только за то, что снабдил процедуру подробным комментарием (мало ли кто будет потом разбираться в его коде, когда он помрет), без понтов задекларировал переменные, чтобы было понятнее разбираться и, самое главное, не постеснялся использовать форматирование кода табуляциями, потому что привык не создавать помех читабельности.

Понятное дело, выводы сделает каждый свои, но притча в целом производит впечатлееееение...
torin_kr
Feb. 22nd, 2019 04:39 pm (UTC)
Всё зависит от задач. На задачи с которыми справляются старые пердуны от 1С я и сам не пойду. Даже за в два раза большие деньги...
sergio_ivanov
Feb. 22nd, 2019 05:08 pm (UTC)
Все верно, от задач. Когда стоит задача для себя что-то накропать по быстрому, без риска опозориться, то годится и вариант 6.
Когда работаешь в команде, следует поскорее превратиться в старого пердуна, и высокомерие здесь - твой самый злейший враг. Иначе окажешься на улице.
torin_kr
Feb. 22nd, 2019 05:11 pm (UTC)
Я меняю работу примерно раз в полтора года -- мне просто становится скучно на предыдущем месте. И каждый раз на собеседовании я говорю -- я буду работать у вас пока у вас будут для меня интересные задачки, как только они кончатся я уволюсь.

Как по-Вашему сколько времени я обычно ищу новое место работы? С учетом того что мне в этом году исполнится 58...
(no subject) - ng67 - Feb. 23rd, 2019 10:43 am (UTC) - Expand
(no subject) - sergio_ivanov - Feb. 27th, 2019 08:53 am (UTC) - Expand
mindfactor
Feb. 22nd, 2019 03:01 pm (UTC)
>Для любопытных -- я выбрал решение 6.

А потом мы удивляемся, почему 1С в сиквел запросы "SELECT TOP N" фигачит, ага.


Подобным я в молодости переболел. Как только начал поддерживать свои творения - мозги враз, за каких-то полгода, от подобного говна очистились.
А всего-то понабилось переписать заново пару сложных алгоритмически функций с нуля, потому что я забыл, как они работают, а имеющихся каментов оказалось недостаточно, чтобы разобраться, найти и исправить ошибку (то, ради чего я вообще туда полез) в работе.
torin_kr
Feb. 22nd, 2019 04:37 pm (UTC)
Никогда не видели запросы, которые пишет Евгений Гилёв? Могу скинуть парочку...
mindfactor
Feb. 22nd, 2019 04:41 pm (UTC)
Скидайте, чегоб нет.
(no subject) - torin_kr - Feb. 22nd, 2019 04:49 pm (UTC) - Expand
(no subject) - mindfactor - Feb. 22nd, 2019 05:57 pm (UTC) - Expand
(no subject) - torin_kr - Feb. 23rd, 2019 05:59 am (UTC) - Expand
raoul_duke23
Feb. 22nd, 2019 05:20 pm (UTC)
switch (i)
{
case 1:
i = 2;
break;
case 2:
i = 1;
break;
default: throw new ArgumentOutOfRangeException();
}
torin_kr
Feb. 22nd, 2019 05:23 pm (UTC)
Всё понимаю кроме вот этого -- ArgumentOutOfRangeException();
raoul_duke23
Feb. 22nd, 2019 05:26 pm (UTC)
Поднимаем ошибку: входные данные некорректны
torin_kr
Feb. 22nd, 2019 05:26 pm (UTC)
Это на каком языке?
(no subject) - raoul_duke23 - Feb. 22nd, 2019 05:29 pm (UTC) - Expand
(no subject) - torin_kr - Feb. 22nd, 2019 05:35 pm (UTC) - Expand
(no subject) - raoul_duke23 - Feb. 22nd, 2019 05:39 pm (UTC) - Expand
(no subject) - torin_kr - Feb. 22nd, 2019 05:43 pm (UTC) - Expand
(no subject) - raoul_duke23 - Feb. 22nd, 2019 05:53 pm (UTC) - Expand
(no subject) - torin_kr - Feb. 22nd, 2019 05:59 pm (UTC) - Expand
(no subject) - raoul_duke23 - Feb. 22nd, 2019 06:01 pm (UTC) - Expand
(no subject) - torin_kr - Feb. 22nd, 2019 06:03 pm (UTC) - Expand
(no subject) - ng67 - Feb. 23rd, 2019 10:40 am (UTC) - Expand
(no subject) - torin_kr - Feb. 23rd, 2019 10:50 am (UTC) - Expand
(no subject) - ng67 - Feb. 23rd, 2019 01:08 pm (UTC) - Expand
a_spyd
Feb. 23rd, 2019 04:23 am (UTC)
Опередили :)
a_spyd
Feb. 23rd, 2019 04:30 am (UTC)
С точки зрения компактности исходника и быстродействия исполнительного кода, безусловно, решение 6 вне конкуренции.
Однако же, оно, во-первых, не слишком наглядно, и, во-вторых, не имеет контроля корректности исходных данных.
Мой вариант -- 10-й, предложенный комментатором выше, только попроще: с присвоением I по дефолту значения -1 (стандартный ERROR_CODE).

Edited at 2019-02-23 04:30 am (UTC)
mr_sad
Feb. 25th, 2019 07:02 am (UTC)
вариант 6 в целом не плох, я тоже любил "упрощать" код в подобных случаях. Но тут несколько минусов:
- человеку, который будет разбирать этот код в будущем бывают совсем не очевидны исходные данные и условия задачи и подобные "сокращения" затрудняют понимание кода
- если поменяются условия, то придется переписывать логику, а это замет больше времени, чем добавить условие в тот же Switch или IF
- если входящие данные не будут соответствовать условиям (только 1 или 2), то возникнет ошибка с не ожидаемым поведением
и еще один коварный момент. Если придется поменять тип переменной на число с плавающей точкой, то после выполнения операции i = 3-i уже не будет равно 1 или 2, что может привести к ошибкам, которые очень сложно найти.

Мне больше нравится вариант, предложенный raoul_duke23
dikaya_radost
Feb. 25th, 2019 09:37 am (UTC)
Мне ни одно не близко.
Наверно, писала бы 6, потом проверку на вхождение в массив допустимых результатов и лог с ошибкой, из текста которой было бы понятно условие. Потому что защита от идиота - один из важнейших аспектов любого кода ((( и идиотом может оказаться любой вовлечённый в процесс - от заказчика до программиста и в конечном счёте пользователя, уыы

Edited at 2019-02-25 09:38 am (UTC)
( 31 comments — Leave a comment )