Over the last two weeks I have both observed and taken part in the learning process of a new software developer. This post will be mostly regarding the things I noticed and saw while hanging out with my friend who is learning.
We developers who have been doing it for a while have abstracted away and taken for granted the various concepts that we had to learn, understand, and use on a daily basis. Some of these concepts are relatively easy to explain: a string vs a number, you have to declare/define something before you can use it. Others are more difficult: scope, functions, callbacks, recursion. And it also depends on the student what concepts will be harder than others. Functions and abstracting to variables is easy for someone with a heavy math background. This has made me realize just how much knowledge I not only have gathered over the years, but don’t even have to think about or consider as I use it.
I rant and rave commonly that the education system failed me when it came to trying to learn more about software development. Over time I am finding that even worse than that structure being a failure, is none of us have answers that will fix it. There are lots of efforts in this vein, and they work in certain situations, but they are not generally applicable to the masses. While we are very concerned with making better software all the time, I think we, as a field need to start looking inward and toward the future.
One step in that direction are things like CodeAcademy which are exploring how we can use modern technologies to get a new programmers up and running in seconds. What I think may be needed as well is a better QA model to determine what we are doing right and wrong, as well as people with a background in education.
I hope things get better in time.