Устроился в одну контору программистом с испытательным сроком. Как известно, для хорошего программиста язык — это инструмент, как для слесаря пассатижи.
Сразу предупредили, что язык сложный (
Caché ObjectScript), и до меня было много претендентов, но никто не справился. Наставником определили бывшего препода по информатике, 50+.
Первое задание: морской бой. Консольный вариант: 80×25, мыши нет, псевдографика. Написал, показываю. Наставник негодует:
— А почему у тебя координаты надо вводить? Давай позиционирование по полю противника сделаем курсором и расстановку кораблей тоже.
Переделал, показываю.
— У тебя всплывающие сообщения игры слишком большие, давай окошки сделаем поменьше. И у меня всегда должно быть право выбора!
Уделал этот морской бой до неузнаваемости: фон псевдографикой, меню настроек фона, цвета окон, способы стрельбы, подсказки
и т. д. Было бы в 90-е — продал бы его. Показываю.
— Ну, я тебе троечку с минусом за эту работу поставлю, только за то, что что-то делал.
— Тут оценки ставят?
— Нет, это чтоб ты ощущал.
Потом открывает код, и начинается самое интересное:
— Нет, так не пойдёт, стиль я такой не приемлю, он нечитаемый. Эти твои скобочки только в глазах рябят.
И начинает учить ходить заново:
1. Каждый оператор с новой строки!
То есть запись на C++ вида
int a, b, c, d;
должна быть:
<code>int a;
int b;
int c; …
</code>
2. Если количество операторов внутри цикла или условия больше трёх — нужно выносить код в отдельную процедуру.
Запись вида:
<code>if (k == 1) {
f = "Фамилия";
n = "Имя";
o = "Отчество";
t = "123-45-67";
}
</code>
должна выглядеть так:
<code>if (k == 1) { pr () }
void pr (void) {
f = "Фамилия";
n = "Имя";
o = "Отчество";
t = "123-45-67";
}
</code>
3. Имена процедур называем большим буквами, и не более восьми символов. В то же время имя процедуры должно явно отражать её действие. Переменные и функции называем маленькими буквами, названия тоже должны быть недлинными, но информативными.
И тут мой наставник сразил меня наповал:
— Ты же знаешь, чем отличаются функции от процедур?
— Да. Функция возвращает значение, процедура — нет.
— Не только! — торжественно произносит он и вопрошает, тыкая курсором в код. — Это что?
— Процедура.
— Нет! Это функция, ты ж ей параметры передаёшь!
Я не нашёлся, что ответить.
Попробовав переписать программу на этот лад, я остановился, не дойдя до середины. Я запутался в своём же коде: какая процедура откуда вызвалась и к чему относится. Фантазия на имена процедур тоже кончилась.
Вряд ли мои предшественники, сколько бы их ни было, не смогли написать тот же морской бой или телефонный справочник. Пора готовить лыжи: учиться ходить задом наперёд желания нет.