Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm not railing against type-safety, compile-time guarantees, encapsulation, or access control. In fact, I use them every day. I think haskell is pretty neat! And you can definitely get stuff done in C++. I'm not arguing against any of those things.

What I am saying is that in the rush to create the best engineering solutions, we have forgotten how to make programming approachable to the newcomer. Even people with aptitude and inclination get discouraged, if not by the technical stumbling blocks of the language they are using, by the unfriendly culture which has surrounded the craft.

Even children can write simple English. They aren't discouraged from reading and writing because they aren't great novelists. Good teachers try to teach the fundamentals and instill both the technical capability of writing and the joy of reading. Current CS pedagogy fails utterly in this regard. Early students spend so much thought on extraneous things like public static void main and pleasing a compiler that little attention is left to see the beauty in the theory and practice of computation.

The lack of a decent REPL or any useful interactive introspective techniques make C++ and Java particularly awful for teaching introductory computing concepts. Ruby is much more friendly on that level, as are many other languages. Look at projects like _why's Shoes or some of the things being done with Squeak. Look at the volumes of hackers who cut their teeth on things like BASIC. Look at how many industrial-strength best practices we can bypass while still teaching the fundamental joy of programming.

Nintendo's Shigeru Miyamoto, designer of many key gameplay concepts we now take for granted, was once asked in an interview what the fundamental concept behind his games is. He replied that the fundamental nature of a video game is that you press a button and something happens on the screen. It sounds simple but cuts through to the heart of the matter. Similarly I think that the fundamental appeal of computer programming is that I type something in and the computer carries out my wishes.

The love of programming is something that seems to come to people only by happenstance these days. If a language like Ruby can help more people to discover that love then more power to it.



There are some people working on this. The creator of Alice recently talked at my school. Alice is a syntax-free programming language used to tell stories using 3D models. The idea is to teach children computing concepts early, in a fun way, before throwing syntax at them. Right now Alice is used in many CS 1 classes and some high schools, but it could really be taught much earlier if public school bureaucracies weren't so inflexible. A person's first introduction to computing should come well before they enter college.

Alice's creator hopes that it will encourage more women and minorities to enter CS. His thesis is that telling a story is something that is natural and interesting to these groups, moreso than, say, solving the Towers of Hanoi.

Our intro class at UCSD uses Java and the intro professor hates it - being a leading researcher in CS pedagogy. She does do some interesting things with her class though. The earliest programming projects they do are not things like the fibonacci sequence, rather they do cool media projects such as sampling and modifying sounds, using a green screen to put themselves in images, and other fun projects. The students respond enthusiastically when their creativity is allowed to run wild and as a side-bonus, cheating is near-impossible.

The creator of Alice said he was struck one day when interviewing a female who had taken a CS 1 class and she said "Sure, I can figure out how to sort a list of numbers. But why would I ever want to?" CS pedagogy has a long way to evolve, but it is making improvements.


+1. Reminds me of this:-)

http://www.welton.it/articles/scalable_systems/

I should rewrite it though... it's kind of crufty.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: