Don’t be a technology slave

Technologies are tools to solve a problem, and not the end goal. I like to think of a technology as a screw driver used to assemble the product rather than the finished product itself.  As a computer scientist, we are problem solvers, and not poets of a certain language. Otherwise we would just be called code entry experts.  Understanding a problem and outlining a solution should come before selecting the technology.

I hear many people say that they hate Microsoft products. Some hate Google’s web API. Some don’t like Java because it is “too OS independent”. Etc. To me, that sounds like someone was trying to pick their screw driver before having a look at the screw itself. As a developer, you need to listen to the problem, and understand the solution, before picking the technology. A technology is supposed to help you implement your solutions faster and more efficiently, and not feed into your love for that particular technology. You should be failthful to the concepts you were taught to balance such as speed, memory, productivity, comfigurability, etc. You should not be faithful to a technology per se. There is a reason why new technologies come about more frequent than corruption scandals in Chicago politics. That’s because the problems in the enterprise are becoming more complex and demanding as businesses become more competitive.

So, pick the technology that best suits your implementation requirements. Don’t let your pre-choice of technology dictates how you implement your solution. When I want to create a simple website that is not highly interactive, simple HTML with JavaScript and CSS would do. If I want some powerful Ajax capabilities with high end UI but all done with quick turnaround, then gwt may be a good choice. I like Java for backend processing due to the endless frameworks and third party tools that support it. But when I want to create powerful desktop applications where the UI is a major focus then .NET would be competitive here although Java’s swing with all of its latest desktop integration and support can be very competitive. I used Fortran 90/95 on a project for Argonne National Lab where speed requirements to process highly complex numerical equations make the word “Java” a racial slur. When I wanted to find a technology to best implement rule-based flow and processing for MedCPU, I chose to use Drools as our rules engine rather than choosing to push for in-house Java implementation of what would have been re-inventing the Rete wheel.

Many times developers don’t see an inherent support by their master (pre-selected technology) for their chosen implementation. So, they fix a bad choice with a complicated decision by selecting to create an API to provide the tools necessary to implement the solution. This is the equivalent of playing with the screw driver end to make it fit the screw. Surprisingly, as anti-commonsense this may sound, I have seen it done more often than replacing the screw driver alltogether to find a more suitable one for the screw.

Now, life is not that easy or straightforward. Most of the time a developer is limited to a pre-screened or selected set of technologies. She has no choice of selecting a screw driver when all she is given is one or two before anybody knows the type of screw they will encounter. Who is at fault here and how the hell is she supposed to put the screw tight in place when she is not allowed to think outiside of the box (toolset box)? I think it is the responsibility of the architect of the system to understand the big picture of all potential problems to see and select a good set of representative tools for his developers. This may not be as easy as it is said above. However, there are plenty of ways to mix technologies in today’s applications than say five years ago. Many technologies support scripting languages to provide additional tools that cannot be provided by the host technology. Don’t be afraid to embed some groovy into your Java code if you need to. Don’t be afraid to use IPC to use a whole new technology alltogether for the new problem and its solution implementation. There is absolutely nothing wrong with using multiple technologies in the same system as long as two conditions remain constant. First, you are not adding more complexity or dependencies to your system. If so, maybe you started with the wrong choice of technologies to begin with, and it is time to start over. Two, the solution flexibility does not come at the expense of deliverability. At the end of the day, we are here to please the business. If the deployment of the new technology costs too much (learning curve, build scripts complexity, etc.) in terms of when the implementation of the solution will be available to the business user, then although it may look like it, but this is still not the right screw driver.

A great system is a hybrid system with many arms under its arsenal. The flexibility not only to change but adapt and play nice with new technologies is a powerful characteristic of great systems. So, try to select the “right” technology for the big business problem at step 0. Selecting the right technology means that you will be able to implement most of future solutions without having to change technologies alltogether or have to do “too much” to make your existing technology implement the solution as expected. Now, the system described above is a good system. What separates a good system from a great one is its ability to evolve and accept new technologies in its space without compromising the deliverability requirement. Just whatever you do, never use the wrong screw driver for the wrong screw. And as much as you hate Windows or Eclipse, there exists something out there that those two technologies or tools will marry perfectly into. So, don’t be a slave of technology.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: