Teaching the next generation

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.

This is a blessing and a curse though. This makes it really easy for us to discuss and implement very complex things. Systems that without all of this base knowledge would be near impossible. On the other hand we are horribly unqualified to teach the up and coming generation of coders. We assume a vast fountain of knowledge with simple statements, we tend to be detail orientated so we try to explain everything to the depth of our knowledge because all of that knowledge is useful to us. We forget that at one point in time we had no clue that our Python or JavaScript weren’t being natively executed but first interpreted by an intermediary. Nor did we know why that would be a good thing.

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.