What I've Learned From Failure
Programming has often been described as a craft, something that is learned informally through self-guided study and extensive practice. A craft one absorbes from working with others, and from examining finished works. Something that is passed along through informal mentorship.
Crafts are held out as being distinct from engineering disciplines. Engineering is roughly considered a combination of empirical science referring to the materials, and a body of knowledge about practices. Engineering disciplines are characterized by extensive standardized formal study, conformance to best practices, and regulation.
There is something there in both possibilities, but I think Alan Kay has some insight into programming. His suggestion is that programming is a Pop Culture, because it spreads much, much faster than mentorship, education or formal study spread.
Programming certainly spreads quickly, and without pause for deliberation: The programming language BASIC became popular because Dartmouth had it on a computer system. General Electric franchised that system and sold a lot of computers, with BASIC piggybacking on top. Once BASIC spread “in the wild,” it became popular because it was popular.
Many things in programming are like that. Why do you use
underscores_in_ruby? Because everyone else does, and that’s the language’s “style.” This may be a trivial point when naming things, but this cultural phenomenon spreads to the XMLification of everything in Java the Billboard Hot 100 for testing frameworks in Ruby, and practically every other question of programming architecture and style.
Popularity rules, and fitness for purpose is secondary. We even make up a little rationalization about this: “Our code must be easy to read for the next programmer, so we pick idioms that will be familiar.” That would make stellar sense if idioms are forever, but they aren’t. They come and go like trends in pop music, and Ruby Archeologists can accurately date a business application by examining its gemspec file.
This is one of the reasons why many experienced programmers spend some time on “social” programming sites like Hacker News, Reddit, or Stack Overflow. In a pop culture, keeping up with the trends is necessary to do your job. You can’t design clothes if you spend all your time in a laboratory analyzing fabrics and talking manufacturing techniques, you have to get out in the streets and clubs and cafés and soak up the culture.
In a programming pop culture, you have to go to meetups and read blog posts about who makes which decisions to solve what problems. And you can’t be deceived by the technology. Programming idioms and libraries and frameworks evolve through Survival of the Fittest all right, but that model gave us Bowerbirds, birds that build elaborate structures that don’t do anything except demonstrate its fitness to spend large amounts of time building elaborate structures. Which is attractive, because to succeed we too must build elaborate structures, so maybe some elaborate structure DNA will help us propagate our ideas into the next generation.
And complaining about the wastefulness of bowers will not change a single thing. This is the life we choose to live, this is the culture we choose for ourselves. We build things that can be described by science, and engineering principles can help us predict the outcome of our projects and processes. But we cannot ignore the human element of our work, and we cannot ignore the existence of its pop culture. If you don’t believe me, try proposing proven computer science—like parser combinators—as a practical programming tools. Despite near-universal requirements that people getting jobs in programming study these ideas, the moment they leave university we encourage people to avoid them as being “too complicated to understand.”
Much as a record producer will encourage the musicians to avoid complex chord progressions as being “Inaccessible to the masses.” If you want to get your message out, you must work in gentle, gradual steps that nudge the listener small steps at a time. You must build your bowers and flash your plumage. You must dance and sing. You must write blog posts and speak at conferences.
I said that complaining about it will not do you any good. I will go further. Rejecting our pop culture as being backwards or inferior or sub-optimal is rejecting our humanity, rejecting the things that make us laugh and cry. If our programming was so logical that we never rejected a good idea for being unpopular, when would we read something and gain the pleasure of the “Aha!” moment? What delight would we get from seeing a solution to a problem by thinking about it in an unexpected way?
This is who we are and what we do.