I had an interesting conversation over the weekend with a grad student who recently received a degree in both Electronic Engineering as well as Computer Science. He was concerned about how he could graduate and still know so little about what Computer Science really looks like when applied to a real job or during research. He has the passion that the field needs, but he doesn't have the direction. I would like to share with you all some of the points of our conversation.

My friend brought up small lists of what languages he knew and what languages he wanted to learn. He mentioned a few of the usuals like Java, C++ and Python, but throughout the evening he never talked of a project he wanted to start or a particular subject he truly wanted to delve deeper into. Knowing a lot of programming languages for all sorts of platforms shows good diversity and will definitely be a great tool for job hunting when he's done in graduate school. I can't say that learning multiple languages is not a good thing or that it's something he shouldn't do, but what he (and all CS majors) should do is find a subject of Computer Science that truly interests him and begin applying himself to that subject. My advice for him was to find a field, his own subject of study that is slightly more narrow than just Computer Science. Data compression, security, compilers, interpreters, games, data mining, data organization, data classification, there are hundreds of places he could apply himself. Of course, I don't mean that he or anybody should restrict themselves to these narrow fields, or even pick just one of these fields, but when you have a real project with goals and struggles, then you're going to start coming across the real experience that books simply cannot teach you. Set your sights high and pick something that you actually care about. You might not even want to work alone. Finding classmates or friends who share your interest in the field can help all who are involved stay interested and leap and bound through concepts of the material. People who have already started studying that field can be a great resource for pointing you in the right direction and explaining details that you may have trouble grasping.

I began applying myself towards encryption and cryptology as early as my VB6 days, around the age of 16. I'll be the first to tell you that I had no idea what I was doing, but the concept of destroying data beyond all recognition and still being able to flawlessly bring it back to 100% of what it originally was enthralled me and has been an area of Computer Science I've studied for 5 years now in my own time outside of school. 5 years ago when I started my cryptology studies, I stayed in contact with the best colleague and eventually one of the best friends I'd ever have, Karl. We have kept each other focused and informed about new discoveries or ideas and the subject matter never became stale that way.

In short, start a project in your free time. Look at examples of programs or theories that are already in that field and set a goal to understand what's already out there, and maybe someday add to that field. If you can, find some like-minded people and work alongside them. Mentors can be a great source of information, but some of the best discoveries are not handed to you, they're truly discovered. Don't rely on somebody to tell you what they think you should know. The most important thing is that you discover something that drives you to learn. A passion will carry you and shape you into a great developer if you let it.