In hindsight I feel like I focussed more on the soft skills needed to get an internship and how to actually go about it, so this time I’ll provide a bit of insight into the actual technical skills that I feel you need (or I need, at least I need while I’m here at Spark)
Let’s be clear right at the start, I have used maybe 15% ~ 20% at best, of the knowledge I learned at University. Most surprising of all is that most of what I have used, came from a stage one course. Yeah that course in HTML that everybody turns their noses up at because it’s for plebians who can’t into C? Take it. You’ll earn dollars with that course.
Speaking of courses, I’m in my second year of Uni, when I started with Summer of Tech I was the second semester of my first year, by the time the program wound down and internship offers were out I had completed my third semester - which brings me up to date as of writing this (I’m not taking any summer school papers - I’m not smart or beautiful enough to get away with that).
I’m doing a double major in Geography and Computer Science, and for those of you at the start of your studies, I would recommend picking up a second major, it gives your more flexibility in your degree, looks better on a CV and to be honest, it lets you avoid the courses in each school that don’t interest you or have bad reps for being poorly run. My degree consists of courses that I 100% love and am interested in, which makes it a lot easier to learn the content. Don’t hate your study, change it.
For those that want the nitty gritty of how useful each particular course has been, here’s a breakdown for you. Please note that I’m trying to keep it institution agnostic, so people who aren’t at the same place as me can still understand the topics I’ve covered and hopefully still get some value out of this post.
On the CompSci side of my degree, I’ve studied all the level one papers available, they are pretty generic so they don’t get named individually - they contained the basic theories of CompSci, the history of the field, an introduction to Java (though I understand they have now changed from Java to Python) and an introduction to data structures.
At stage two, so far I’ve taken courses in Discrete Mathematics (I was tricked into it, the course code said CS but should have been MATH), Algorithms and Data Structures, Software Construction, and Low Level Programming.
Software construction focussed on Java GUIS and threading, which haven’t been so useful for me here thus far, there was a small module on testing and a small module on version control though, and both of those were invaluable. Many people turn their noses up at testing, but it’s actually one of the most critical aspects of shipping software. If your code doesn’t work, you don’t (or shouldn’t) ship and you don’t get paid (Except if you’re a Triple A Game Publisher - I’m looking at you BF4 / AC:Unity).
Low level programming covered computing from Transistors up through to the C programming language. It’s a useful course in that it gave me a background in how computers actually physically compute, and therefore how to make things as efficient as possible, and why that’s important.
Algorithms and Data structures is a hard course, but also valuable in it’s own way. the knowledge there is the kind of knowledge you forget you need, and then you look at your code one day and think why is this so buggy and horrible and slow? Oh wait it’s because I somehow have made a triply nested loop where each iteration of each loop calls a recursive function. That’s probably hyperbole. But I am certainly much more aware of the way I structure code and solve problems now. So that’s something. I also learned search, I haven’t used it for work yet, but in one of the games I’m working on in my spare time, I use search, so that stuff is good to know.
As I alluded to earlier, discrete mathmatics, although billed and coded as a CompSci course, was actually
taught by math staff and was a maths course in disguise. It’s one of those courses where you don’t notice yourself using it until you find yourself trying to prove that some graph has some property and therefore is a better choice as a data structure than some other structure. I’m loathe to admit that it was a decent course because I don’t like, nor am I good at math. I’m probably in the wrong industry, I know.
Learn a version control system and become very familliar with it.
It’s an unwritten prerequisite that you know Git or some other version control system before you get into the workforce. If you don’t know what I’m talking about, at Ventures here we use Git. I also ended up learning Bash. Linux users you should have no issue with this, OS X also has bash. Windows users, it’s a bit wierd at first but once you get used to it, it makes life a lot easier (I actually find that I can do things in bash via command line faster then I can do things using a GUI now.)
Don’t forget to go outside. I’m real bad for that.