Most programs nowadays are written with some code that the developer writes that are built on top libraries. We string together and manipulate the libraries in interesting ways in order build an application. No one goes and rewrites a graphics engine or a networking library anymore (unless you’re doing something special or unique in that arena). So besides debugging, for every new type of application a developer is doing, they are mostly spending time figuring out how to use libraries.
I’ve found that some libraries were really hard to figure out how to use. Other libraries were a lot easier to adopt. Why? I’ve found that it was mainly due a culture that was common across the libraries, and often times, this is more apparent in some languages than in others.
When I started using Rails, I was struck by how some things weren’t dictated by the syntax of the language, but merely a convention set by the framework developer. And as long as you followed the convention, things just worked. This not only simplified the complexity of rails, because it didn’t have to handle all sorts of cases, but it also made it simpler to find your way around the framework once you knew its ‘culture’.
“Convention over configuration”, is what the creator of Rails calls it, and after thinking about it for a little bit, it makes sense. In Rails you don’t have to make the mapping of class names to database table names, or their id attribute. There is already a convention, a culture, for doing that. Culture of a framework allows you to make assumptions that lets you say more with less.
It is the same with any human language. Idioms such as, “famous last words”, “a rose by any other name”, and “rolling a rock uphill” have a lot of meaning behind the words that are the result of references that most other people know–culture. So with just a couple words, you can convey quite a bit. The catch is that the other person has to understand that culture in order for you to convey much with little.
I think programming language–libraries especially–would benefit from a culture, so that programmers can more easily hop from library to library. Culture also has the advantage of being malleable over time. This way programmers can shift their conventions over time if the old ones aren’t working.