On Programmers and Programming Languages. Your Opinion?
This is a small article in which I want to talk about a couple of issues
that I sometimes talk about with my colleagues at work, but most of the
time keep to myself. These are two subjects that I would like to know
the general software community’s opinion about.
The first thing is regarding the role of software developer and using different programming languages in your work.
The second is regarding what makes a good programmer.
Let’s start with the first one:
I consider myself a software developer, more than a Java developer,
Ruby developer or any other language specific developer. I think this is
a very important thing in this field of work. To be able to produce
results in any language that you work with, without having prejudices
against them.
I am not saying here that you need to like all programming
languages, but what I am saying is that you need to consider that most
programming languages have good characteristics and advantages over
other languages, no matter if those other languages are your favorite
ones.
I am not saying either that you should be an expert on every
language out there, but I do think that you should try to be good in at
least two languages that are different enough between them to involve
certain change of thinking going from one to the other.
It is also fine to be an expert in a particular language,
specializing in it. But this doesn’t mean disregard the other ones as
useless.
I’m talking about this for two main reasons. First because in my
current job and in my current position we were very recently looking for
Java and Ruby developers. Not Java developers and Ruby developers. But a
Java/Ruby developer to work in both languages at the same time. The
other reason is that I usually write in this blog about different things
in technology and mainly about Ruby and Java as they are the languages I
know better.
In both scenarios (interviews and blog writing) the majority of the
people that works in one of this languages disregard the other one as
complete horrible. The Ruby people say that they will never work with
Java as it is cumbersome, full of boilerplate, full of XML, horrible
syntax, too many frameworks to care about, boring typing, and a big etc.
The Java people say that Ruby is a toy language, some people say
working with it is not even programming, they say is just too slow to do
anything useful, that everything is a mess without types, that
metaprogramming is magic that you just don’t know what is happening and
another big list of etc.
So it is really hard to find developers that work and enjoy working
with this two different languages (and probably between any two
different languages). Sometimes it feels like they don’t even want to
give the opportunity to the other language to prove its worthiness and
is simply discarded from the beginning. Sometimes I really think it
might be a case of laziness to actually try and learn something new and
different when you are in the comfort of what you already know. I, on
the other hand find this learning really interesting and definitely
worth my time as I think it makes me better as an overall developer and
help me understand the goods and bads of every language, because I can
tell you, both Java and Ruby are very good languages in their own way.
The second point I wanted to talk about is regarding on what makes a good programmer.
What brings me to this particular subject is the way I see myself and
the way I see all developers I work with or the ones I interview or even
the ones whose code I look on different open source projects.
I can’t really answer what a good programmer is as I think it can be
different things to different people. As an example, I try to use good
programming practices a lot in my day to day work, I try to use and
enforce the use and benefits of TDD on my colleagues. I try to enforce
the use of simple principles like DRY, SRP, and also the readability and
conciseness of the code that I and my colleagues write. I also think
that I find good solutions to the day to day tasks that I have, and I
try to think of the best possible ways to solve the problems at hand. So
in that sense, I consider myself a good programmer.
However, from a different perspective I would say I am not really
good at all. This perspective comes into place in let’s say, for
example, an environment where I need to develop really super efficient
algorithms using mathematical efficient formulas to solve problems. It
comes to mind maybe things like 3D gaming, Artificial intelligence and
the like.
As an example, I was recently solving a couple of problems in
TopCoder. One of the problems took me like 1 hour to solve I would say.
It was an implementation that if I don’t remember wrong had a couple of
for loops (one nested inside the other) and 3 or 4 if statements. I
remember it also had a HashMap structure for storing some middle results
of the final computation. I was happy that I solved, but I knew it
didn’t look great (not the code itself, which was OK, but the solution
as a whole), so I went on to see other people’s solutions. One of the
solutions I found was 2 lines of code with a couple of mathematical
formulas that really didn’t make sense to me at that point, and that I
had no idea how that small thing could do all that my 30 line algorithm
did. So from that point of view, I would say that the other guy is
definitely a better programmer than me.
So sometimes when I am interviewing people at my job, asking my
questions (What is Dependency Injection, What is AOP useful for, Explain
how you use Strategy pattern, etc etc...) if they don’t have any idea
of this I always wonder if they might be amazing at this other
programming skills that I maybe don’t have. But I guess I can’t really
know, as we are looking for a particular profile, and if it doesn’t have
the skills we require, we say he is not a good programmer and he
doesn’t get hired.
That happened very recently, some colleague was interviewing this
Computer Science PhD who didn’t answer any of this questions, and so he
was rejected as he was no good at all. But I ended up wondering. If he’s
got a PhD he needs to be good right?. Maybe he is just good at
different things and not at what we are looking for.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Mark Unknown replied on Thu, 2013/02/14 - 11:36pm
"If he’s got a PhD he needs to be good right?" No.
Lund Wolfe replied on Sun, 2013/02/17 - 4:41am
I'd be wary of a programmer who didn't have a strong bias between two languages, like Java and Ruby. You may be hiring a jack-of-all-trades, polyglot programmer with no passion. Based on your current programmers' preferences and skill sets you may be able to hire a programmer with experience in both but a bias for what you really need. Even if they do appreciate multiple languages, many programmers, like myself, don't like the frequent context switch between them.
A BSCS or even a two year degree is useful because it does imply some serious programming, and exposure to the basics, like data structures and algorithms. Education at any level can easily give you a false positive, though. Rely on the interview. Intelligence and ability are good, but you only care about how their ability matches your needs. The "best" programmer is the best fit.