A thought about learning to program

I’ve thought this for some time, but I want to get it in writing now.

I believe Bloc’s mission is twofold, or at least we have a two-fold opportunity to really change the world.

First, our stated goal is to change education. We’ve started with web development, because that’s what we know. Along the way, we’ve had to dissect everything we do, as programmers, on a daily basis. Some of these things are difficult, some are easy, some are simple but difficult, etc. Mostly it’s horrible tedious work, with moments (hours) of flow, followed intermittently by frustration and debugging and stress.

There are two ways, as I see it, to teach people to code. You can:

1) Bring the student to a level of competence (literacy, if you will) that matches “the industry”

2) Make programming easier for more people.

If you can accomplish #2, #1 becomes trivial.

So, perhaps the biggest problem we’re solving is not that learning to program is hard.

It’s that programming is hard.

If we continue to use the literacy analogy (which I think is an excellent one, more and more), reading and writing were easy enough that children could be taught, even if they weren’t intrinsically motivated to learn.

If we’re to realize the full capability of the computer-human symbiosis we seek, and allow future generations to build upon our shoulders, we must make programming easier.

It’s a future exercise to compare and contrast what MAKES learning to read/write easier, and what MAKES carpentry easy to begin (as compared to programming).

The Passage of Time

I read the following recently in a Kurt Vonnegut novella:

“After watching four rural hours inch by, he had concluded that the clocks of the farm were lubricated with molasses, and that noon was still a century away in terms of time as he had known it in the city.”

I vividly understand this.  I think everybody does.  Everyone on earth has been in a situation that just felt like time stretched on forever.  Much of high school springs to mind.

It struck me that I haven’t felt something like that in a long time.  I haven’t felt that time was passing slowly since college.  I’ve absolutely noticed, personally, that time seems to have sped up as I’ve gotten slightly older; but the juxtaposition of the two hadn’t struck me until now.

Perhaps this is why  many adults don’t exactly sympathize with children when they feel bored.  On some level, we might envy kids when they feel like time is passing really slowly.  Do we lose this feeling as we age?

HTTP as a file system

I want to be able to treat URIs as files in unix:

$ cat /http/someblog.com/post/48

There are all sorts of implications here. In Unix, you can read and write files. You can also **execute** files:

$ /http/some_music_site my_mp3_file.mp3

Arguments could be passed as byte streams or whatever is simplest (or most appropriate for the data type). Text should be preferred — the receiving file (program, executable, web app?) is responsible for receiving data elegantly just like any other unix program would.

The concept of, say, a blog, could be transformed. I’m currently stuck with the wordpress editor if I’m using a wordpress blog. I could edit a blog post using whatever editor I wanted, as long as my blog was implemented as an HTTP API that understood how to be treated like a unix file.

This could be a library that HTTP servers could use, or it could just be a convention. It would be awesome to be able to do:

$ http://tou.herokuapp.com http://davezor.net/post/name_of_post
$ mkdir http://davezor.net/another_subdirectory
$ http://rdio.com http://davezor.net/music/pink_floyd_the_wall.mp3

Etc.