Music and Design Patterns

March 24th, 2008

Jake Voytko examines the overlap between software and songs in Music and Design Patterns.


Chord changes aren’t represented in the core notation/language of the music, but you can use musical notation to spell out changes. You can also use shorthand languages to design the music. The sentence “12-bar in Bb, 2-5-1 turnaround, on my lead” gives away none of the implementation details (voicings/melodies, etc.,) yet the song is written in a breath.

Design patterns act the exact same way for programmers. They are, at heart, a common framework by which programmers can discuss a design. They can spend less time focusing on minutiae and more time discussing design and code.

Your Next Skill

March 24th, 2008

It’s nearly impossible to stay current in the world of technology. Today’s hot skill is yesterday’s irrelevant resume line. Picking your next language or framework is not an easy decision. How do you know where to invest your time? What should you really be learning next? Scott Hackett recommends something universal, but oft overlooked, in The Next Programming Skill You Should Learn. In short, “Learn to Write Well.”

Writing skills will last you a lifetime, though. You will always benefit from it, regardless of what language or technology your use, or whether you’re even a programmer or not. Good writing skills are universal and will never be replaced.

The ability to communicate clearly and effectively not only increases productivity and creativity between developers, but also with end-users, customers, and clients. Your skills are only valuable if you can articulate them.

Why XO

December 17th, 2007

I was originally a sceptic. I had heard about the plan to build $100 laptops for the world’s poor children and thought it ridiculous and misguided. Almost insulting. I’d been to the developing world, and cute little laptops for kids was not the answer that came to my mind when I looked at the problems around me. Surely, I thought, $100 could be put to better use addressing more critical issues. However, I have since become a believer, or at least a fan, of the OLPC program.

The XO is aid in a form we are not used to seeing. At first glance, it seems like the misguided and uninformed effort of first world idealists who think technology is the cure for all problems. People for whom Blackberrys and iPods really are miracles. People too ignorant to understand that clean water trumps the web. People who fail to understand that the poor crave a full belly, not a full inbox.

One can certainly argue that the XO is too much technology where simple things like pens, paper and textbooks would do. I can tell you from experience that the value of a Bic pen is somewhere near that of a cigarette in the developing world, which is to say: high. A pen is powerful because it allows you to write and it allows you to learn. It is one of the tools of education. And education is powerful. It provides something that water and rice simply cannot. It provides hope and opportunity.

The XO is a different kind of pen. (And paper. And textbook.) It too, is a tool for education. And that is where its power lies. That is why it has the potential to make a difference where traditional aid has failed. Much of the aid we send to the developing world is simply a band-aid that fails to address the root causes of the poverty that necessitate it. For all the bellies we have filled, for all the wells we have drilled, and for all the vaccinations and immunizations we have provided, the problem still persists. People still live in poverty with no way out. Even so, all of those traditional aid programs need to continue. Nothing should prevent those of us with so much from redistributing our resources to those with so little. However, those simple and vital programs should not prevent us from attempting to fix the underlying problems that create and sustain such poverty. The kind of problems that can exist because the people who must endure them lack access to information, lack exposure to ideas, and lack the ability to communicate with each other. This is where the XO steps in. Decades of traditional aid have not successfully fixed the problem. We need to attack it from a new angle. We need to “Think Different.” The XO is different.

We know that throwing computers into schools doesn’t automatically make kids smarter. However, I think we do a disservice to the students of the developing world when we assume they would so easily take for granted the resources that we give students in the developed world. These are kids that share desks, share books, and walk miles to and from school each day just for the opportunity to learn. These are kids who save every scrap of paper and sharpen their pencils down to the nub. They waste nothing.

Thinking that the XO is simply about providing the poor access to YouTube, Facebook and online shopping is to miss its greater gift: education. If you’ve played with the XO, you know it is packed with educational software that is fun and engaging. Kids can write, chat, surf, make music, program, draw, analyze sounds and more. And if along the way blogs, YouTube videos and Facebook networks spring up from the far corners of the earth then so much the better. Are we not frequently outraged when journalists and bloggers are silenced? Shouldn’t we be glad to give these people a voice and platform? Think of the impact the printing press had because it allowed people to distribute ideas. I, for one, cannot wait until some school in the developing world starts blogging and sharing videos.

The XO is an experiment. We don’t yet know how successful it will be. However, we should never shun attempts to bring education, clean water, food and health to those in need because the method of delivery is too different. And if the XO isn’t your kind of idea, find some other way to give.

I gave one and got one. My XO arrived yesterday, and it really is different.

16 Languages

December 6th, 2007

Paul Stansifer is learning 16 languages, and spending 16 days with each one. His itinerary is as follows: Smalltalk, FP, Ada, Python, OCaml, BrainF***, i86 assembly, Prolog, Erlang, Forth, D, Lazy K, Haskell, FORTRAN, Lua, and Scheme. You’ll be able to find all of his work in the 16 Languages code repository. Be sure to follow along for interesting insights and epiphanies into some of these useful, and not so useful, languages.

Amazon’s Flow

November 30th, 2007

Amazon provides two very compelling services with S3 and EC2, allowing you to easily, and cheaply, scale both processing and storage. If you utilize these services, you might be wondering “What is the expected network performance between Amazon EC2 instances? What is the available bandwidth between Amazon EC2 and Amazon S3? How about in and out of EC2?” Well, RightScale provides the answer with Network performance within Amazon EC2 and to Amazon S3.

Deconstructing the Facebook Beacon

November 27th, 2007

Facebook has created quite a stir with their new Beacon — a feature that allows third party sites to communicate user purchases and interests to Facebook and then into a user’s newsfeed. It has raised a number of valid privacy concerns, but the technology itself is quite interesting. Jay Goldman has taken it all apart to see how it works in Deconstructing Facebook Beacon Javascript.

Rewriting for the Moon

October 29th, 2007

In Zen in the Art of Rewriting, Raganwald wants to give us the moon, but can only manage a tattered robe. Good writing, like good software, requires rewriting. It can be a difficult and time consuming job with often invisible results.

Helpful Habits

October 28th, 2007

Alexey Radul details the Programming Habits that, as he describes, are essential to the success of any software, sufficiently easy to describe, and not known and loved as universally as they should be. He touches on Version Control (always, and from the start), Builds Systems (automate everything), Test Suites (test everything), Code Reviews (two heads can be better than one), Refactoring (don’t be afraid), and Code Style (have one).

These are great reminders for those who are tempted to let good practices slip, and also a great introduction and justification for those just starting to dabble in the world of software development. Imagine if everyone started off by using version control and test suites?

A Dozen Handy Things

October 18th, 2007

The folks over a Virtual Hosting have put together a list of 12 Non-Dev-Related Tools Every Programmer Should Have. These are things that help them get the job done, but don’t have much to do with coding. What things keep you happy?

Get Refactored

October 1st, 2007

RefactorMyCode.com lets you submit a code snippet for scrutiny by fellow programmers. See if your hard work can stand up to the rest.