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.