Learn to love programming - can we teach programming differently?
I was listening to an episode of the People I Mostly Admire podcast today. The guest was Steven Strogatz, who is a professor of mathematics at Cornell University. Steven Strogatz is not your typical mathematician. He studies real world problems and has a gift for making math fun and accessible.
I found a lot of paralells between what Steven said about his maths education, and how programming is taught. Steven says the following about his Maths education:
When I was in high school — there’s a fairly standard curriculum that at least my generation went through of some algebra, geometry, then more algebra, then pre-calculus; depending on when you stopped. And then at the top of the high school hill was calculus.
That’s what math looked like to me as a teenager at that early stage. But then when I went to college, I started to hear about subjects that I really didn’t know a thing about: Linear algebra. What was that?
So I got dunked in the cold water first semester of freshman year with a teacher who really shouldn’t have been teaching freshmen. You know, this was really not someone comfortable being around people. No question he was an exceptionally great research mathematician, but had no social skills; didn’t give us any idea what linear algebra was about.
He just went straight into the subject with definitions, theorems, proofs, more definitions. And oh man, it was dreadful.
Unfortunately, programming can be taught in a similar way. You could be led to believe that programming is not something that you use to solve real-world problems, or can be fun.
If any subject is too abstract and dry, people can’t relate to it. Then, they don’t learn that well. They get stuck more often. This can make someone doubt themselves and grow to hate the subject.
I remember not understanding the bubble sort algorithm in my first programming class. I asked the teacher to describe the movement of the elements of an array, how does an element actually bubble up?
He gave me an answer that I did not understand. Something along the lines that their values are compared, and it moves up or down. I still didn’t get it!
What was missing for me was a visualization of the process. I wrote some code to do a bubble sort of an array and show the interim results. When I saw the elements shift one step at a time, then I understood it completely.
The worst thing you can do as a teacher is assume that someone else knows something or will see something like you do. Especially if it is a slightly abstract concept. You need to help people relate to something. Give them different entry points to find their way in.
Returning to the podcast, when the host asked Steven how he would teach Maths from the ground up if he was designing a curriculum, he gave the following 3 pathways:
- Follow the current practice where people are trained to be future professionals in STEM (Science Technology Engineering Maths),
- Learn more of what people actually use in their everyday lives or in their jobs - kind of a data science approach with tools,
- Teach a course like a music appreciation that teaches you to appreciate the subject.
He said this of the third pathway, the idea of a Math appreciation class:
Music appreciation, art appreciation, psych appreciation. Everybody knows, hey, I go to this museum. I can understand a little bit of what I’m seeing when I see a painting by Fragonard. You don’t need to know who Fragonard is. But I like it that I once took a course in baroque and rococo painting, so I get a little shiver when I see a Fragonard like, hey, I appreciate what that dude was trying to do. It just makes my life a little richer. Okay?
I want that course for math. I want a Math 101 course in high school for a person who certainly doesn’t care about the calculus that Catherine Johnson needed to put the astronauts on the moon. This is just someone who I would like to understand, by the time they’re done with high school, that math is a beautiful thing the way that music and art are. That math has changed the world.
I would want them to hear stories about the different cultures in India and China and the Mayan civilization, as well as Europe. So there would be math history; there would be the math in nature. I want them to be able to see the Fibonacci numbers on pine cones, and I get a little thrill from understanding that nature uses math. And understand what Catherine Johnson did in the same shallow way that I can understand what Mozart did. I can’t play music like Mozart. I can’t compose, but I know enough about music that I get a thrill from seeing Amadeus.
Like, people don’t have any idea what math is because we’re not teaching Math 101. So I want that. And then some of my students are going to be so fired up they’re going to want to take these other courses. Just like there are some musicians who are going to want to really learn to play the cello, not just listen to Yo-Yo Ma. Right now we’re offering a course that is pre-professional math training. And that’s so stupid. That’s so narrow. That’s really our biggest mistake.
So in writing the book, The Joy of X, I was asked by the op-ed page editor of the New York Times: “Can’t you write for my readers, the people who read the opinion page — just an educated, smart person who doesn’t know anything about math — what’s it all about? What are you guys talking about when you say math is elegant?” And I wish in school we did the same thing.
If you ask people why they want to program, often they tell you a sentimental story from childhood, or how another interest led them to programming. Maybe people got hooked into programming by exploring a Geocities website, finding out how to customize a Myspace page with CSS, making a modification for their favourite game, or wanted to make a Discord chatbot to prank friends. These types of interests probably get more people into programming than education.
Why is that?
Because it relates to them and something they care about. It is tangible and joyful.
It applies to all activities - if you appreciate something and get joy from something, you will come back to it again and again. You will persevere when it gets difficult because you know it is worthwhile. The payoff will come soon.
You may discover that programming is not for you, and that is fine. Don’t be afraid to come to that conclusion too. However, that should not be because you think it is hard or too boring or that you are too stupid. This is because you are not in the right situation. Almost anyone can learn to write code and do it for a living if they wish.
I like the quote that is attributed to W.B. Yeats:
Education is not the filling of a pail, but the lighting of a fire
We should be sparking more fires. ❤️🔥