Привет
Достаточно долгое время работаю программистом-системщиком удаленно.
На собеседованиях на оффлайн работу спрашивают различные навыки в том числе и проектирование . И вот тут проблемы нередко возникают. На работе обычно долго думаю размышляю как что то задизайнить, ищу ответы в интернете как другие делают, бывает проектирование и обдумывание занимает у меня неделю. И в итоге делаю и все работает, приложения "на одного человека". А вот так чтоб сходу решить задачу как того требует на собеседованиях — не могу.
Например недавно вот попросили игру морской бой спроектировать. Нарисовал на доске два поля с кораблями и не знаю с какой стороны подойти, описал классы для некоторых сущностей (корабль, игровая доска, элемент корабля ) и затык.
Или спроектировать приложение-электронную таблицу. Бросился было делать. Например сказал "Нам нужен двумерный массив". Сразу последовал вопрос "а если много ячеек? Сотни тысяч например? А как быть с тем что часто ячейки незаполнены? " Вроде детские вопросы и программист с парой лет опыта должен сходу решать, но я не нашелся что сказать. В голову лезли " ну пусть будет связанный список из ячеек, или std map где индексы ячейки будут ключами". Cпросили как разруливать конфликты когда ячейки ссылаются друг на друга. Вспомнилось что есть какие то алгоритмы поиска циклов на графах, но какие так и не сказал, интервьювер все ждал ответа хмыкнул и на этом все закончилось. Ну не сталкивался я с такими задачами на практике.
Был вопрос про проектирование систему вроде гит-а. Но я понятия не имею как он работает и какие вопросы задавать тому кто предложил это спроектировать и с какой стороны подойти к решению.
Такое чувство что мои семь лет опыта мне дали столько же сколько сколько получают за два года работы другие. Различные проблемы умею хорошо решать, постепенно находя ответы в процессе настоящей разработки. Но как проходить такие собеседования с проектированием? Что почитать, по какой литературе учиться?