I think the software is growing, and will continue to grow, the way lifeforms have grown and evolved on Earth. By tthis I mean we started with a single ancestor, likely of a few proteins or perhaps a single cell, only to become a planet housing humans, echidnas, sponges, fungi, insects, trees, and more.
This mostly comes to mind when I look at essays like this series, by Mike Taylor, on how so much of coding these days is just playing plumber between various libraries, fixing leaks and disasters that occur when the piping isn’t perfect. The argument is stated well by jdietrich commenting on the story on Hacker News:
The Olympics brought more opportunities for people to be hatin’ on Johnny Weir and his style of performance. I love what he said: “Every little boy should be so lucky to turn into me.”
And, you know, it’s sort of true. How wonderful if we were all so lucky that we could freely be who we want to*, without judgement?
I’ve been playing around with Common Lisp recently, using Practical Common Lisp and Let Over Lambda as guides (not gonna lie, having LOL on the spine of your book is wonderful). Last year when I went through my Scheme phase (the original URL of this blog was littleschemer.blogspot.com), I never thought I’d see the day that I’d switch sides.
FWIW, this is my iPhone background image.
I do feel like a traitor though, since even though I’m a theory-head and advocate of FP, I’m loving Common Lisp. There are a few reasons for this:
Simpler macros. I’ll bet some hardcore Schemers will disagree with me on this, but I feel that defmacro is much, much simpler to learn than syntax-case, and syntax-rules always leaves me wanting more. Maybe I’m deficient, but I took to defmacro immediately, whereas when I want to do anything non-trivial in Scheme, I feel myself always going back to Dybvig’s explanations, taking far longer than I’d like.
While in principle I’m for hygiene as the default, it’s not too big an issue in practice. Hoyte gives a great little macro (one of the first in his book) that ensures you fresh variables whenever you want them, without even having to declare them!
Language libraries. CL comes with every function you could ever want. It comes back to what Peter Norvig said in Paradigms in Artificial Intelligence Programming (paraphrasing): Scheme is one of the smallest languages to define (< 50 pages), whereas CL is one of the largest (> 1200 pages).
While some Schemes provide these, since they aren’t part of the standard you aren’t guaranteed anything across implementations. In fact, my favorite Scheme in terms of libraries (good ole’ PLT) even broke across versions when they enforced module declarations at the top of every file.
Besides, once a Scheme gets these, they stop wanting to be called Scheme.
This isn’t to say its all peaches and cream: I still prefer Scheme’s single namespace over Common Lisp’s, I prefer Scheme’s naming conventions (map vs. mapcar, or worse, loop for elem in list collecting). And issues with lambdas, namely sharp-quoting and not being able to place functions in the function position (especially after learning the beauty of Scheme’s semantics so well last semester) still throw me for a loop.
But after a year of mounting tension with the residents of Shelbyville, I realize they’ve got quite a bit right ^_^.
The first is the only conceivable improvement I could think of for my baby, vim. The second is the source code for ed.
Both from this reddit thread.
The longer I’m away from home, the more I forget about where I come from. I’m on Spring Break now, and usually when I’m home I spend some time digging around the house for archiving material. During my last Spring Break I put some kiddie pictures on Facebook that was met with much enthusiasm from my family. This time, I have a video.
My school had a tradition of putting 4th graders in little skits, and I was in one called Sammy Carducci’s Guide to Women. (based, as I just found out, on a terrible-looking novel for middle schoolers).
A lot of big-time, real bloggers are writing about their 10 most influential books. I’ll present mine here. Stealing some terminology: this is my ‘gut list,’ not my ‘I’ve thought about this for a long time’ list:
Don Quijote (Cervantes)
Made two demo videos, for my Independent Study making games. The first was our collaborative effort, a Hungry Hungry Hippos-type game called Penguins:
Another not-very-hackery article on Hacker News caught my attention. Dyske Suematsu (in 2003) gives a few reasons to why we don’t hear jazz on Top–40 radio stations, making claims like “our ears are getting lazier.”
I’m taking a computer science class called Solving Hard Problems, but reading the article and the epic comment thread that ensued reminds me that our Hard Problems are really bollocks: our problems are at least solvable. Even if they aren’t, they’re well defined enough to know when we’ve solved them.
I used to read A List Apart religiously, back when I was a lamer-than-lame “web developer.*” I’ve slacked off on reading it because I haven’t touched much web dev recently, but it’s still an amazing online magazine, an example of well-published content on the web.
One of their articles is on the “Cold War” between Flash and HTML5 proponents, reignited by the iPad lacking Flash support. He describes the pointlessness of the fighting effectively, and it generalizes to programming language fanboy-ism:
There’s too, too much to write about, but I’m going to make a little diversion known, because it blew my mind. I have to give credit where it’s due: this comes to us from the peerless Matt Wilde (cs dept.,facebook).
The problem is this: our friend Josh was given some screening questions to qualify for a programming interview (to make sure he wasn’t one of those programmers who couldn’t program), and one of the questions was “Recall that the Stack ADT contains push(E), pop(), … Implement a Queue using a Stack.”