Print

Print


On Fri, 26 Mar 2010, Doran, Michael D wrote:

>> As a first language, you want something that let's you Get Stuff Done
>> with a minimum of fuss...
>
> If you are getting started and if you are not planning on being a 
> full-time programmer, then you want to be looking at the high-level 
> languages as Mike suggests: "the strong candidates include Perl, Python, 
> arguably PHP and my own favourite, Ruby..."

Even *if* you are looking to be a full-time programmer, I'd recommend most 
people do stuff in higher-level languages.

That earlier development effort that I mentioned, the majority of their 
work is being done in C -- the system needs to go live in ~30 days, and 
they're *still* finding memory leaks (signs of poor garbage collection), 
string and integer overflows (one of the joys of strict typing), etc.

Yes, I've done a fair bit of C, and even a little assembler -- and it's 
fine, if you really, really, need the speed boost.  (and some people would 
argue that this might be a case where they *do* need it, but it'd have 
been more cost-effective to throw hardware at it, rather than a 10 person 
team for 2-3 years, even with their 100-node cluster; or better yet, wait 
to see what happens under real load, and optimize then, rather than 
building a system with no requirements, and no testing of simulated data 
flows until 2 months before launch)

I've had my share of problems in Perl, where it'd attempt to assume what I 
mean has led to problems.  (specifically, SOAP::Lite's attempt at guessing 
that a string full of numbers was an integer, not a string, and that a URL 
should be marked as such, and not a string ... once in a while, I'll hit 
one of the edge cases with braces where you have to force it as a block or 
a hash)

... but those are few and far between compared to the segfaults that I've 
gotten in trying to port their code over to a non-linux system.  (spent 
months on it, as each new version would either not fix the problem, or 
break new things ... it doesn't help they decided to write their own 
configuration and build tools because someone must've read 'recursive make 
considered harmful') ... we finally gave up and just bought new hardware 
for our caching sites, as we had a feeling that we'd have to keep going 
through these headaches every new update through the life of the mission.

... sorry, went off on a tangent again.

Anyway, the point is -- even us full-time programmers would rather be 
making new and interesting things, rather than trying to work around 
problems with our tools.  If I'm painting a room, the roller gets the job 
done fast, and I can deal with a brush for the corners and edges -- 
there's no reason to do the whole thing with a brush, and it'd just look 
like crap if I tried doing the whole thing with a roller.

Take the same approach in programming -- if you can do 90% of the work 
really fast and really well in one language, and have to do the other 10% 
in another language, it doesn't mean you need to do the *whole*thing* the 
slow way.

I believe that all of the 'higher level' languages support some form of 
linking to C code, should you need it.  (although, you don't always need 
it ... after dealing with scientists insisting that I use their libraries, 
and trying to get it compiled as an object so I could call it as a 
postgres function, I finally just gave up and hard-coded the table in 
PGPLSQL ... I'll just have to update it every few years as leap-seconds 
are added to UTC)

...crap, tangent again.

okay, back to the hell of debugging crappy code with off-by-one errors and 
race conditions due to lack of locking, and no error checking to see if 
processes completed.

-Joe