Виталий Пухов: Тимур прав. Если мне нужна ЭС, то мне проще написать её самому, чем перелопачивать чужой код. За исходник я могу взять уже готовую и бесплатную ECM-систему (Alfresco Community, например) и, используя, её движок, сделать то, что нужно конкретно мне и моей команде. Не уверен, что Вы "для тренировки мозга" сможете сделать такой движок - это серьёзная тема. Но, конечно, можете попробовать.
По мере решения сложных задач логическое мышление развивается, как любой талант, данный человеку. Под развитым логическим мышлением, собственно, и понимается опыт решения задач проектирования. Тут главное не бояться брать ответственность, и при некотором трудолюбии Вы достигнете успеха. Как говорит Библия, "Видел ли ты человека проворного в своем деле? Он будет стоять перед царями, он не будет стоять перед простыми." (Притчи 22:29).
У Вас всё в порядке с логикой. Дальше всё решит трудолюбие, терпение и немного удачи.
Разработка всегда должна быть ограничена. Одно из домашних заданий - понять, почему это так :)
Если серьёзно, я кандидатам домашнее задание не даю. Оно требует слишком много времени на проверку, если оно серьёзное, и совсем ничего не даёт, если оно простое. У нас есть испытательный срок, где мы можем проверить человека в бою: сразу видно, что человек умеет, что он просто знает, насколько он вливается в команду, насколько обучаем...
А на собеседовании я проверяю способность человека понимать задачи и принимать обоснованные решения. И, конечно, знание основных нужных нам навыков на практических задачках. Они построены так, чтобы выявить "дно" кандидата. Но не само "дно" важно. На каждый вопрос человек должен не просто дать ответ, но и объяснить, почему именно этот ответ правильный.
Олег, тут не нужно бегать за красотой. Тот вопрос, который Вы описали, можно было бы решить просто хранимой процедурой, вызываемой в рамках обычной транзакции. Куча слоёв в данном случае - академический подход, но так ли он нужен?
Я бы не стал категорично утверждать, что "не важно на каком языке ты пишешь, основы одни и те же". Разница есть, и она существенна.
А чтобы выйти за рамки языка, нужно смотреть на архитектуру платформы. Ведь язык программирования - всего лишь инструмент, которым пользуется программист.
Смотря что понимать под документами. Мы храним события, происходящие в большой распределённой системе. Нагрузка примерно та же, что и у Вас. Миллиарды записей в сутки. Структура похожа: guid, штамп времени, данные в формате bson. Записи идут от десятков тысяч устройств квазинепрерывно: паузы могут быть из-за проблем со связью (местами есть только gprs), при этом при восстановлении связи данные погружаются.