Recently I've been thinking about how two things that I do often photo manipulation and programming. These are good examples of how some tools help and some hinder your work.
When I'm editting a photo [in Photoshop] I'm given a set of tools that basically allow me to do anything I want and in a more or less natural way. I can completely relate to how if I needed to accomplish what layers allow me to do in the real world I could do this. It's easy to think of layers as pieces of paper stacked on top of each other. I can edit individual layers, I can control transparency, I can erase parts of an image etc. Not only that but I can do things not easily done in the real world for example combining[/merging] layers. And this is my point. I have a tool that takes a real world problem and not only allows me to accomplish what I want in a natural way (eg. intuitive and not combersome] but also extends it to do things I couldn't normally accomplish. And isn't that the very definition of a tool. Allowing one to 'extend' their ability.
Now let's look at the current level of programming - specifically object oriented programming. Object oriented programming (OOP) has all sorts of tools to allow one to imagine things as objects and then go about manipulating them with language contructs. The first problem is not everything fits well into the 'object' senerio. I've been part of many projects where 90% of the code is simply moving things in and out of objects. Secondly, the language restrictions of what can be done and when it can be done in OOP vastly constrain what is possible vs. allowing one to accomplish more [not less]. I have all sorts of restrictions with how I define an object, where I can define a routine, how I can access it, who can can access it and when, etc. Why can't I simply write a program that allows me to get done what I want to get done and without it getting in my way? Better still should it not extend my ability and allow me to accomplish more then I normally could without the tool!? Functional programming allowed one to get their job done and in a much less error prone way, yet today everything is about OOP. And we can see the results. How many times did your computer crash and/or needed to be restarted to fix some bizarre effect?! Does this not show that even today's modern computer programmer doesn't fully understand these restrictions? Let's compare this to computer from 10+ years ago how many times did you restart those machines? I'm betting a lot less. So what's going on? Why are we getting worse and not better? I believe it's the fundamental fault of OOP and with it all the restrictions. Any 'professional' programmer spends many years of their life learning the ins and outs of what can and can't be done in OOP. I dare say most of them never really get it. So now we live in a world where to accomplish the simplest of things takes way to much effort in an object oriented language. We need to re-examine the true usefullness of OOP and to come up with something that's more expressive, reliable and faster at accomplishing things that people want to do.
Photoshop allows me to get things done quick and easy. I'm better off using digital technology here then I am at using a 'normal' camera. Can we say the same thing when it comes to programming with OOP techniques!?