The fundamentals of computer science, as well as programming, is solve practical problems. To learning and master programming, one has to build something even it's simple at the beginning. Once one has built something, he will be able to build bigger things.
One issue is student are taught to program, but at that time, e.g., high school and college, he has no idea how a program or software actually works. He has very limited appetite to program.