bash.im ithappens.me zadolba.li
12476

Пора готовить лыжи

Устроился в одну контору программистом с испытательным сроком. Как известно, для хорошего программиста язык — это инструмент, как для слесаря пассатижи.

Сразу предупредили, что язык сложный (Caché ObjectScript), и до меня было много претендентов, но никто не справился. Наставником определили бывшего препода по информатике, 50+.

Первое задание: морской бой. Консольный вариант: 80×25, мыши нет, псевдографика. Написал, показываю. Наставник негодует:

— А почему у тебя координаты надо вводить? Давай позиционирование по полю противника сделаем курсором и расстановку кораблей тоже.

Переделал, показываю.

— У тебя всплывающие сообщения игры слишком большие, давай окошки сделаем поменьше. И у меня всегда должно быть право выбора!

Уделал этот морской бой до неузнаваемости: фон псевдографикой, меню настроек фона, цвета окон, способы стрельбы, подсказки и т. д. Было бы в 90-е — продал бы его. Показываю.

— Ну, я тебе троечку с минусом за эту работу поставлю, только за то, что что-то делал.

— Тут оценки ставят?

— Нет, это чтоб ты ощущал.

Потом открывает код, и начинается самое интересное:

— Нет, так не пойдёт, стиль я такой не приемлю, он нечитаемый. Эти твои скобочки только в глазах рябят.

И начинает учить ходить заново:

1. Каждый оператор с новой строки!

То есть запись на C++ вида int a, b, c, d; должна быть:

int a;
int b;
int c; …

2. Если количество операторов внутри цикла или условия больше трёх — нужно выносить код в отдельную процедуру.

Запись вида:

if (k == 1) {
    f = "Фамилия";
    n = "Имя"; 
    o = "Отчество";
    t = "123-45-67";
} 

должна выглядеть так:

if (k == 1) { pr () }

void pr (void) {
    f = "Фамилия";
    n = "Имя"; 
    o = "Отчество";
    t = "123-45-67";
} 

3. Имена процедур называем большим буквами, и не более восьми символов. В то же время имя процедуры должно явно отражать её действие. Переменные и функции называем маленькими буквами, названия тоже должны быть недлинными, но информативными.

И тут мой наставник сразил меня наповал:

— Ты же знаешь, чем отличаются функции от процедур?

— Да. Функция возвращает значение, процедура — нет.

— Не только! — торжественно произносит он и вопрошает, тыкая курсором в код. — Это что?

— Процедура.

— Нет! Это функция, ты ж ей параметры передаёшь!

Я не нашёлся, что ответить.

Попробовав переписать программу на этот лад, я остановился, не дойдя до середины. Я запутался в своём же коде: какая процедура откуда вызвалась и к чему относится. Фантазия на имена процедур тоже кончилась.

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