On Jul 13, 2005, at 7:16 PM, Michael Halcrow wrote:
On Wed, Jul 13, 2005 at 03:26:29PM -0600, Gabriel Gunderson wrote:
Give me what works and what works well; I'll use it. I'll look at
the other languages for fun but go back to what I know to make
things work.
I have implemented applications in Objective Caml, Ruby, Perl, C++,
Java, and C. I have a working knowledge Lisp and Python. I love coding
in Objective Caml, Lisp, and Ruby, but if, in a real world
mission-critical situation, a client were to come to me and ask me to
implement an application for him, I would likely choose C, because of
my experience and level of confidence with the language. That alone, I
would argue, makes C the best language for the job, if I am on it. I
know 99.9% of the language's primitives (at least for the Gnu C
compiler), I know all the common libraries, I have learned to
discipline myself to use the language right (grammatical correctness,
data structure arrangement, code organization, etc.), I know all of
the standard library routines, I know the common build environments, I
know exactly how the libraries/object files are compiled and linked, I
know where to store the libraries and how to name them, I know how to
debug it at any level necessary, I know how to write cross-platform
code, I know how to manage my memory right (it's like second nature at
this point), and (of course) I know all of the security caveats with
the language. There are more C compilers out there than for any other
language, and they are very mature and stable.
It's wonderful that you're a skilled C programmer, as C is a very
dangerous language in the hands of a non-expert. I would bet that
far more people claim to be experts than really do possess that level
of skill, since we have almost daily reports of security
vulnerabilities in C programs due to buffer overflows and such
things. Alas, we must also work with those who don't even claim to
be experts, and sometimes it's not possible to keep on top of all the
subtle errors they introduce.
Of course, I am a software engineer, not a C engineer, and so I am
expected to be able to adapt to any language to get the job done. If I
had to do something in Java or Perl, I would buckle down and do it,
and I would do a decent job of it. But I would prefer mission-critical
jobs that involved C; it's simply a comfort/confidence thing. A big
part of my job, after all, is to jump into the middle of a block of
someone else's C code and to start fixing things up or extending
functionality.
I'm sure this confidence comes from experience; probably both on the
job and on your own time working on hobby projects. It's not out of
the question that you could reach that same level of comfort and
confidence with another language, but you'd have to spend time with
it. That's part of why we've got user groups, so we can get together
and talk about our hobby projects and keep the interest level up in
ourselves and others in skills we're gaining.
Now if I were working on a brand new project, if the customer
requirements were a little more liberal, if the language made sense
for the project at hand, and if I worked with a group of really open
and flexible engineers on the project, *with at least one Lisp expert
on the team* (very important detail), I might suggest that we give
Lisp a try for the project. There are definitely concerns along the
lines of code maintenance when you go that route though... the long
and short of it is, I think that Lisp is an ideal language, if it
weren't for reality. :-/ To quote Eric Raymond, ``Free markets select
for winning solutions.''
Substitute just about any other language for Lisp there, and most of
it still holds. I won't even claim that Lisp is ideal; just that
it's a good fit for a lot of interesting problems. And that ESR
quote is essentially a tautology, so I'm not sure what you're
suggesting by it. Lisp has been a part of free-market winning
solutions, after all, as has Visual Basic.
--Levi
.===================================.
| This has been a P.L.U.G. mailing. |
| Don't Fear the Penguin. |
| IRC: #utah at irc.freenode.net |
`==================================='