EDX, Coursera, and a slew of other websites have enabled people with interest in Computer Science and Programming to get a good start in computing technologies. Recently, I took a few programming courses through EDX (and I’ve recently started one in Coursera). In addition, I’ve been tutoring my wife through a course in basic computing on one of these sites as well.
In many aspects, the programming aspects of the courses for me were quite simple, and the problems in the courses weren’t too difficult compared to my current activities at work. I don’t think that too much of what was being taught was probably that much different from what I learned just over a decade ago in my computer science courses. What had changed dramatically was my ability to not only comprehend the new ideas in the course, but because I’m not longer going for a degree (I’m only barely interested in the associated certificates for the courses) the nature of what I’m trying to get out of the course is altered dramatically.
Let’s take for instance an eye opening moment for me: my introduction to the Liskov Substitution Principle and SOLID. SOLID is an idea that came up post-graduation for me, but the Liskov Substitution Principle did not. I do not remember this being taught in my courses, but there is absolutely no reason to believe that it wasn’t – I was barely attentive on the best of days, and unfortunately my GPA paid the price for that. Still, reading about and learning these principles, and immediately putting them into practice, changed the quality of my code and my ability to tutor others substantially. To a much larger degree, it opened up my willingness to accept that I need to read more about programming; and by some extension I don’t know much about high quality programming. Really, though, Composition over Inheritance and the complete separation of intention and implementation (the function end game) is where I found it was at. Now I don’t have to write tons of comments in my code to describe what it’s doing – although I do need to document my class and method descriptions still (obviously).
I remember reading a blog post by a well known programmer saying that if he were to ask a programmer who wrote the worst code they’d ever seen, the answer should always be “I did”. The more that I take these courses, and read high quality code, the more I feel this way, and the better I become by extension. Often, we tell people that the best way to learn to code well is to look at code in the wild, but I think that this can backfire. There is a lot of crappy code in the wild, including my own, that nobody trying to learn high quality software development should try to emulate.
I guess I have to make a point at some time, so I guess it really boils down to the fact that to develop better software development patterns you have to make sure that the authority that you learn from is better than you, and that they honestly are in a position to help you grow. I think that the best place to get access to that kind of information is by taking advantage of this free continuing education bonanza that we find available to gorge on. I understand what it means to have limited time (especially if you work in a company that demands overtime – DON’T DO IT), kids, and interests outside of programming, which you should; but one class a week, even if you can’t finish the homework, might blow your mind, no matter how simple the concept.