6 pieces of advice for Computer Science undergraduates (from a fairly recent Computer Science graduate)

tl;dr 6 pieces of advice for CS undergraduates:

Before I star­ted my Com­puter Sci­ence degree at uni­ver­sity, I had barely writ­ten a single line of code. The closest exper­i­ence to pro­gram­ming I had at that point was copy and past­ing C++ com­mands into the ARMA Cold War Assault level edit­or, prompt­ing AI sol­diers to run around my 17CRT mon­it­or. My choice of uni­ver­sity sub­ject was a toss up between some kind of Engin­eer­ing (Mechanical/​Civil/​Chemical) or Com­puter Sci­ence. Engin­eer­ing because that’s what my dad did. I had the logic­al kind of brain like him, and I liked Maths and Phys­ics at col­lege. Com­puter Sci­ence was on the table because my broth­er did it at uni­ver­sity and because of my dad’s skep­ti­cism in the chances of land­ing a good Engin­eer­ing job here in the UK. Demand for soft­ware developers was huge, so CS became the more attract­ive option. I did well at my A‑levels and man­aged to get onto a good CS course at the Uni­ver­sity of Manchester.

Day one, we star­ted learn­ing OO pro­gram­ming using Java. I remem­ber it to be one of the most stress­ful and chal­len­ging thing I’ve exper­i­enced to date.

Pro­gram­ming was a totally new and for­eign way of think­ing to me at the time. I was form­al­ising the lines of thought I usu­ally applied when solv­ing a Maths ques­tion at col­lege, into lines of char­ac­ters and sym­bols that a com­puter would eat up and do some­thing with. It was a com­plete cog­nit­ive shift that at the time was dif­fi­cult, but after­wards felt enlight­en­ing and awe­some. Ever since then, com­puters, tech­no­logy, and pro­gram­ming have become a massive part of my life pro­fes­sion­ally as well as personally.

So what’s your point, Joe? #

As you prob­ably guessed, I had a pretty great time at uni­ver­sity. Once I gradu­ated, I star­ted pretty much right away at Ret­ro­fuzz and got about work­ing on a bunch of cool code and awe­some pro­jects (includ­ing this guy’s and this guys’s website).

But a lot happened in between day one and my gradu­ation back in June 2014. I did loads and learnt plenty of inter­est­ing things. Things that cur­rent CS stu­dents (maybe even pro­spect­ive stu­dents) might find handy. So this post is to you guys and gals, about what I learnt, things that helped me post-gradu­ation, as well as oth­er stuff I wish I’d done dur­ing my time as a stu­dent. I hope you find them useful.

1) It’s ok not know­ing what the f**k you want to do. #

Like I men­tioned, before uni­ver­sity I didn’t know what I wanted to do. To be hon­est, that didn’t change much whilst I was at uni­ver­sity either. Only now that I’ve star­ted work­ing has my worldly dir­ec­tion only just star­ted to form and solidify.

But not know­ing is ok, and I wish I knew that as a student.

Espe­cially if you choose to work with soft­ware after you gradu­ate. Things change quickly. 8 years ago, iOS didn’t exist, neither did my cur­rent job. It’s highly prob­able that in anoth­er 8 years I’ll be doing a job that doesn’t exist today. Not know­ing keeps you search­ing. You start to fig­ure out what works for you and what doesn’t and hope­fully at the end, you arrive at a career you want.

2) Apply for intern­ships and place­ments. #

I was lucky enough to get on a 12 month place­ment in between my second and third years and then a few weeks later, a 6 week intern­ship. When it comes to that kind of indus­tri­al exper­i­ence, I can­not recom­mend it enough. There’s tonnes of great benefits:

Jug­gling place­ments and intern­ship applic­a­tions in par­al­lel to your stud­ies can be test­ing though. I remem­ber a 2 week peri­od of my second year where I was inter­view­ing for about 40% of the time whilst try­ing to com­plete a back­log of labs and course­work in the oth­er 60%. It was exhaust­ing, but in the end very rewarding.

3) Get to know as many of your fel­low stu­dents as you can. #

It’s not what you know, but who you know”; that old chest­nut. Maybe not 100% accur­ate but I think the sentiment’s there. You nev­er know how the people you meet will help you in the future, and it can be sur­pris­ing. I occa­sion­ally get requests from people I met in high school who’ve heard I code and have a bit money to spend on a web­site. The agency I interned at led me to my cur­rent job.

There is a bene­fit to mak­ing con­nec­tions and this is par­tic­u­larly true at uni­ver­sity. You’re work­ing with people who will gradu­ate and land some pretty incred­ible jobs. The girl you usu­ally sit next to in your micro­con­trol­lers lab might go on to big things at ARM/​Intel/​SpaceX, remem­ber you and one day reach out with work or a job offer. I’m spec­u­lat­ing here, since I’ve only been in work a short time. But it’s based on a con­sensus of advice and on a small, but grow­ing num­ber of per­son­al experiences.

