Sunday, September 6, 2015

The two things they did not teach me with programming at university

I've spent a fair amount of thinking about how I was taught programming. Actually, most of it I was not taught. I enrolled on a course, was given a challenge and then I learned a way to get the stuff done that needed to be done. There was very little teaching.

There was a podcast I listened some time ago on Planet Money, looking into why number of women might have been declining in programming. It made me remember the good moments I had with programming at a young age. I copied Basic programs from magazines (anyone else remember the line by line printed code lines you could rewrite?) and got annoyed with the bug there was in one I was copying, a bug that prevented me from getting the program running without fixing it. I learned English playing Sierra's games. And I write my first own program in high school in Turbo Pascal with simplistic graphics in the splash screen and a little test from some girly magazine. I also remembered that a lot of my early exposure to computers was shadowed with  the memory of limited access: the computer of the family was my brothers and I was the one who had to wait for it.

My brother has similar enthusiasm and a lot more computer time, so he ended up with all the cool demo graphics stuff. The Planet Money episode reminded me that often by the time we start in universities (College-level), my brother had way more experience than I did. And so did most of the people I studied with.

At Helsinki University of Technology, they left us learning quite a number of languages, focusing on the concepts behind any of them. I remember spending time on Scheme, C and C++, Java, Fortran, Python and probably others I have actively forgotten. I remember the courses teaching about the problems we can solve with programming, but they never really taught how to program. The group work was side-by-side work, often so that someone did more than anyone else.

Looking back now, I find there were two things I've learned since that I wish I would have learned sooner:

  • The social aspects of programming, and the joy of discovery
    I can only wish mob programming would have been more of a method of teaching. Not watching demos, but  getting a chance to work on your turn in a team, learning. Not being hidden in a corner solving problems on your own, but emphasizing the social side of the work we do. Co-creating something is very cool. I can occasionally understand people we teach on #LearnWithLlew -stuff (beginners/teachers/kids in elementary schools) saying "I could actually like coding". 
  • The language and it's IDE (tools) belong together
    We should not teach the language without the professional toolset for it. I can immediately see the experience of Java I had in school without a proper IDE make the whole sport different when writing Java in Eclipse. Painful does not add to my learning. Rewarding does. I suspect that a lot of courses still deny the access to IDE's doing a lot of the stuff for you, thinking it helps you understand the code better. I find that it probably is one of the reasons for bad experiences, that lead people (like me) to dislike coding. 
Perhaps I should, just for the fun of it, give the teaching at university another chance. Now I'd be as much "hobbyist" as my brother was back then. And the schools could have learned a thing or two about teaching from the professional programming circles.