Look off into to distance, there is a lot of stuff out there that we don’t know. OK, I’ll be honest, that line is there to give me a reason for setting a picture of my dog as the main image.
I’ve spent the last four years completing my Bachelor of Science in Software Engineering at the Institute of Technology, Carlow. During those four awesome years I’ve learned a crap load of stuff. I’ve learned stuff in my first year which I can recall right now and I’ve “learned” things in fourth year that I can remember nothing about, and probably never will.
Of course, at the time, all of that material was very important, but some of it is not so important anymore. This is not uncommon, and I’m sure everyone has had the same experience no matter what subject you studied in college. You feel the things you were studying were a waste of your precious time to study and learn the real things.
Some of the most important pieces of knowledge I’ve learned have come from my internship at AOL. It’s probably not surprising, seeing as the general belief is that people learn more on the job than reading books. I’ll quote some dude called Benjamin Franklin by saying
Tell me and I forget. Teach me and I remember. Involve me and I learn.
Before you get the wrong impression: I feel that college taught me a lot of awesome things. I loved it. However, they don’t and can’t teach you everything (mainly because of the vast amount of Computer Science topics in existence). It should also be known that if you’re a Software Engineering student, you are expected to learn a lot things in your spare time (don’t be lazy).
If you go to college and don’t work on side-projects, new technologies or anything interesting…….
Here’s a list of some of the things that are not taught to Software Engineers (to the best of my knowledge):
How to Document Software
This is something a lot of students struggle with (including me). Creating informative, clear and well structured documents can be tough, especially if you don’t realise the standard that is required to do well. While I have improved my documenting ability in the past year (mainly from reading other people’s documents and material online), there is still a huge area for improvement.
How to Write Clean Code
Clean code is code that is easy to understand and easy to change.
This is a great explanation, but WTF does it mean? How do I do this? Does this mean I have to put a lot of comments in my code? Before my internship, I had no idea what it was nor how to craft it. Luckily AOL was big on sharing the knowledge and teaching the basics in how to write clean code. Anyone interested in reading more on this topic should check out Clean Code: A Handbook of Agile Software Craftsmanship by Uncle Bob.
How to Test and Debug Your Code
Granted, you probably learned about testing, but have you learned how to implement Unit Tests in your chosen language? What makes a good test? What shouldn’t you test? How do you test things that require database interaction? Unfortunately, these are things you’ll need to learn yourself.
There’s more to debugging code than inserting a ton of print statements where you think the error might be. Learning how to use your IDE’s debugger can save you a massive amount of time. To save you even more time (in the long run) you should learn how to write Unit Tests. I’ve used Unit Tests on all of my major projects this past year and I can guarantee I’ve saved approximately 30 hours of development time per project. That’s over a full day of coding/debugging saved.
Probably the most important thing I’ve ever learned. I’ve purposely named this section Git because it’s the most popular Version Control System in use today. The ability to track every single little change in your code and to revert back to old versions is pretty awesome. I often saw my classmates edit their code and when things went wrong they would have 2 hours of work wasted, along with an awfully painful time of reverting to an old version they had saved on Dropbox. Any organisation worth working for/with uses some kind of Version Control. Don’t know git? Then check out this awesome interactive website.
Git – It could save your life (not really, but it sounds so dramatic).
How to Start a Startup
My lecturer continuously encouraged my class to get involved with startups, startup weekends, generating ideas and reading startup books such as:
However, I can imagine that not all courses encourage the startup mindset. I think this would be pretty damn awesome on any curriculum. Learning how to start a business, learning how business works with your (potentially) awesome software/service/app can be really beneficial to any Software Engineer. I recently stumbled across this FREE online course called – HOW TO START A STARTUP – which starts tomorrow (Sept 23, 2014) and is kicked off by Sam Altman (President of Y Combinator). I’ll be honest, I’ve no idea if it will be good or bad, but I’m really excited about it and I’m certainly going to follow along over the next few months. There are several big name speakers scheduled, such as:
- Peter Thiel – Founder, Paypal & Palantir, and Partner, Founders Fund
- Sam Altman – President, Y Combinator
- Paul Graham – Founder, Y Combinator
- Patrick and John Collison – Founders, Stripe (Irish guys)
- Marissa Mayer – CEO, Yahoo
- And many more….
That concludes my list of things they don’t teach Software Engineering students. Your experience might be different, you might have learned all of the above, you might think more important topics should be included in the list above. If so, let me know in the comments.