Learning at home with my daughters

Some time ago, I found I did not like the way the way programming was taught.

And then I started to do something about it.

Eventually, the best way of learning something is to do it. I wanted to learn Perl6. Also, I found that some emerging languages, just like this one, were usually marketed to people who already knew one or several languages, preaching to the bleachers, so to say. This made the whole programming thing a zero-sum game: you win something, you lose something, and you do not attract new people to the community. But also made incredibly complicated to learn it, because when you teach something to people who already know a whole lot, there’s always a whole bunch out there that know much more than you, making you lose hope. And new recruits for the language.

I also had a few ideas on how to reboot the way programming was taught. But ideas are ideas and belong to the wind. You have to actually put them in practice. Where can we do it better than at home? Well, maybe somewhere else, but with the enticement of travel to exotic places to present the experience once it was completed, my three daughters signed in.

Today we have had the 11th session, most of them during the Christmas holiday. I am creating the course material on the fly as well as course notes.

I am using org-mode to write it, and rendering it, from time to time, to HTML. You can visit it at https://jj.github.io/perl6/perl6.html

Funny thing is, we are learning a lot. Spurred by their questions, I am getting into Perl 6, and they are developing some programming instincts that usually belong to some more senior people. And they are 17 (one of them) and 18 (the other two, who are actually studying computer science and something that is almost, but not quite, programming, in college).

We’ll talk about the whole thing later on, but here are a few things we have learned so far

  • This was probably obvious to everyone, but I really had to test it. You can learn programming without starting with a “Hello world” program. In fact, without actual programs. We have started with expressions, and data.
  • Programming is a holistic experience, and you have to learn lots of things before, or at the same time, than any programming language. The course material includes supplements with the command line, using git, and how to enter Unicode. Because Unicode is important. Actually, we devoted a whole session, and parts of other, to configure the Compose key and to use emacs to enter Unicode glyphs.
  • It is easier to learn than to unlearn. In other words, it is easier to learn good practices from the start than to learn bad practices. In other words, programming as taught in many places really sucks. And you have to forget what you have “learned” to really learn.
  • You can learn a lot of programming without touching a program. You first have to wish to program. And there are lots of things that are afterthoughts when programming, and should be at the center. One of my students remembered Karate Kid:
Wax on, wax off. Wax on, wax off
  • Programming is, and has to be, fun. Learning programming has to be fun too. Why else should you waste one perfectly serviceable hour from your holidays to do it?

I do not know if I will manage, by end of the experience, if there is such a thing, to create our little homey programming workshop. Not that I want to, either. I think we have all learned from the experience, and they have been empowered to create and use programs, or maybe just programming techniques, in their life.

Because programming is, first and foremost, a life hack.

Then, and only then, a degree and maybe a job. But that is not the most important thing.