Ok, silly puns aside, I guess I was on a bit of an unplanned hiatus. I guess I should have expected that changing jobs, moving from one coast of the United States to the other, and finishing my Ph.D. might take up a bit of my time. Also, at the time I started this blog, I was working for Apple and, as you might imagine, I had to try and keep it low key. Well, that’s in the past, and I’m looking to do great new awesome wonderful things now…or something. Anyway, I’ll leave these few posts here as a memento to…something. If you are really curious what I’m up to now, you can find me at Manhattan Metric.
Forgive me if I ramble a bit…
I sometimes wondered what the use of any of the arts was. The best thing I could come up with was what I call the canary in the coal mine theory of the arts. This theory says that artists are useful to society because they are so sensitive. They are super-sensitive. They keel over like canaries in poison coal mines long before more robust types realize that there is any danger whatsoever. — Kurt Vonnegut
It’s only been two days that my friend _why has been gone, and as much as I’d like to believe it’s too soon to say he won’t be back, something tells me that he’s gone for good. As such, I feel compelled to reflect on matters, much as I would at any funeral. I must say that the disappearance of _why has hit me rather harder than I thought it might. You see, I really believed in his goal of being a free-lance professor, probably because I fancied myself a budding free-lance professor.
I’ve even gone as far as to entertain fantasies of a future troop of free-lance professors, all of us traveling the country and even the world, stopping only for a week or two in each locale. We’d contact the local libraries or civic centers or YMCAs and offer to put on impromptu programming classes. We’d print out 8 1/2” x 11” posters on our second rate ink jet printers and tack them to the telephone poles and bus stop shelters throughout town. The children, young and old, and even some of the adults, would show up with their rag-tag collection of laptops and other computing devices to learn how the wizards of code could make their computers dance and sing. Then, just like some kind of traveling carnival, we’d pack it all up and move along to the next town. Occasionally one of us would run into another in a diner on a dark night somewhere just off the highway. We’d recognize each other by the open notebook on one side of our dinner plate, and a laptop on the other. No words would need to be spoken, just a silent nod of acknowledgement that we were two of a kind: vagabonds spreading knowledge in exchange for a meal and a place to sleep. Like 21st century philosophes, we would be the great minds whose impact would be measured in the number of individuals influenced more than the code or books produced.
Alas, such fantasies are just that, and _why is gone. So it goes. Still, it seems almost inevitable that, faced with our own impermanence, we would try to take something away, to learn something. Therefore, I find it interesting and good to reflect on the way that the community at large has reacted to this stunning turn of events. Much of the discussion has revolved around _why’s dual roles as both software developer and artist. This seems fitting, as he was one of the crazy ones trying to show how something as utilitarian as computer code could also be artistic. It was almost as if a farmer tried to convince the world that hay could be hauled on a pitchfork with grace and aplomb worthy of an ice dancer. Yet, at the same time his work was vital. It was utilized by many. Some have felt that he has stolen by giving and then taking away, like a builder who had rigged the foundation of his own building with dynamite, only to detonate it after a family had moved in, claiming it as a grand piece of performance art.
Well now, let’s just calm down a bit. He was human, as are we all. He had human flaws. If we are unsure how to react to his sudden disappearance, it probably says more about us than him. What, exactly? I find that as I reflect on this I think about paper. Consider paper: from pressed Egyptian reeds to reams of copier quality (not to be used in the laser printer). Paper is just a medium, and yet paper has carried the works of many ages and the brilliance of some of the greatest minds. Paper almost never receives the thought or attention it deserves. No second thought was given to the paper in the Library of Alexandria, and if it weren’t for some forgetful cave dwellers the Dead Sea scrolls would likely have turned to dust many ages ago. Even the Declaration of Independence and Constitution of the United States, as recently as they were written, were scrawled on any old piece of paper without much thought to their long-term preservation.
It has taken man 4000 years to finally understand paper, and what it’s really worth. Now we can take a jaunt down to the local drug store and purchase a notebook of acid-free paper and a pen with Guaranteed PermanentTM ink. Important documents are copied and microfiched and sealed in titanium and inert argon. We’ve come to realize that, without the medium, the ideas are lost. So why are we making the same mistakes all over again?
I remember my father telling me a story of the first computer his office purchased with a 20 MB hard drive. All the secretaries looked at each other and wondered aloud how they would ever be able to fill 20 MB. Somehow, I’ve never had that reaction to a hard drive. I seem to always be running out of space on mine. Over time this has led to an almost neurotic compulsion to delete anything which is not important, whatever that means at the time. Even now as I stare at the 40 GB of free space remaining on my current hard drive, I wonder to myself if I shouldn’t delete this or that folder. It’s not important. It’s clutter, distracting, completely unused and unnecessary. I’ve developed a habit in my life of trying to reduce clutter, as I am prone to pack-rat-ish tendencies if I am not careful. It is only recently that, when it comes to the bits and bytes on my hard drive, I’ve started resisting my deletionist instincts. “Who knows,” I tell myself, “what the Rosetta stone of the next millennium will prove to be.” Even though I may have no use for the information, someone might. So long as I can learn to ignore the extra icons, my hard drive won’t mind those megabytes hanging around.
And yet, there’s one area where I still have a bad habit of getting deletion happy: my source code. I haven’t pulled a _why yet, but I have probably removed more repositories than I’ve saved. I spend so much time in ~/Sources that I just can stand when ls displays more than 3 lines of 5 columns across. Then _why goes and disappears. Where’s my fork of Shoes? my copy of potion half-compiled? camping in its 4K glory?
Gone.
So, if _why is going to teach us anything with his final act, I think it should be that we need to learn to treasure what we value, and to care for the medium that carries the ideas. Luckily, there are many more responsible than myself, and a nearly complete mirror of _why’s life work has been reconstructed. I say nearly complete because I had noted just in the last few days that _why had started a new project. Like potion, it was a take off on some of Ian Piumarta’s language experiments. For the life of me I cannot remember its name. I remember thinking, at the time, “Oh cool! Something new… I’ll clone it when I get the time…”
There is a rather long running debate in the world of programming regarding the utility of learning more than one programming language. This debate is not entirely dissimilar from the debate over how many human languages one should learn. Many of the pros and cons bandied about are almost identical: specializing in one language allows you to improve your proficiency and focus your efforts, leaning other languages lets you communicate in foreign lands and can expand your way of thinking, etc.
However, there is a dimension to the debate, and people’s understanding of the debate, regarding human languages that is almost always missing from the corresponding debate regarding programming languages: fluency. Now, language fluency is something of a sliding scale, but there is a definite inflection point (or so I’ve been told by those who reach this point) in becoming fluent in another language. This inflection point comes about when you stop thinking in one language and translating on the fly to the other and instead start actually thinking in the new language.
I’ve recently come to suspect that something similar exists with programming languages, but it’s harder to pin down since programmers don’t think in code. Sure, some might tell you they think in code, but I can almost guarantee that there’s a little voice in their head that’s still speaking a human language (especially since many programming language constructs are essentially unpronounceable). Instead, I think the distinction lies in the ability to code in a language vs the ability to create in that language.
For example, on numerous occasions I’ve started with an empty file and written enough C code to accomplish some non-trivial task. More recently, I’ve done this a number of times in Ruby. I feel these are two languages that I know very well. Last week I also would have included Javascript in that list. Then I found myself watching a demo of a co-worker’s Javascript project, and I realized I had no idea how he had done it! I just wrapped up a project that involved writing around 500 lines of Javascript, so I can obviously code in Javascript, but when it came to visualizing the process of starting from scratch and ending up with something like this, I was at a loss.
It’s the equivalent of knowing that you can get around in a foreign country, maybe have casual conversations, but realizing that you wouldn’t begin to know how to write a novel or give a speech in that language. I can sit down and, almost without thought, begin creating Ruby classes and modules to do what I need. On the other hand, with Javascript I feel I’d need mounds of example code and a fairly fleshed out set of libraries to help me along.
So, I think it’s important to remember, when considering whether to learn a new programming language, that there is a real difference between being able to edit or debug in a language and being able to start from scratch. Before you learn that new language because it’s going to “expand how you think about constructing programs”, how committed are you? Are you going to create something from scratch? Or are you going to learn just enough to put it on your resume (not that this isn’t also a valid reason to learn a new language)?
The other way to think about this, is that maybe instead of running off to learn the next hot new language, maybe you could gain more by revisiting a language you already “know”. As for myself, I’ve got a blank .js file waiting for me in my text editor.
Being a scientist, a self-honest scientist, means accepting that the world is, on some level, deterministic. That is, a scientist must accept that, given an initial starting state, the result of following that state through time will always be the same. If this were not the case, then predictability and reproducibility go out the window, and we might as well all go home. Recently, a pair of mathematicians extrapolated from this basic premise to conclude that free will could only exist if individual sub-sub-atomic particles have free will.
That’s a lot to swallow! It would only seem sensible then, to conclude that free will doesn’t really exist. Now, this is very different then proving that free will doesn’t exist, but that seems like an impossible question to answer.
So, what if we look at things just a little differently. I certainly feel like my free will is real. If it’s not really real, then that means that the notion of free will, the trickery of my perception of free will as real, should have evolved. So, then why not ask this question: What is the evolutionary benefit to me perceiving my free will as real, if it really isn’t?
I’d be tempted to say that ECMAScript Javascript is almost the perfect language: First class functions, Objects are just Hashes, Prototype inheritance, etc. I’d even be tempted to say that it would be an excellent language to have students learn as their first language, but I won’t. Why not? Two reasons:
There are far too many bad examples of Javascript coding practice available on the internet. Any student trying to find help with a Javascript project would have to wade through 9 bad examples before they found 1 good one…and how can you expect them to identify what is good and what is bad?
The syntax is too much of a distraction.
Now, that last point, to me at least, seems a bit ridiculous, but I just can’t get past the feeling that students would have issues with the syntax. Maybe that’s just me, and my years of programming bias speaking. At any rate, what I would love to see is a Javascript programming interface that was visual. Something where objects could be represented as boxes and function calls as lines. The killer feature would be a representation of the stack as functions riding along lines and popping off in order…
Ruby 1.9 is turning out to be an excellent functional language: 0.upto(10).map{|i| ->(n, i) {n + i}.curry[i]}.each{|p| puts p.(3)}
I’m glad that Vonnegut used a semicolon in the last book he wrote before he died; it makes me more comfortable doing so too.
So many programmers are men. So many. It’s positively ridiculous!
…but why? I recently proposed that the future of programming languages lay with the development of a language which is closer to modeling human thought patterns than the patterns of the computations that actually take place. That is, integer math should be less important than string manipulation, for a start.
Of course, human thought is so random, so hard to pin down. Besides, some people think better with math than with language; some think better with pictures. How will we know when a language has successfully modeled the essential patterns of human thought?
When we start to get more women programmers…
Sometimes I feel like an idea surfer. The key is to see the good waves a long way out, when those ideas are little more than swells. They will not stand out from the rest, but something about them tells me that these ideas will get big. When that wave approaches, you’ve got to start paddling at just the right time. Too soon, and you’ll get swept under. Too late, and that wave will pass you by. Catch it just right, though, and you can take that idea for the ride of your life.
If you don’t, always remember, there are more waves if you stay out a little longer.