Computer science is comprised of many many different areas such as theory, graphics, vision, AI, systems, databases to name a few. Naturally, one can not expect to master or even grasp the basics of all the different areas. But there is a difference between not getting a chance to learn all the different areas, and having studied but not understood the different areas.
The irony that I’m talking about is this. Throughout my undergraduate and graduate education, I was mostly a “systems and networking” person. Obviously I took classes in several other areas as well, and I think I learnt or retained something from most of these classes, with one exception. I took a database course in IIT, and then once again at UCSD, and both times I failed miserably to appreciate the subject.
At this point it would be easy to blame the faculty for not doing a good job, but I’m confident that the fault was no less my own. I remember sleeping through a lot of my database classes :(
Anyways, the point is that here I was, with a systems PhD, with zero background in databases and having pretty much zero appreciation for databases as an area, and where do I end up working at? A company that builds distributed database systems. I think its funny in a way. But the great thing is that I’m learning so much about databases now and appreciating the kind of engineering insight and effort that goes into building a performant, robust distributed database system.