1. Start with a small project and learn the necessary materials. Think of how you would have approached a particular problem before looking at the existing solutions.
2. Take a concrete product and get an understanding of the high level architecture. For example if you are interested in OS, read about linux kernel at high level and various algorithms . Or if you like database, look at Sqlite or mysql. Think of using a simulators to understand the flow . For example if you are learning Architecture, use SimpleScalar to know how instructions are processed. For networking there is NS.
3. Participate in forums like stackoverflow, quora, programming blogs (Joel on Software, Coding horror, AllThingsDistributed, Steve Yegge for example but this widely varies depending on your interest)
4. Some concepts are hard to understand, but most concepts are harder to discover in first place (even if they are easy to understand and even obvious — otherwise everything in CS would have been discovered in 5 years after invention of the computer ). The stack algorithm for evaluating expressions seems obvious now, but there have been hundreds of not-so-neat tricks that were deployed by hackers earlier
The breakthrough by computer scientists are achieved after years of struggle with ideas. On top of it, publishing the ideas and getting reviewed for publication takes lot of time, So what might seem obvious in retrospective may not be in fact obvious.
Quicksort seems obvious now – its inventor C.A.R.Hoare narrates an incident that when he discovered quicksort, it was hard to convince the people about its efficiency (and even correctness).
Dijkstra narrates that he was working for long time on shortest path problem, and suddenly one day on a vacation he discovers the proof. (office hours seem bad even for computer scientists )
5. Some concepts are really hard to understand…but they are just accepted (like electricity) without delving into the deep details. There are different levels of understanding things and depending on the project we can delve into internals. (When turning on a electric switch we don’t have to think about maxwell’s equations) Also understanding an algorithm in few minutes may just indicate smartness, that doesn’t guarantee s/he can invent a new one.
6. Learning itself is a journey. Some contexts and situation can quicken learning. For example, if you are in a situation where quickly sorting things can have real significance and impact (and all your peers are also working on it, and you can discuss with them and throw ideas, and your boss says your invention would save company millions of dollars) you would have discovered quicksort. Put yourself in situations where learning can be enhanced.