You need to find an actual problem that stretches what you know and demands you to dig deeper into areas of computer science that interests you.
Reading theory and books won't get you far as you will realize that the real-world problems bring a lot of perspective that is not documented well enough in most books.
So, how do find a challenging problem to solve? Most people will suggest working on side projects, but some really hard problems (e.g. distributed computing) requires resources that make it impossible to pursue as side projects. Also, having people much smarter than you around you helps with the learning. So, the alternative in this case is to join a start-up or a big co just so that you get a chance to explore difficult problems.
Comments
You need to find an actual problem that stretches what you know and demands you to dig deeper into areas of computer science that interests you.
Reading theory and books won't get you far as you will realize that the real-world problems bring a lot of perspective that is not documented well enough in most books.
So, how do find a challenging problem to solve? Most people will suggest working on side projects, but some really hard problems (e.g. distributed computing) requires resources that make it impossible to pursue as side projects. Also, having people much smarter than you around you helps with the learning. So, the alternative in this case is to join a start-up or a big co just so that you get a chance to explore difficult problems.