DEV Community

Cover image for The Joy of Programming to Learn
Eric Normand
Eric Normand

Posted on • Originally published at purelyfunctional.tv

The Joy of Programming to Learn

What is your main motivation for programming?

Back in the 90s I was reading something online (I don't remember where) that was saying the consensus was that it's the joy of absolute control of the machine. Being an impressionable youth, I felt alienated. This was certainly not my main motivation.

Now, don't get me wrong, I can enjoy control over an inanimate object like anybody. Programming in C gives me that feeling. But there is something else that drives me to program. It wasn't until about nine years ago that I started finding others I could resonate with and further understand my own joy in programming.

I love ideas. I love the history of ideas. I love how ideas are shaped by your environment. I love how fun it is to explore bad ideas. I love how ideas can be communicated to another person through time and space. And I love that some ideas have power.

It's one of the things I do in my newsletter and on my blog -- I develop ideas. I've developed a lot of wrong ideas and a few right ones. But it's through the process of developing them that their contours and characteristics are known. Far from being an expression of my beliefs, the essays are an expression of that process and the love of ideas in themselves.

Programming, to me, is a way to develop ideas. You set up a system with code and you can then empirically determine its properties. The thrill of programming, for me, is found more in the exploration of ideas than in the joy of controlling machines. I have written neural networks to learn about neuroscience, genetic algorithms to learn about evolution, and other simulations to learn about the thing I'm simulating.

About ten years ago I discovered Alan Kay, specifically The Computer Revolution Hasn't Happened Yet and his work at VPRI. I found someone who had explored programming as a medium of ideas. He was interested in understanding how computers could be made easier so that anybody, including children, could develop, explore, and communicate ideas -- perhaps ideas that would simply be impossible to explore otherwise.

I read Seymour Pappert and his ideas of the computer as a tool to explore difficult ideas. Really, go read Mindstorms. Nicholas Negroponte paraphrased Pappert's vision best: "Programming is like thinking about thinking. And debugging is a close approximation of learning about learning." When you program, you translate your thoughts into executable form. Debugging your program is close to debugging your thoughts.

The person carrying this torch now is Bret Victor. He's obviously going deep on these ideas and seems to be dedicating his life to them. What's more amazing than that is his ability to communicate the ideas. Put Media for Thinking the Unthinkable on your must-watch list. If you don't feel a little sad for what might have been, then watch The Future of Programming. He takes Alan Kay's ideas and makes them super-accessible.

I don't doubt that there are more people like them. They are using the computer as a medium in the Marshall McLuhan sense. And while computers are pervading our environment more and more, the power for them to enable new kinds of learning and thinking goes largely untapped.

Lisps and other highly expressive languages help a lot. They let you express the problem much faster -- without dealing with much of the minutiae of controlling the computer. I've always been on the lookout for a system I could use to quickly implement the ideas in papers. It's crazy how long it can take, even when the algorithm is written right there for you! The best languages, Clojure included, are still nowhere near where we could imagine them being.

I'm sending this out, like a beacon, to attract others who enjoy programming for the immense potential it has for helping us learn. Are you one of them? Why do you program? Comment below and let me know :)

BTW, if you're interested in the big ideas behind why we program, you should check out the PurelyFunctional.tv Newsletter. It's a weekly romp through the history, present, and future of Clojure and functional programming.

Top comments (7)

Collapse
 
monicag profile image
Monica Granbois

My main motivation is the creative process. I really enjoy the mixture of logical and creative thinking. And at the end of that process I will hopefully have created something that will be useful to myself and others. 😊

Collapse
 
ericnormand profile image
Eric Normand

Awesome! Creation is one of those simple joys in life that I don't think will ever get old with me. I watch my daughter create and she loves it. I still love it, too.

Collapse
 
ericnormand profile image
Eric Normand

Awesome!

Collapse
 
jclahoot profile image
Jonathan Lahueâš¡

I'm a self taught coder, so the main motivation for me has always been my ideas and projects. I only started programming because I had an idea, it didn't exist, and I wanted it to. I'm making an app to help me learn more about myself, so the coding is highly personal and its easy to stay focused. I don't know if I'd enjoy it as much if I was coding for someone else, but just the power it gives you to make digital backed ideas come to life is incredibly rewarding in itself.

Collapse
 
ericnormand profile image
Eric Normand

Cool! How does coding help you learn more about yourself? Is it the process? Or the thing you create?

Collapse
 
jclahoot profile image
Jonathan Lahueâš¡

I'd say it's more what I'm making, but I think the process has definitely expanded my definition of what I'm capable of.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Great article!

I, too, code for the experience of exploration and discovery. We have to challenge our assumptions and push the limits to really expand, something I talk about in my speech, The Cake Is A Lie.

The more an idea, pattern, or algorithm is used, the more demanding I am of that thing to prove itself as "the best solution". Too often, we assume that the solution is X because we always do it that way. I've challenged sorting algorithms, the standard library, language design, design patterns, and coding methodologies, and that questioning usually pays off. (See PawLIB for several bunch of examples of that; we actually beat performance on C++'s standard data structures.)

Other times, the thing turns out to indeed be the best, and my new idea fails. But those failures are almost as intriguing and rewarding as the successes - I walk away understanding the topic many times deeper than I did when I started!