Some ways of meet­ing stu­dents #

Join­ing Com­puter Sci­ence soci­et­ies is an easy way of meet­ing fel­low stu­dents. Depend­ing on how act­ive they are, there are often socials, pub crawls and oth­er kind of events organ­ised. Bet­ter yet, join the soci­ety com­mit­tees and take part in organ­ising the events.

Also, some CS schools integ­rate group pro­jects into their mod­ules. Des­pite the stressors added by the work, it’s anoth­er great oppor­tun­ity to get to know your peers. It provides a unique exper­i­ence in not just being around oth­er stu­dents, but in actu­ally cod­ing and get­ting stuff done with oth­er pro­gram­mers. Chances are this will be a blue­print for your career, so it pays to make the most of it. 

4) Work on stuff on the side. #

Side pro­jects are great, I love them. I also love see­ing the stuff oth­er pro­gram­mers get up to. They might be bash scripts that make your labs a little easi­er, toy web apps which do some­thing funny, or a twit­ter bot that trolls your mates (this repo being amongst one of my favour­ites). They’re fun and you learn stuff in the pro­cess. Stuff that can help you down the line and stuff that you can talk about, say, in a job interview.

Hack­a­thons are anoth­er great way of mak­ing some­thing cool as well meet­ing oth­er stu­dents. Work­ing as fast as you can in an team which has con­sumed far too much caf­feine and sug­ar can be really excit­ing, but do in mod­er­a­tion! If you’re lucky enough (and resi­li­ent to sleep depriva­tion) you might just come top and win some top qual­ity swag too.

Two things that I didn’t get involved with at uni­ver­sity, that I wish I had, was open source and con­trib­ut­ing to Stack­Over­flow.

Open source is hugely import­ant to the tech­no­logy industry and aca­demia. Our mod­ern digit­al eco­nomy has it found­a­tions built on open source frame­works and tools. Get­ting stuck in at first can be intim­id­at­ing, which is why I think most stu­dents don’t give it a go. Some open source code­bases can be huge and the exist­ing set of con­trib­ut­ors just as big. Even find­ing a pro­ject that you think looks inter­est­ing can be chal­len­ging. But once you do, the trick is to start small. If they’re on Git­hub, have a look through the repo issue track­er and find some niche bug that might be easy to fix. Write a bit of code then send a pull request and bam, you’re now a con­trib­ut­or. Developers love open source so this is anoth­er thing that will look great on your CV.

Stack­Over­flow is anoth­er thing that developers love, and anoth­er thing I wish I was more involved with. It clearly com­mu­nic­ates your know­ledge and your drive to help out the tech­no­logy com­munity. Send your pro­file with a bunch of repu­ta­tion points on to a developer and they imme­di­ately know the kind of stand­ard you’re at. I know a lot of people put their SO pro­files on their CVs, which is a great idea because of the clear com­mu­nic­a­tion it has with your poten­tial employers.

5) Keep your fin­ger on the tech pulse. #

Being able to keep up with the latest tech­no­lo­gies is a use­ful trait in tech­no­logy. The pace of change is con­fus­ingly intense to oth­er pro­fes­sions, so stay­ing on top of what is going on is important.

One of my favour­ites for keep­ing up to date with the tech zeit­geist is Hack­er News (setup by Paul Gra­ham of the Y Com­bin­at­or star­tup incub­at­or). It’s very Red­dit in format, and has a large tech­no­logy com­munity from a vari­ety of back­grounds and indus­tries. It’s always full of the latest news and com­ment­ary from some of most exper­i­enced mem­bers of the tech industry.

Your fel­low CS-ers are also great sources of news and devel­op­ments in the industry. So once again, meet plenty of stu­dents and you’ll be able glean a lot just from hav­ing a quick chat now and again.

6) Do SOME study­ing. #

You go to uni­ver­sity to learn, accu­mu­late know­ledge and spe­cial­ise. And part of that is study­ing, doing your assign­ments and sit­ting your exams. This is obvi­ously an import­ant part, so it felt wrong not at least men­tion­ing it.

There are a lot of tech­no­logy gradu­ate jobs (and post­gradu­ate schemes) that require a min­im­um clas­si­fic­a­tion for you to be con­sidered as a poten­tial can­did­ate. If those are the sort of jobs you’re after, then nail­ing your course assess­ments is obvi­ously very important.

A caveat though, your degree clas­si­fic­a­tion is not the be all and end all. You should be focused on invest­ing in your­self and take up the unique oppor­tun­it­ies uni­ver­sity life gives you.

But also.. #

Remem­ber to have a good time. Uni­ver­sity is great if you’re lucky enough to attend. Par­tic­u­larly with Com­puter Sci­ence, you’re sur­roun­ded by smart, bril­liant people. Make the most of it.🤘

If you have any ques­tion or com­ments feel free to dis­cuss on Hack­er News or send me a tweet.