What I would like to address today is the disconnect between the academia world and the professional world. We know a disconnect exists, we can hear countless employers complaining how graduates lack basic skills, how their attitude sucks etc.
What we don’t hear is how we are supposed to solve this problem. You know what they say, first admit there is a problem, then try to address it, right? This is exactly the purpose of this article.
Employers have an expectation that someone who graduated or is close to graduation needs to have a certain set of skills for them to become useful. They must know how to code, know multiple technologies, have the right attitude, be willing to do whatever. Is that a fair expectation? Maybe, maybe not.
What are students taught in universities? Granted, it’s been more than 20 years since I’ve been in one, but I remember being bored out of my mind. This is because I was being taught things I was not interested in. Later on, I took some courses with Open University, because for some reason I wanted a degree in UK. It was just as boring as I remembered it, actually even more boring. I wanted to learn stuff related to programming and I just gave up when I saw that one of my courses that I had to take was about design and I had to design a chair. That was something I was not interested in and I didn’t want to waste my time working on something that didn’t have any value for me.
This is one of the first topics, are we teaching the students what they need to know? I won’t pretend to be able to answer this question, perhaps others who studied recently can answer that a lot better than I can.
Employers expect someone to have a basic level of literacy, be able to read, write, know some maths and have a good worth ethic, meaning coming to work on time etc. They want to see an interest in programming and what they’ve been doing and working on to prove this interest actually exists. Just a look at grades on various subjects is not going to tell them much.
Someone who comes with great grades should be able to prove their value quickly otherwise what is the point, correct?
For a software developer to be successful there are a number of things they need to know. Imagine a web developer: they need to know some back-end language. Many universities happily teach Java and they have been doing it for a long time. If the job is that of a web developer, knowing Java is not going to help you that much.
You need to know front end stuff, you need JavaScript, you need HTML, CSS.
Then, how about Ajax and then what about relational or no-sql databases?
How about another scripting language?
How about the latest and greatest Open Source stack?
Hang on a minute, but what about mobile, responsive websites, how about hybrid and native?
I can keep going like this for a while, trust me, the list of skills can be endless. So, is that a fair expectation for a graduate to know all that? No, of course not, even if they dedicate their entire university career to these skills, it will still not help much, because, of course, by the time they finish their studies, the development stack has changed. Right? Well, that is true up to a point. There are a number of things and technologies that have been around for a while and they are still in use and in demand.
I will make a few statements here, which are my opinion and need to be taken perhaps lightly. I think that yes, software students need to learn more than what they are being taught right now, assuming they are not already! They need to have an understanding of a back-end language, such as Java or Dot Net. I would argue in favor of Dot Net and I will get back to this later.
Then they need at least a basic understanding of JavaScript and perhaps an understanding of one MVVM framework. Which one is a bit unimportant. The point is that once you understand the concept, it becomes a lot easier to learn whatever the flavor of the month is and this is exactly the point. MVVM is everywhere these days and the concept takes a total shift from traditional methods. i know first hand how difficult it can be, I remember what it took for me to wrap my head around how it works.
Next, an understanding of relational databases is extremely important, they’re not going away any time soon.
Once they know these things here comes the most important thing and this is exactly what I believe is missing : an understanding of how these things work together. You do not learn one thing in a big vacuum. Everything one learns needs to help create a bigger picture. Developing a professional application these days is not done with the use of any one technology. There are multiple technologies and they all need to play together nicely.
For example, you learn about relational databases and you learn about dot net. How do they work together is extremely important, how do I build an application which uses both, how do I build a data layer in that language and how do I make it work nicely with a relational database?
Yes, we hear every day how universities should teach concepts, not specific frameworks. Well that is not only incomplete ( you can’t teach a concept without writing some code in some language ) but also totally not useful. You go to work and they won’t ask you to show on a black board how a specific algorithm works, you’re going to be asked to build something. That particular something might use the algorithms you learnt, but that algorithm is only a small part of something much bigger.
Big disclaimer, this article has been in my drafts folder for two years. Yup, completely forgot about it, just uncovered it today, so hmm maybe the time has come to finish it.
Have any of my views changed? Maybe yes, maybe not, I am not 100% sure their is a need for a back end language anymore, but I would argue that learning one may not be a bad idea anyway.
Back to the drawing board, what do we need the software students to have?
I would say that having some Maths background is a huge help. I cannot stress enough how important this is. I am not talking here about learning algorithms by heart. If you do a lot of Maths, what you end up with is a very useful way of thinking, you develop abstract skills you can apply in many fields, software development included.
It is very important to be able to visualise a problem and build a mental approach on how you would solve it. This is all software development is, solving one issue after another, after all.
So what I would say to a student is to write code, as much as you can, build something that helps you and keep building things. Keep learning, read books, follow developers, see what they do, what they build and what interests them. Start looking for jobs before you finish your degree and have something to show already. All these things will help.
Also, realise you are just starting on a very long journey, pace yourself and be prepared to keep learning for as long as you are a developer. Trust me, this will never change.
Thank you and good luck!