3 ms·
Exactly. They share the same medium, but they don't share the semantics. Learning standard English is an effort we make to communicate more effectively, and I
by miguelrochefort 13y ago
Exactly.
They share the same medium, but they don't share the semantics. Learning standard English is an effort we make to communicate more effectively, and I strongly believe that software should do the same thing with data.
Just take a look at how software is done. The first step of many project is to define classes, to reinvent the definition of extremely common entities. Why exactly do we need 10000 different classes to represent a "Customer"? Why can't multiple projects share the same "User", "Product", "Student", "Location" and "Transaction" classes? Not only would I not have to reinvent a lesser wheel, but I wouldn't have to explicitly explain how my definition of a "Customer" relates to your definition of a customer. We're just starting to reuse code, thanks to libraries. Why can't we do the same with data models?
Now, some might say that their version of a model is better than the standard one. If that's the case, then it would be selfish not to share this improvement with the world, and prevent others from benefiting from this improvement. Simply update the model, and the changes are applied to any software using it. OTA model update done right.
"What if someone disagrees with a change?" they say. Well, in moste cases, people will disagree with the cosmetic aspect of a change. They won't like the way something is named, or they will think that some property is superfluous. I can understand that, but that doesn't mean that we should stop there. Can't we just, you know, let people customize their own data UI to match their preference? You don't want to see the 1000000 different properties people thought could be useful to represent an object? Feel free to hide them and use a template that only show you what you care about, such as the Model, Price and Brand. You don't like the term "Brand", and would prefere to call it "Manufacturer"? Feel free to set that synonym as the prefered way to represent this property locally. No need to reinvent the wheel there when we all agree with the semantics of the properties, but simply disagree on cosmetic details.
Not unlike a lawyer, the job of a programmer is to communicate effectively and accurately. Vocabulary is a powerful tool that let people communicate potentially complex ideas without having to explicitly define them. If they don't already know what a term mean, they can easily learn it using a dictionary. I believe it makes sense that developers should become vocabulary masters, and learn their way through common data models, as well as common relationships (roles) and actions (functions).
A great programmer shouldn't substract a person's birth date from the current date. It should know that this manipulation is called "Age", and simply call the "Age" property (which can be dynamic and calculate its value based on other values, on the spot).
Mastering a framework is a great way to become productive. Why can't the framework be universal, general-purpose, and closer to natural languages in term of scope? I mean, we already have dictionnaries that more or less define pretty much anything you would want to represent and/or compute. The code has to be written only once. The second time the code is written, it's wasteful. Unless writting the code is used as a way to search for an unknown term (reverse dictionary).
Our culture is plagued by the fear of reuse, by the naivety that everything you think of is novel. Once you realize that most of everything you can think of has already been thougth of before, you start to assume that a solution to your problems already exist, and you start to reuse what others have done. This is the only way to go forward, this is the only way to break through the next abstraction layer. We reached a point where the compiler is no longer the only tool that can save us time (by letting us write higher-level code). We reached a point where reusing what others are working on, in semi-real-time, is the most productive approach. As the web is slowly progressing toward 3.0, programming is just starting to gain the social aspect of the web 2.0. I'm not sure we will ever catch up.