Теория-теории рознь, а на практике зачастую приходится вкручивать такое, что никакому теоретику даже в самом страшном кошмаре не приснится. Так что надо искать задачу по своим силам и в рамках своих знаний и решать её. Ибо при отсутствии опыта попытка сделать что-то большое скорее всего приведет к плачевным результатам, которые все равно потом надо будет переписывать полностью и с нуля. Так что самый лучший вариант - сначала научиться делать что-то небольшое, и не просто делать, а хорошо делать. Это даст какую-то базу опыта, опираясь на который уже можно будет решить какой проект посложнее взять. Кроме того, разработка ПО - это не только написание кода, а еще и проектирование архитектуры, модулей и подмодулей, библиотек, поиск решений, проверка решений, тестирование, выбор решений, менеджмент, исправление ошибок, общение с пользователями / клиентами / заказчиками, проектирование UI/UX и его тестирование, написание и оформление документации и тележка других мелочей. В реальности написание кода может составлять 15-30% от всего проекта (зависит от размера проекта и многих других факторов, конечно же). Зачастую ощутимый объем кода просто выкидывается - 10-20% может легко уходить в /dev/null. Теория в отрыве от практики - бесполезна и очень быстро забывается как бесполезный мусор.