I wanted to bring my perspective to the debate about what developers should learn in school. Many seasoned developers complain that straight-out-of-school developers don’t have the knowledge they need.
My view
I though I would chime in on what I felt was missing from my education in computer engineering. Coming straight from school and having worked for about 10 months as a full time developer, I have a couple opinions on this subject.
These opinions are based upon what my education was like, and what I have heard from other students about their education. That said, I am certain that there are also lots of great schools that are teaching student what they need to know.
Personally, believe there is a massive deficit in the current software education system. The academia and the real world industry is not in sync. I don’t know why this is, but I suspect it comes down to many factors. A couple of which I think might be:
- Teachers that haven’t worked in the industry for some time (or not at all), and don’t stay up to date.
- Academia has it’s own thoughts and opinions on subjects which are not applicable in the industry.
- Schools not focusing on the industry, and what it actually need from potential workers.
What we don’t learn - but should have.
We learn lots of great stuff, but there are many skills that don’t get taught in school. I will focus on these.
Debugging. Real debugging.
This makes me so angry! Why were we never told that debugging is more than putting print statements all over your code? How to use a proper debugger to make your way through logic is so important that I can’t even fathom why this isn’t taught first year? It makes understanding code easier and it is a skill that is needed (and expected).
Learning a new code base.
We were almost exclusively building small applications from scratch. This is almost never what you end up doing in real life (at least not in the beginning). You get into an existing project and need to familiarize yourself with a huge code base. Very little taught in school prepares for that.
Bug fixing.
Fixing existing bugs in some code base your haven’t written yourself is not something though today. Let people go into Open Source software and fix some bugs in existing project. Its what you will do your first years anyway!
Up to date technologies
Learning only about C++ or Java only gets you so far. Learning web development in school is mostly some HTML (not the newest standard of course) and possibly some CSS. If more advanced topics are taught, its mostly a little PHP and plain JavaScript. A decent start, but since the field of web development moves so quickly, teachers need to stay up-to-date. It would be nice to learn some modern frameworks for both front-end and back-end.
Web development is only one example, but this comes back to staying in sync with the industry. What kind of developers are actually needed right now? Schools should know this and correct their curriculum accordingly.
Learn to learn
Being taught is one thing, but nobody is going to teach you everything once you are on your own. You need to be able to pick up new technologies, and do it with quickly!
Learning to learn could be an entire course, with assignments to learn new technologies. I would have loved such a course!
Get people excited about the field
Bring in some teachers that are really exited about the software development field. They need to be in love with coding! If they were, they would certainly pass it on to the students.
Some students get there on their own (or are there before starting college/university), but many people need to learn why this field is so great!
What to do?
Students who are starting to work will soon pick up these skills, but it’s should really be something they are properly taught during their education.
I have a couple of solutions I think will go a long way.
For schools
Schools need to really pull themselves together for the sake of their students!
- Talk to the industry. Ask them what they expect and want from newly educated developers.
- Get good teachers with real-world experience and a passion for both teaching and software development (I realize this might be very hard to actually find - but it would awesome).
- Focus on giving students fundamental skills in software development, but also teach them how to learn properly on their own.
For students
As a student, you should not trust that your education is perfect. Therefore, you should also take action to become more valuable as a future employee.
- Follow the industry and learn skills that are applicable to where you will be looking for work (example: my area needs lots of Java and web developers (plus some .NET)
- Always learn new things on your own. Code a lot. Don’t just do the exercises necessary for passing class.
- Find an open source project and fix some bugs.
Follow me on Twitter: @gjermundbjaanes