?

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 декабрь 5, 2015 19:43 26
Buy for 200 tokens
Этот пост -- заказной. Меня его попросила написать одна моя хорошая знакомая, с которой мы знакомы такое количество лет. что аж страшно становится. Как говорит в таких случаях мой младший брат -- "Да ну нафиг. Столько и не живут". Живут... к сожалению. Ладно, это было лирическое…

Comments

( 18 comments — Leave a comment )
utyos
Feb. 3rd, 2014 12:57 pm (UTC)
Шестой вариант весьма элегантен. Но я бы конечно выбрал первый, потому что он буквально повторяет условие "Если I оказалось равным 1, замените его на 2 и наоборот" - простейшее решение.
torin_kr
Feb. 3rd, 2014 01:03 pm (UTC)
Как говорил некогда человек, учивший меня программированию -- "это не решение, это пересказ условия задачи...". Дело ведь не только в элегантности -- по скорости выполнения быстрее всего будет именно 6-й вариант. Быстрее первого он будет раза в три, а то и в четыре...
utyos
Feb. 3rd, 2014 05:58 pm (UTC)
Ну да, кстати к вопросу о профессионализме. Мой профессионализм исчерпывается полугодичным курсом бейсика MSX. А, и еще чуть-чуть паскаля в политехе. Посему я не в курсе, ПОЧЕМУ условный переход работает дольше чего-то другого, несмотря на то, что сам факт мне известен.
torin_kr
Feb. 3rd, 2014 06:40 pm (UTC)
Там ТРИ оператора -- выбора (это два -- сравнение и переход) + одно из двух присваиваний после выбора -- итого ТРИ операции. В варианте 6 -- два вычитание + присваивание.

Плюс то, что переход МЕДЛЕННЕЕ присваивания -- но это эффект второго порядка. Главное -- две операции вместо трех.
onanim.wordpress.com
Feb. 4th, 2014 03:47 am (UTC)
Что означает "Переменная I представляет собой полное слово с фиксированной точкой. I принимает значения 1 либо 2."? Это какая-то специфическая для <на чем Вы там пишете> хрень?
Если оно не оказалось ни 1, ни 2 - что делать?

6 - годится, но с комментарием.
torin_kr
Feb. 4th, 2014 04:09 am (UTC)
" "Переменная I представляет собой полное слово с фиксированной точкой" -- с чего Вы сударь начинали свой путь в программирование? Если с Фортрана или PL/1 -- то должны знать что такое "полное слово с фиксированной точкой". Если с С, то Вам достаточно знать, что эта переменная не может служить указателем...

Если оно не оказалось ни 1, ни 2 - что делать? -- да, это некий косяк решения №6. За все надо платить -- в данном случае это плата за скорость
pphantom
Feb. 4th, 2014 05:07 pm (UTC)
Почему же косяк? В условии возможный набор значений указан, так что все в порядке. :)

Просто идею о том, что "все надо проверять", иногда доводят до абсурда...

И, кстати, в тесте есть странность: "решение №5" на самом деле состоит из двух решений. Характеристика относится к первому, а второе - типичное решение embedded-программиста. :)

P.S. Мой ответ - 6.
torin_kr
Feb. 4th, 2014 05:10 pm (UTC)
" Мой ответ - 6." -- мой тоже. Ну согласитесь, же что он самый элегантный...
pphantom
Feb. 4th, 2014 05:13 pm (UTC)
Конечно. Хотя в некоторых случаях ответ 5b будет эффективнее.
torin_kr
Feb. 4th, 2014 05:17 pm (UTC)
Возможно. Но я совсем не embedded-программер -- страшно это от меня далеко
fon_rotbar
Feb. 4th, 2014 01:47 pm (UTC)
4
torin_kr
Feb. 4th, 2014 01:50 pm (UTC)
Хорошее решение. Аккуратное... Вторым программистом на проект я бы Вас с удовольствием взял.
fon_rotbar
Feb. 4th, 2014 02:32 pm (UTC)
Не более, чем тест. Больше полтораста сотен строчек сроду не писал.
torin_kr
Feb. 4th, 2014 02:52 pm (UTC)
Жаль... а то я уж был готов работу предложить :=)))
fon_rotbar
Feb. 4th, 2014 03:15 pm (UTC)
Кроме шуток: принял-бы.
torin_kr
Feb. 4th, 2014 03:19 pm (UTC)
Но 150 строк кода -- это как-то маловато. Я обычно в день пишу раза в два, то и три больше
fon_rotbar
Feb. 4th, 2014 03:21 pm (UTC)
Ну так для меня программистика никогда и не была работой.
Не более чем хобби и VBA как удобный инструмент.
torin_kr
Feb. 4th, 2014 04:44 pm (UTC)
А что -- работа?
( 18 comments — Leave a comment )

Latest Month

April 2019
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930    
Powered by LiveJournal.com
Designed by Akiko Kurono