Getting an academic degree in computer science is a step many choose on their path to becoming a professional software developer. The majority begin their journey with the academia and only then enter the industry. Some choose to pursue an academic degree in the middle of the road when they have already worked in the industry for some time. The reasoning varies quite significantly. Many believe the academic studies will provide them with valuable otherwise unattainable knowledge that will help them to become better professionals. The others only wish to obtain a degree as a formality to strengthen their position on the job market. Both reasons are valid and understandable and they both set a certain level of expectations, with both the students and the industry that awaits them when they’ve completed their quest for knowledge.

Whatever your motivation is, one thing is clear – going for a degree is a serious decision. More than that, it is a serious investment of your time and you have to know very well why you are doing it. For the duration of your studies you won’t be able to take a fulltime job, potentially a part-time job is going to be a problem too. The studies are going to become your priority and you must understand how this works in order to obtain the most benefits from your venture and gain the highest return on your investment.

Academic environment is generally surrounded by many illusions, misconceptions, preconceptions and false beliefs. The most widespread false idea is that the role of academia is to train workforce for the industry. That is far from the truth. Universities give education to the students. Academic lectures and courses have only one purpose in mind – to demonstrate various fields of knowledge and let students to experience a variety of things within a short period of time. This is the ultimate goal of the education – to extend your knowledge horizons and make you aware of the complexities of the world around you and the particular field you’re leaning towards, be it medicine, linguistics, arts, engineering or software industry. When the studies are complete, graduates can choose to specialize in a particular field with the two general choices – entering the industry or going into research. But until that time arrives, academia is not going to enforce any decision on you. And almost certainly you are not going to be trained into a skilled worker ready to get cracking from the first day on your first job.

Your studies of computer science will give you theoretical knowledge in many fields – data structures and algorithms, computer architectures, graphics, data analysis, information theory, cryptography, formal languages and grammars, compiler construction, architecture of operating systems and many others. That is the highest value of the education – getting a good overview of the field and forming a big picture. If you believe a priori you are going to become a practicing software developer, you will have to take additional steps outside the curriculum and find a way to get substantial practice developing software in your own time. The academic environment may not be offering you chances to write code at every step of the way, but it will not be stopping you from taking initiative and seeking out opportunities to do so. There are several options available which we are now going to discuss.

1) Whenever you get an assignment with any course, be it math, physics or anything else where there is a potential to automate your work – use it. Write some code, a simple application to process data, to run algorithms and analyze the results, to simulate natural processes and gather statistics. While it seems like not a big deal, it will be useful in learning about data types, operations on them, performance and rounding problems. From the basics you will move on to the higher grounds.

2) If you have a free choice of tools or when it is your own initiative to write a program, pick up a different tool each time. For common programming tasks there are usually several libraries and frameworks available. Try many of them, compare them, see how they approach solving problems, discover their limitations and strong sides. Learn several programming languages, procedural, object-oriented, functional. Compare their paradigms and what effect on application architecture they exercise. Forming a good overview of the technology landscape counts towards your goal of drawing a big picture.

3)Whenever somebody in your academic environment expresses the need for a little tool to help them automate some work – offer to write it for them, if you believe it is within your capabilities to accomplish. If it works, you will have forged a good relation with somebody in the staff. If it doesn’t – well, failure is still valuable experience and nobody is going to blame you for that. You’re just making your first steps and the success expectation is low by default. You’re not in a production environment where there are deadlines for delivering the work and you’re stressed all the way. Instead you have a relaxed schedule so take your time, try things, see if they work out. With your undertaking you would merely be offering a courtesy and they would not be paying you anyway, so nothing would be lost if you don’t succeed, provided that you really try.

4) With some courses you will see opportunities to write a helpful tool for the teacher. An utility to process some data and display the results could be a nice demonstration tool in the instruction process. An application to compare different algorithms and see how they handle particular data would yield some practical results the teacher could integrate into his material to prove certain points. An assessment tool to check if the students grasped particular knowledge. Any other form of a lab experiment that applies to the course you’re attending would always be useful and welcome too. Offer to code that tool. The teacher will most likely be very glad, and sometimes you can negotiate (or even be offered upfront) being freed from the final examination if you go an extra mile and offer your help. Be warned however that the last tip is a cultural thing and depending on where you live this may be perceived as inappropriate since it would mean you would be getting a favor over the others, even if it seems like a fair deal. You’re the best judge of your culture and it’s up to you to explore this opportunity.

5) If you’re deeply interested in a particular field, approach the teacher and ask if he or she would be willing to coach you if you personally would dive much deeper in the subject than the course foresees. Teachers are generally frustrated most of the time that students are generally bored with what they teach. When they get a highly motivated person in the pack, it lightens their day. If they genuinely like teaching, they would be bringing you more material on their own accord and spending more time with you helping you master the advanced section during the basics class. This is however a very personal opportunity and in part a cultural thing too.

6) Take internships that will help you get a foot into the world of practice. These are generally offered in most universities on local news boards. If you don’t see anything compelling, drop an ad on popular career sites or on programming forums popular in your country. Usually there is always a need for a smart student that could help around for very little money, and you will learn how things are being done in the industry. Be warned however that some companies like to exploit students and use them to do the boring work while not giving them a chance to learn. If you feel you’re in that situation, leave and take on another post. The internship only works as a mutual relationship, it should not go misbalanced.

7) If you see you’ve made a significant advancement over the other students, make them aware of your progress. Not that you should brag about your intellectual abilities, never do that, but offer to be a helping hand to the others who struggle with the material. It will teach you to be a coach for the others, even if in its simplest form.

8) Offer to give a series of presentations on some advanced material you’ve mastered, or at least don’t reject it when you’re asked to. Learning some presentation skills and the ways to shape and deliver information to the audience would add to the collection of your valuable assets.

9) For the group work choose to team with people with different background than yours, coming from another region or possibly from another country. Intercultural experience is going to be profoundly illuminating, if you’re willing to see past your differences and keep an open mind.

10) When choosing which courses to take, try to select the teachers with a practical mindset and possibly industry experience. You can expect to hear more useful and wise ideas in their lectures. And if you get yourself noticed and recognized as a motivated and enthusiastic student, they may help you land your first job as they are more likely to have connections in the industry. If you live in a location where the job market is tough, this can be a huge leverage. Don’t miss it.

If you stick to the default curriculum then it will pretty much be a wasted time and a lost opportunity. But if you do follow the advice you can expect to graduate with good marketable skills and be highly competitive against your former classmates who just tagged along for the ride.