Important Skills Colleges Never Teach Programmers

Hi! Thanks for stopping by. After a previous post received 106 comments and generated thousands of views and reactions, it made sense to write about the other side of the coin: skills colleges never teach programmers. Let us take a look at a few, shall we?

skills college never teach you 300x194 Important Skills Colleges Never Teach Programmers

There is no doubt college has become the industry requirement for getting a job – however, does it really teach you everything you need for the real world? It seems the obvious answer is an astounding NO! 

That being said however, college does give you the foundation for computer science knowledge (in any of the majors related to computers) – but they don’t usually encourage people to build upon those skills. There are a number of professors that are bias towards a single platform (or technology) such as just Windows, Linux or Mac – this in turn decreases the quality of software that people are developing (outside of missing skills for other platforms/technologies).

Now, obviously, one cannot learn every technology, at the very least in 4 years but programmers should at least be aware of some tools, caveats and dangers.  I will mention just a small list of what I think many programmers come out of college without.

  •  Technologies can be fads and learning Framework X could be superseded by Framework Y in a short time. Sometimes those technologies are similar enough that you don’t need to learn anything new. An example: XNAThe first version of XNA was created in December 2007, the last version was released in October 6, 2011. This framework was only around for four years and yet produced many great games and is still a good framework. However, another group of people took the layout of the API and created MonoGame. The big difference between MonoGame and XNA is that the former leverages OpenGL and can be deployed to a variety of platforms such as iOS, Android, PlayStation Mobile, Windows, Linux with the same code. This comic shows how out of control this issue can be. Another example of this are source control systems. Subversion, or SVNwas first released in October 20th 2000. Git was released in April 7th 2005 – only five years after SVN. Now, SVN is still supported and used today, but systems like Git and Mercurial are starting to take the market share. Free services like github and bitbucket allow a developer to easily setup git hosting so a lot of people are ditching SVN (including myself) for git. The skill here is: move with the industry – it is bad to stick with the same thing because you don’t want to learn something new. Arguably not every new technology will be useful but it does have the possibility to really help you in your projects.
  • Another important skill colleges don’t teach is the skill to FAIL. There is a great quote by Albert Einstein ” Anyone who never made a mistake has never tried anything new”. In the classroom you have a safety net from the professor – if you are stuck you can ask them and generally they should be able to help. However, sometimes great ideas require failure before they mature into something useful. A classic example is during the 1980’s Tim Berners-Lee went through several ideas of what would eventually be the internet today. My point is that sometimes you work on a project only to scrap it but the lessons you learned from that project can be used for the next one as a sort of guide of what works/what doesn’t work.
  • In today’s age of cheap hardware and unimaginable amounts of RAM in a system, programmers don’t have to be concerned about fitting their code into a 16K limit. They can instead develop software that utilize gigabytes of RAM and usually there is plenty left for other processes. Especially with the advent of Swap memory - on OS can write out memory for applications from RAM to the hard disk and then back to the RAM again when it needs to execute instructions – this is obviously slow on a spinning disk but may not take too much of a performance hit on a SSD. This brings me to this point: many aspiring programmers are not concerned with efficiency of their applications. This skill is especially important because while a developer now a days has tons of resources to work with – slips in efficiency does add up. In my time, I have seen developers make copies of large arrays when it wasn’t necessary, pulling entire databases. I have even worked on applications that required 16GB+ of RAM and quad cores and still took several (6+) hours to perform its function. In today’s day and age, one should be very concerned about how well their applications perform. I will list out some tools that I have used/know about: 
    1. C/C++ – Valgrind (Linux) and Very Sleepy (Windows)
    2. C#/VB.Net – CLR Profiler and dotTRACE
    3. General – Memory usage and timing, time-windows (Windows) and /usr/bin/time (Linux)
    4. Web Development – Firebug and Chrome (which has a fire-bug like console built in).
  • The fourth skill is Open Source. Open source licences are a topic that I don’t think is ever mentioned in college and it’s arguably one of the most important things you should know about as a programmer. Many open source licenses are very loose in what they require – however, the GPL is probably one of the most restrictive out there. You could be an indie developer who may make a game or some software and want to release it on the various markets and platforms but you may not want to release the source code. If you used ANY GPL code in your software – your entire project must be licensed under the GPL (except under certain cases such as dynamic linking). This is very important because if you do release software with GPL you MUST release the source code (or provide instructions on how to get the source code). Of course if you don’t distribute the software then you do not have to give out the source. However, this is still an important topic that programmers need to be aware of when choosing to use other people’s libraries in their own projects. With that though, a programmer can ask another programmer for special permission to use it in such a way that violates the licence. An original author does not waive their rights over software by releasing it under a licence – the licence just says “here are the terms which you can use my software without asking” but since they own the rights to that software, they can give exceptions to anyone who wants it. Giving special exceptions does introduce its own problems as now there is code base floating around under a different licence – which may or may not be  a bad thing. If your project is inactive – it really doesn’t have any effect but if your project is active and you are releasing new versions, it could cause confusions and even friction in the open source world! Here are some resources on licenses – http://www.tldrlegal.com, https://news.ycombinator.com/item?id=1011426

Those are just a few of the important skills college will not teach you. There are many others like how to deal with people and communication.

Thank you for reading to this point. If you liked this post, please share it with your friends online using the buttons below. If you have questions or comments, please do not hesitate to ask. 

If you are on Twitter or Facebook, please consider following me or liking my page and I will do the same.

Thanks again and see you soon! 

 

 

6 thoughts on “Important Skills Colleges Never Teach Programmers

  1. Nice article, Nathan! I especially agree with #2 – the skill to fail. It’s a tough one, but if you’re like me, you never learn better than when you’ve failed at something. You overcome it, take what you learned & apply the lesson to the next project – which, more often than not, turns out substantially better.

    This article also complements a blog that a co-worker of mine wrote recently about the things he felt he didn’t learn in college to adequately prepare him for IT. Check it out & weigh your thoughts: http://keyholesoftware.com/2013/04/15/what-they-didnt-teach-me-in-college/

  2. This was not written as the other side of the coin. Your first article is about what a developer misses out on by not going to college. The opposite of that would be what a developer misses out on by going to college instead. What you made instead is a list of things not taught in college. Not exactly the same thing and doesn’t change the fact that people see you as looking down on self taught developers, as though they couldn’t possibly have taught themselves the same things a professer taught you. You know, during your 4 year excursion to school we just hung around our parents’ home playing games all day instead of studying to become the best developer we could be.

    • Your points are welcome here. I was not trying to bash self-taught programmers. You should have noticed also the fact that I didn’t write the second article….? Thanks for stopping by!

      • Why does this site have an about me section that does not list the name of who it’s talking about if the site takes submissions from multiple authors? It’s highly confusing and unorganized. I don’t even know who owns the site; I assumed it was you but who knows.

          • Then my point still stands. It’s your site and you should have noticed that the article didn’t tackle what it aimed to tackle (that being the opposite of your article.) Stating that you weren’t the author doesn’t negate the fact that it’s your site and you approved it (and potentially even asked your friend to write it to begin with.) I’m not trying to be a jerk, it just comes off as bad writing. You can take or leave my critique, but I still think if you re-wrote the self taught dev article to encompass all developers it wouldn’t push anyone away and could spur meaningful dialogue on how to further research the listed topics. I for one could recommend a good book on every topic you listed as that’s how I taught myself.

            If you’re trying to build a community, as is usually the goal of a blog, then stigmatizing a large portion of your potential readers is not the way to go about it.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">