I just read a fantastic article on learning to program by Bret Victor, Learnable Programming. I’ve spent the last few months really concentrating on learning more about programming. I’ve been reading books and doing exercises using both JavaScript as the language and I’ve dipped my toes into Python as well. I’ve talked about this on the blog before, my quest to become a better JavaScripter and to really understand how to program.

The article by Bret basically said in words why I feel so incredibly frustrated as I try to learn this and why I am progressing so slowly. My academic background is in the arts, I have a degree in drawing and painting, which means that I am a fairly visual learner. I need to be able to see what is happening to understand it. With CSS and HTML, that is super easy, I type in some code, go to a browser and I see what it does. It’s an immediate outcome and I can see exactly what is happening just by looking at the browser. This is definitely not the case with JavaScript. I type in some code, I go to a browser, there is an error and what it says in the console doesn’t really tell me anything. What was happening when the code ran? I can’t see that, therefore I’ve found it difficult to figure out what is truly going on.

As I read the article by Bret and watched all the small screencasts that showed what was happening in the code I realized that this is the element that is missing for me. By being able to see what is happening with the code, I better understand how it works and how to write it myself. I have grown increasingly frustrated with all the various ways of learning to code, basically read some documentation or a book and go over the examples and then just translate that into your problem. This isn’t enough for many people and I am one of them. I have the desire, but it has continually been difficult to figure out what is truly happening with the code I write.

I loved the comparison of learning to program,  as it is most often taught, with learning to cook in the same way; why do we teach programming so differently than almost anything else? By that I mean, with so little visual representation of what is happening. I highly recommend the article because it is eye opening about how people learn. It is a long read and a bit abstract, but worth the time. It’s helped me stop feeling stupid as I struggle to learn new programming concepts, and has made me realize that my style of learning may not be suited to how almost all the books and sites are trying to teach me the concepts.

Some people will defend poorly-designed systems by pointing out all the creativity that they have enabled. For example, if novices are creating lots of programs in the Khan Academy and Processing systems, doesn’t that mean the systems are worthwhile and valuable?

Not necessarily. People are inherently creative, and some will manage to create in even the most hostile of environments. That doesn’t justify bad design.