Tag Archives: Education

New Ways of Thinking

Our Version 1 was a success!

Or at least, it was for me. (I can’t speak for the inside of Charlie’s brain.) I set out to learn one new way of thinking, and I think I gained about three. The first was a new way of thinking about what it means to be a programmer. The second was a new perspective on programming languages and my relationship to them. And the third was meta: a new way of thinking about teaching new ways of thinking.

What it Means to be a Programmer

I started out being worried that I wasn’t a “real” programmer, or even if I was, that I wasn’t any “good.” I had a major breakthrough when I made the connection that programming isn’t so much a skill as it is a creative process.

Art is a creative process, and it wouldn’t make any sense to me if someone said they were a “bad artist.” There’s no such thing! If you’re doing art, you’re an artist. If someone doesn’t like your style, find someone else who does.

If I’m programming, I’m a programmer. And I have my own style. This whole time, I’ve been thinking there’s only one kind of programmer: the kind of programmer who loves the puzzle and the challenge and gets a kick out of the struggle. I’ve been trying to be like that, and I’ve been miserable because I’m not. I hate the struggle. I want to go from idea to implementation to next idea as quickly as possible. Charlie helped me see that my style of thinking isn’t incompatible with programming, it’s just incompatible with the programming languages I’ve been trying to use: C and C++.

A New Perspective on Programming Languages

Prior to this weekend, I thought of a programming language as a tool: something inflexible and impersonal that I could gain proficiency at through arduous practice, and that, with enough skill, I could bend to my will. Sometime between Sunday and Monday, my perspective took a crazy sharp turn: programming languages are friends. Learning a new programming language is like building a relationship with a new friend. When you start a new friendship, you have no idea what the future of the relationship will hold, and if you try to force the relationship into a mold of your design, it probably won’t work that well and you definitely won’t get as much out of it. A friendship should unfold, gradually revealing the unique qualities of your new friend, teaching you about yourself, and making you a better person in the process. And that’s what learning a new programming language should be like. In fact, that’s what learning anything should be like.

A New Way of Thinking About Teaching New Ways of Thinking

In the beginning of our project, Charlie tried to teach me. He made a hypothesis that I would enjoy higher-level programming languages, so he tried teaching me Lua.

It didn’t work very well. Not because Charlie is a poor teacher (he’s actually a pretty good one), but because this was an entirely new way of thinking for me. The challenge was not in learning Lua syntax; it was in re-wiring my C-minded brain, and that, as we discovered, can’t be taught.

Fortunately, there was a crucial moment of frustration when we realized we were doing it wrong and changed our tactic. Instead of Charlie guiding me by giving me examples and exercises, I started just exploring. Charlie still gave me examples and suggestions for things to try, but the major difference was: I was asking for them. I thought about what I wanted to know, what sounded interesting, and what sounded fun, and I just asked him all the questions I wanted to ask. I asked for comparisons to things I already knew, definitions and examples of entirely new concepts, and good resources I could use to study on my own. It was amazing! Instead of feeling generally reluctant, frustrated, and confused, I felt excited, joyful, and insatiable! After we were done for the day, I couldn’t get myself to go to sleep at a decent hour, because I was so excited about all the reading I was doing. By the end of the next day, I had a solid understanding of the basics of Lua, Common Lisp, and Racket, I had written several small programs in Racket including a webpage, and I could write a macro in Lisp. Now that is what learning should be like.

Conclusions:

  1. If I’m programming, I’m a programmer.
  2. Programming languages are friends.
  3. Teaching a new way of thinking is not possible. Learning a new way of thinking is.

Version 1 was mind-blowing, and I can’t wait to find out what Version 2 will be like.

– Kia