Искали статеечку с жалобами джуна о несправедливости IT? Так вот же она!
В чём суть истории
Подал резюме в Lesta Studio. HR связалась, рассказала о командах. Назначили технический собес. Задавали вопросы по C++, на всё ответил. На вопросы по ОС показал себя плохо. В итоге сошлись на том, что нужно дать мне тестовое задание на многопоточку. До свиданья, до свиданья, HR пришлёт вам задание.
В итоге HR сообщает, что тестовое изменили, и теперь ты будешь делать на Qt редактор списка объектов. Срок неделя. Классика.
Ну ОК, установил Qt на комп (это заняло больше суток, ибо установщик работает лишь через VPN, а все бесплатные жесть какие медленные).
Само задание, если коротко: программа редактор списка игровых объектов. В ней должна быть возможность создавать файлы списков, сохранять их на комп, открывать внутри себя ранее созданные, чтобы просматривать или редактировать. Должна быть формочка для создания нового игрового объекта, чтобы было чем наполнять список, плюс нужно предусмотреть несколько базовых типов, которые уже есть при старте приложения, таких как "игрок" или "стена". Во время редактирования прога должна показывать, что есть несохраненные изменения, а также должны быть кнопочки undo\redo, если успете.
Разработка
Qt наконец-то установился. В начале зачем-то начал искать в базовых объектах какую-то логику, чтобы можно было через фабрику или абстрактную фабрику наполнять объект различными свойствами. Я это видел примерно как в Unreal Engine с их системой добавления переменных. Вот если сделал переменную типа float, то появилась GUI, чтобы двигать ползунок или вписать точное float значение, или если это строка, вместо этого открывался TextEdit, а если нужен объект, который работает по принципу union, выпадал список для выбора одного конкретного значения.
В общем, это только Core программы, а я прям застрял и часто переписывал код. Всё же пришёл к тому, что я слишком усложняю задачу, это ведь всего лишь тестовое задание, люди на том конце просто хотят увидеть, как чел пишет код, а значит мои переусложнения бесполезны. Сделанная работа лучше идеальной, сказал себе, тем более всего неделя дана.
Остановился на том, чтобы считать все свойства объектов строками. Написал небольшой парсер, дабы писать созданные файлы в специальном формате и при чтении потом на их токены можно было в дальнейшем накручивать дополнительную логику. Чтобы и имя объекта, и свойство, и описание свойства или объекта можно было легко отделить.
Это позволило выделить базовые типы объектов, о которых было сказано в тестовом, в отдельный файл и сделать из него нечто вроде БД, а в будущем это позволило бы легко изменить этот файл и в прогу загружались бы совершенно другие базовые типы. Вроде как достаточно гибко.
Примерно на этом этапе понял, что осталось 3 дня до сдачи, а у меня даже GUI не готово толком.
Я окончательно перешёл в режим кранча, формочку для создания объектов урезал лишь до возможности добавления объекту максимум до 2-х свойств, ибо о полноценной расширяемости не сказано в тексте задачи, а если обратят внимание, то легко докручу. Да и вообще, это ведь не главное. Главное – чтобы код был хороший (Да-да, наивный я, из прошлого).
Последним штрихом стало разграничение всех состояний основного окна приложения, чтобы я мог просто позвать одну функцию, передать ей аргумент из enum-а, а она мне все нужные кнопки делала активными, а другие прятала, какие-то scrollArea чистила и т.д. С таблицей состояний стало значительно удобнее.
Последние 2 ночи я просто не спал и сбил свой режим с намерением успеть допилить код. Добавил два стека для нормальной реализации undo\redo функций, которые были в тестовом не обязательны, а как задание со звёздочкой. Залил всё на Git, сделал ReadMe файл, оформил описание сценариев работы приложения с картинками, почти как настоящая документация, хе-хе.
Отдал всё HR. Через неделю приходит ответ и начинается самое интересное.
Результат
«К сожалению, показанный уровень выполнения тестового задания недостаточен для рассмотрению на позицию junior»