Tuesday, May 17, 2016

A Tool of a Different Color


Every now and again, I get asked the question which computer technology is better X or Y? Usually X is Java and when X is Java then Y is most often C++. Typically this is a baiting question. Most Java or C++ programmers firmly believe their language is the best. To me it is comparing two things that are not the same. Each has its place.  This is true of many computer technologies. Java used to be the language of choice for writing something portable. C++ was the language for fast code. C was the language for small code, i.e. device drivers.

It seems that each new project I have started for the past couple of years both professionally and personally has required learning a new language or framework. Very few have reused a significant portion of an earlier project. Most programmers do not seem to do that. I seem to get drawn to new languages and technologies constantly. I attribute this to my ability to learn rather than my enjoyment of learning something new. There is a distinction there, because it has more to do with wanting to use an appropriate tool for the job rather than fitting the job to the tools I have.

Ever tried using a flat head screwdriver on a Philips head screw? Depending on the size and configuration, it can be done. It is rarely effective to do so. I have used a hammer to get a screw out by turning not pounding. I have used a screwdriver to pound a nail into a board. Having the right tool or at least a more appropriate one is so much better.

Over the years I have learned many computer languages/technologies: Honeywell Basic, Applesoft Basic, Integer Basic, 6502, 8080, IBM Basic, Microsoft Basic, C, C++, Java, Visual Basic, Visual C, Objective C, Python, Jython, Bash, PHP, SQL, HTML, CSS, JavaScript, Ruby, Ruby on Rails (vomit), 8086, 80186, COBOL, FreeMarker, and probably a bunch of others that I have totally forgotten about. That just covers what most would consider formal languages. The frameworks for each only serve to make the list even longer.

For the past couple weeks, I have been trying to determine which of three projects is the one I am going to work on next. Part of the problem is the technologies that are available to complete each. I would really like to use something that could be reused for all three projects. Learn once, use thrice. It has turned out that finding a technology that satisfies any one of the projects by itself is proving to be a challenge. The time is not wasted, just filled with learning new technologies enough to judge if they have the required functionality for any of the three projects.

And now it happens. Writing this caused me to search for something that did not make sense and I find what something viable for one of the projects, that probably also works for one of the others. I doubt it works for the third, but that is okay. I am happy just to have a technology that works for one of them. Meh. Back to my happy place.