Написание настоящих программ несколько отличается от задачника в учебнике.
Требуется самостоятельно свести проблему к технической задаче, учесть окружение, в котором она будет выполняться, задуматься о юзкейсах, интерфейсе, логах и обработке ошибок, версионировании... в учебнике ничего этого нет.
Практика для программиста - это ситуация, когда кому-то нужно решение проблемы, а он берется разобраться с этой проблемой. В том числе и программируя.