I've just officially graduated. My 4 years in university passed by in a blink of an eye. I suffered a great deal of pain during the last 4 years, but also learned a lot. For anyone still pursuing or thinking about pursuing a degree in CS, here's what you can gain after going through the same journey I did.
CS teaches you how to build things
A few weeks ago, I wrote a simple application that pulled Facebook feed data and filtered out the useful pieces of information I really wanted. I also set up Adium - an open source messaging client - as the primary Facebook messenger via XMPP/Jabber. I never had to visit Facebook for more than 30 minutes per week ever since.
It is just a tiny example of the mentality that we CS students are taught: Fix things that are broken and build things that are needed. Using Facebook has been very distracting for me, and yet I could not just delete my account because of some usefulness still embedded inside. So I built my own Facebook experience, making it work the way I wanted.
For us CS people, we're given a super power of understanding technology and using to our best advantage. If you find something broken, fix it. If you see anything missing, build it. It is how we're taught and what makes us different from others. It doesn't need to be the next Facebook or Google. Just start small by building something for your own use and slowly make an impact on the people around you. The world is run by computers. Computers are made by computer scientists, software and hardware engineers. So in some sense, we're the people capable of running the world and making it better.
CS teaches you how to make compromises
Most CS graduates will end up making software for a living at some points in our lives. A piece of software cannot run on its own but in an ecosystem of hardware architecture, operating systems, compilers, browsers, third-party libraries…, each of which has room for error. It's almost impossible to get a software product completely right and working flawlessly.
Therefore, the art of making software has pretty much been the art of making compromises. When writing code, programmers constantly have to make hard trade-off decisions, specifically between security, performance, matainability, and business values. A system with additional security layers is often slower. A low-budget application developed in a short period of time is often harder to maintain in the long run. It's the same thing in life. We all have to make compromises and trade-offs at some point, and CS students are no strangers to the concept.
CS teaches you various areas of computing
Some of the best programmers I've worked with are self-taught, which makes me wonder what a CS degree is truly worth nowadays. It is not that hard to learn programming and be awesome at it, so why bother going to school? After completing my degree, I've somewhat found the answer: CS-trained programmers find it easier to branch out to different work areas.
CS teaches the fundamentals, from programming methodologies to distributed system, algorithm design, and many many more. With that range of knowledge, CS-trained programmers can potentially fit in multiple fields in the industry. A front-end engineer can later be a kernel developer or make games for a living as long as she has the required knowledge to do so. It doesn't mean self-taught programmer cannot achieve the same thing, but with the CS fundamentals it's definitely much easier.
CS teaches you how to make yourself persuasive
Theoretical computer science is among my most favorite topics. Even though I didn't do well in the respective courses, I surely learned a lot. The thing that I will never forget is Prof Hifeng's saying "If you think you're right, prove it. It's not my job to prove you're wrong". It signifies the importance of proofs in theoretical CS. A solution that works in some cases doesn't mean it's correct until it's shown to work in all situations.
And this is not only in CS. I've learned that in order to make my self persuasive, I need to *prove* that what I'm saying is correct. In many cases, a rigourous proof is not possible, but it's a good practice to think about the reasons behind every statement made. Statements like "Python is better than Ruby" need a lot more convincing reasons than just "I like it more". To make it persuasive, first define the criteria for comparison, then show how Python is superior, and finally cite your references. It's hard for people to disagree with you when presenting yourself in this way.
CS teaches you how to not care about grades
Grades are an important part of university life. It's good to have good grades, but only if you don't have to die for it. Grades don't come naturally for some people. There are people like me who need a lot more effort to maintain a reasonable transcript, and consequently reduce the amount of time they can spend on more exciting things. In CS, there are many more opportunities to explore, more things to learn, and more projects to work on. If good grades are expensive, it's better to spend your time doing other things. Doing internship, getting involved in open source communities, or even building your own startup are among just a few.
CS teaches you to make a difference
It's true that nowadays CS graduates can find high-paying jobs more easily than students in other fields. But it's not just about the paycheck. As mentioned above, you're given a super power of fixing and building things. Use that power for the betterment of others. Build tools to help yourself, friends and family live easier lives. Start small and then potentially grow into something big. Even if you don't make money out of what you build, at least someone will find it useful.