Advice for Computer Science Students
April 22nd, 2008As I finish my third year in Higher Education at my second institute my ability has started to blossom into a formidable skill-set, one that may very well land me a well-paid job in the future. Through all the courses I have taken, from HCI, Systems Analysis, Project Management, Program Development, Artificial Intelligence, Analytical Modelling, and more there is one main thing I have learnt, along with any other student at any other institution taking any other course.
I have learnt how to play the education game.
Sure, in my time in Higher Education I have learnt some tools that will help me when I graduate, looking for a job at some firm in the real world, but what have I really spent my time doing? I’ve attended lectures, listened to what I was told and carried out assignments to test my ability to listen to what I was told. Are these skills really going to get me my dream job?
Sadly, the answer is No.
Throughout my time at university I’ve learnt that it’s really no different from working a normal job, apart from the late starts and early finishes (and the small fact that I’m not getting paid by the hour to work). Three years of mediocrity for a slip of paper that proves to an employer that my claims of competency at my chosen profession are true, only to end up having my skills tested again in the interview process. The worst part is that if you’re attending a mid-quality university like I am you’re not guaranteed a great curriculum. My only choice at university was Computer Science as it embodied everything I enjoyed in a profession, yet my programme structure has become so diluted and stripped of good optional courses that the university and the students may end up:
- Stripped of their BCS endorsement for a quality CS curriculum
- Losing out on essential knowledge needed in a CS curriculum and the general workplace, like HCI, Software Engineering, any ground knowledge of Mathematics for Computer Science, etc
Unless you’re attending a world-class university then don’t expect to come out of university into a job without some hardships and lessons that need learning. Even if you’ve graduated top of your class from Oxford or Harvard then still expect to come crashing-down to Earth when you hit the main stage.
Although my circumstances were far from ideal I have had the opportunity to attend two different institutions of Higher Education, one focusing on practical teaching and development, and now one that teaches a theoretical curriculum. I have also had the opportunity to work for different companies to flex my professional muscle. This experience has taught me far more then my university ever could.
So here it comes, the advice you’ve scrolled down the rest of this boring article to read, in simple bullet points with explanations below.
- Learn to write before you code
- Read five or more books a year outside of your course
- Get some work behind you!
- Don’t stop learning!
- Programming Matters
- Software Engineering Essentials
- You may need Maths
- You will need Business
- Talk about Computer Science!
- Challenge yourself!
- University Topics
Learn to write before you code
If your view of a programmer is that geeky, turtleneck wearing, calculator-wielding social reject that lives in the basement churning out thousands of lines of code a day whilst debating on online chat rooms with stupid titles like “KiRk Vs PiCaRd!!!” then you need to get with the times.
We’re allowed outside now!
On top of that organisations are changing, and business needs are shifting. Software Developers now need to go into the outside world and communicate with potential clients and customers, delivering pitches and presentations, and writing documentation for important Projects. Your job is not to write code any more, you’re expected to write specifications, user-documentation, pitches, test plans, and much more.
Don’t worry! You’re still allowed to watch Star Trek and your favourite Anime, but when you’re at work you have to be able to communicate your ideas.
Popular software developer Joel Spolsky has this to say on the very same subject.
“Would Linux have succeeded if Linus Torvalds hadn’t evangelized it? As brilliant a hacker as he is, it was Linus’s ability to convey his ideas in written English via email and mailing lists that made Linux attract a worldwide brigade of volunteers.”
When I found this Blog post about two years ago it inspired me to one day get my own Blog up and running to talk on this very subject, and here it is! Writing about coding, development, design, and other related subjects is an educational experience for the author as much as it is for the reader, and for this very reason I recommend that you create your very own Blog! Even if you feel you’re just writing to yourself those posts you’ve written can stay with you for a very long time, and may one day prove valuable for future prospects.
I understand that my writing is at times awful, but I am still learning through practice. When learning to write well there is really only one online resource you’ll need, and that is The King’s English by H.W. Fowler.
Set yourself up a Blog, open up The King’s English and write about something that interests you. The skills you learn through writing may one day be the deciding factor that’ll land you your dream job.
Read five or more books a year outside of your course
If you’re already a university student you’re probably complaining that you’ve read enough books already. If this is the case then you’re either not enjoying what you’re reading or you’re not reading enough. I could go on about how we Computer Science students are different from everyone else in the fact that we need to continue learning, but I’d just be lying to you in the worst possible way.
The truth is, we Computer Science students have it easy when compared to students taking other courses. Bloggers and authors constantly compare us to ‘professional’ workers, like Doctors or Lawyers when realistically we are nowhere near the level of pressure they are under. I recently sat down in front of the TV for the first time in a long while and watched a documentary named Chinese School. It followed the trials of several students at schools around China and what they go through to get to where they want to be. To pursue a place at a top university these students woke up at 5:30AM, revised all day and night, then went to sleep at 12:30AM six days a week. It made me realise something quite painful, being a student myself.
Western students are lazy, really lazy.
Doctors and Lawyers are constantly covered in text books, reading and learning more and more just to stay above the water. Their jobs are cut-throat, with the top jobs going to those who really work for it. Many lawyers have offices with their own gigantic bookshelves! If anything, I’d say the average CS student reads less than most other students, and will perhaps cover one or two books a year.
Another popular Blogger/Programmer, Ben Collins-Sussman, believes there to be two types of programmer.
There are two “classes” of programmers in the world of software development: I’m going to call them the 20% and the 80%.
“The 20% folks are what many would call “alpha” programmers — the leaders, trailblazers, trendsetters, the kind of folks that places like Google and Fog Creek software are obsessed with hiring. These folks were the first ones to install Linux at home in the 90’s; the people who write lisp compilers and learn Haskell on weekends “just for fun”; they actively participate in open source projects; they’re always aware of the latest, coolest new trends in programming and tools.
The 80% folks make up the bulk of the software development industry. They’re not stupid; they’re merely vocational. They went to school, learned just enough Java/C#/C++, then got a job writing internal apps for banks, governments, travel firms, law firms, etc. The world usually never sees their software. They use whatever tools Microsoft hands down to them — usally VS.NET if they’re doing C++, or maybe a GUI IDE like Eclipse or IntelliJ for Java development. They’ve never used Linux, and aren’t very interested in it anyway. Many have never even used version control. If they have, it’s only whatever tool shipped in the Microsoft box (like SourceSafe), or some ancient thing handed down to them. They know exactly enough to get their job done, then go home on the weekend and forget about computers.”
Many CS students aspire to one day work for a large tech company like Google, Microsoft, Yahoo, yet eventually fall into the 80% class. I think the above quote embodies the point perfectly, that if you want to succeed you need to treat your profession as your lifes-work. Go to your library and read everything you can find on that shelf! Go to your universities website and find all the recommended reading you can on your own subjects and read them! Find out what you’re taking next year and read everything you can on that! It’s hard work, but it’ll pay for your first mansion in Silicon Valley if you keep at it.
Get some work behind you!
I think we’ve established that becoming a good Computer Scientist is going to be hard work. Now comes the part where you need to turn all that theoretical education into experience.
From my own experience it’s pretty difficult to get part-time work in anything in the field of Software Development, Database Administration or other related areas. There are some firms that’ll take on students during the summer, and if you can find anything along those lines then I highly recommend that you apply. If there’s a job up for grabs then certainly take it!
There are two other areas for you to get some much-needed experience, and those are:
- Online
- Open Source Projects
Even though the Internet is started to get a bit crowded it is still the land of the free, where anyone with something to sell, whether it be a product or a service can make money from it. What’s stopping you from creating websites part-time to either run with advertising, or to sell to potential buyers? If you’re skills can transfer over to the Web there is a lot of potential for you. Past that it can give you a chance to work on skills to transfer over to your next job, or to try out something different from the mundane tasks chucked at you in university.
Other than working online, there is another avenue that many overlook, and that’s working on Open Source projects. Websites like SourceForge.net are always looking for developers to join in with their community efforts on projects, and if you feel you’re up to the task head on over and start contributing. As well as fantastic experience it also looks fantastic on your CV/Resume.
Don’t stop learning!
Many people seem to believe that once you’ve graduated with a degree the learning suddenly stops, and from the stories I’ve heard that’s far from the truth. If anything, once you’ve graduated you’ve got more to learn than ever!
Either way, while you’re in university you should make good use of the time you have by learning more about your favourite subjects. Now that we’ve almost embraced the Information Age as a society there is so much potential for a student to learn new things. Past all the books that are available in stores and libraries we now have the Internet, where 80% (there’s that number again) of students will get all of their course information from. This opens doors to loads of ways of learning, like:
- Blogs! Get an account with Bloglines or Google Reader (other RSS readers are available) and subscribe to all the design/development Blogs you possibly can, and read through each and every post you can. Over time you can weed out the bad ones and replace them with newly-found links.
- Video Lectures! YouTube, OpenCourseWare, ADUni.org and Berkeley Webcasts are fantastic places to learn more about any subject you want. If you have a spare hour or two watch a video lecture and write some notes up to help you remember.
- Online Forums! Take a look around the Internet and find a forum where you can meet loads of like-minded people interested in the same work as you. Just don’t join a forum in the hope that someone will do your coursework for you. Aim to contribute more than what you learn and you’ll be on a safe road.
- Wikipedia! Whilst there are many arguments about its credibility you can learn a lot from Wikipedia through reading the discussions and earlier versions on pages, as well as writing down references to find answers yourself.
With the academic resources at our disposal we will soon be producing some fantastic academics and workers. Make sure you use them!
Programming Matters
For me programming has always been the enter door to the world of Computing. Once you’ve written your first program you’ve stepped from casual computer user to wannabe developer almost instantly.
The mistake a lot of people make when learning to program is trying to learn the language. Whilst it’s very important to know the language the whole point of learning your first language is to learn how to program, not how to use a language.
I maintain that if you haven’t touched an IDE before your first language should be C. It is a mid-level language and a perfect introduction to Programming and the world of Computer Science. Anyone who learnt to program in C will remember the first time they came across Pointers as the defining moment of their development lives.
Once you grasp the basics you’re good to go into the wide world of programming, a world that only begins with C.
If you’re looking to become a serious programmer you need to get some different programming paradigms under your belt. Take some time to learn what Object Orientated, Functional, Concurrent, and Logical Programming is, and get stuck into programming with some languages in each of these paradigms. You’d be very surprised how satisfying it is to program outside of an educational environment.
On top of that, give scripting a try! HTML, CSS, PHP, Ruby, it’s all good to try out and you’ll find some of it very useful in the future. If you’re looking to give scripting a try check out SitePoint.
Finally, learning to program is good, but you’ll need to learn how to program clean code! Luckily resources today pride themselves on clean code so you’ll be sure to find out something on these subjects no matter where you look.
Software Engineering Essentials
Software Engineering is an area I know very little about. At college I favoured Web, Programming and Database modules and at my university CS students have been stopped from taking Software Engineering in the second year.
Either way, it is a very important subject that will help you no matter where you decide to take your career.
Software Engineering can teach you some very important subjects, like Project Managemant, Systems Analysis and Quality Management. Whilst many of these subjects can be bogged down with knowledge of methodologies and non-stop documentation/charts you will definitely feel more comfortable in a work environment, especially when working with others.
So far, everything I know about general Software Engineering is from the book The Mythical Man-Month: Essays on Software Engineering by Frederick F. Brooks, Jr. It is single-handedly the best resource on Software Engineering you’ll ever read, and if you’re even thinking about becoming a Computer Science student you must read this book. If you are currently a CS student and haven’t read it, what are you waiting for?!
You may need Maths
I have a confession to make, and it’s something that may/will tarnish my reputation as a Computer Science student.
I suck at Maths.
At school I achieve average marks in Maths, and until I started university I had no need to use Maths again. Now I’m paying the price for neglecting Maths and spend a lot of my free time trying to get my Maths skills up to scratch.
Some universities will teach you basic Mathematics as well as Engineering Maths for Computer Science. However, mine won’t offer the modules and we’re expected to know good Maths for the second year. Funny enough, a lot of students seem to fail their second year down to their lack of Maths knowledge.
Let this be a lesson to you! You may not need to know Maths well, but it makes everything a LOT easier for you if you do. Brush up on all the Maths you can, then take a look at Discrete Mathematics. There are hundreds of websites that can help you with Discrete Mathematics so a quick look on Google should bring up some good results.
You will need Business
Back near the beginning of this post you may remember my rant on geeks learning to communicate. That point leads directly into this one.
Business drives everything in this world, and now more than ever it drives software. If you’re going to be in the business of creating software then logically shouldn’t you learn about Business?
There is a lot one can learn from Business that can directly translate back into Computer Science. By understanding how business has operated in the past and the present you can see where certain applications won over customers and where others have failed. Most importantly, Business will be one of your main selling points when you apply for your first job outside of your degree. If you can operate well within a business setting and understand the domain of your role, along with the companies role in the global market you can work more efficiently within it. If I were to apply for a managerial job at a large department store that sold designer clothes some knowledge of business and marketing between large retailers, designers and other information would be extremely valuable.
A book I would recommend to anyone interested in Business and Marketing is the Handbook of Marketing by Barton Weitz and Robin Wensley. Whilst it’s very intense as a reading text, with a couple of weeks and a computer/library to look things up you can learn a lot from it.
Talk about Computer Science!
There is one indicator of a student that wants to do well in Computer Science. It’s not their grades or how well they program. It’s not even their knowledge of the subject!
It’s those who talk about it.
It’s strange, but only a handful of students will actually talk about their course and CS in general. Whilst everyone appears to have some long-term aspirations for their careers you’ll rarely find anyone talking about what they want to do when they graduate. What’s even funnier is that most students don’t even seem to know what they’ll be doing next year.
You can learn a lot about Computer Science just by talking to someone about it, or even talking to yourself about it. No matter how smart you think you are there is someone a lot stupider than you that’ll know something important that you don’t. You’ll never find these things out unless you’re willing to step outside of the classroom and talk to others about it.
A lot of people would paint a correlation between those who talk about CS and those that are passionate about it, but that’s simply not true. All that’s needed is some engagement and you’ll find it hard to shut some people up when talking about their interests. You can learn a lot about anything just by talking to people, so communicate!
Challenge Yourself!
There is more to programming than being able to write in some bleeding-edge language and being able to churn out a couple of hundred-thousand lines of code a month. These aren’t necessarily challenges that you’ll have to face in your chosen career, and whilst these languages will help you tremendously just ‘knowing it’ isn’t the reason you should be doing it.
The real reason this article exists and all these things are asked of Computer Science students stem from the basic need to challenge yourself in the workplace. Ever notice that students often leave things to the last minute, then panic about the excessive load of work? This is not just because we’re lazy, but because the challenge gets our brains working towards the goal, albeit not very well and at a thousand miles per hour.
Believe it or not your best work will be accomplished while you are under a mountain of stress, except more often than not stress won’t be the result of work done on your own time. Go out and find things to do that you have no idea of doing! Go and take an assignment that you know you cannot do right now and learn how to do it! I can guarantee two things, that you’ll hack your brains to pieces trying to find answers, and that you’ll learn from the experience when it’s all done.
Do you develop in PHP? Give ASP.NET a try next time instead. You might just learn something new that’ll completely transform the way you work.
University Topics
I’ll round this article up with some general advice when studying CS at university.
- Many lecturers aren’t interested in you getting a good mark. Their primary interest is in keeping other students heads above the fail mark.
- When you get given some coursework, make sure you read exactly what is on your page, repeatedly! You’d be surprised how many marks you’ll lose over your 3-4 years at university just through silly mistakes like writing about subjects that you’re not being marked on.
- If your university is like mine and has poor resources for students make sure that you get work done early. A few weeks ago I spent all day trying to find a computer running Debian so I could do some Java Programming on a certain network, only to see a lab full of students running Windows. On top of that my favoured Unix Lab had been changed to a ‘Vista Lab’. Fantastic…
- Attend every single lecture and write up all your notes neatly. I type mine out and leave them on the computer, so I can use Google Desktop to find material on anything I need to revise.
- Rule with an iron fist when doing group work. Be expected to do everyone else share, because there will always be that lazy student that’d rather stay in bed until 3PM than to walk five minutes to the computer labs on campus to help the group out with a project.
- Project Management techniques are fantastic when doing group work.
- The Library is your friend. Read every book you can while you’re there, because when you leave you’ll really need to read a certain book, only to realise it was sat next to you for 3-4 years.
- Back up everything twice! Leave one on your shared drive, one on a USB stick and email another to yourself.
- When you’re giving a presentation be prepared to give it without slides. Full system crashes happen a lot more than you’d think, and they WILL happen to you when you least want them to.
- Eat well. The last thing you want is to be tired or sick when you have to meet deadlines.
- Read the university rules on everything. You’ll want to make sure that you’re covered if anything goes wrong for you.
- Once you’ve completed your work go on a night out with your friends. Everyone needs to blow off steam so reserve any nights out for when you really need them.
May 19th, 2008 at 9:03 pm
[...] this is probably why I’ve managed to keep my love for the subject going. I actually find that talking about the subjects that you love is what keeps you knowledgeable about them! If you don’t talk about what you love to do with [...]