?

Log in

Previous Entry | Next Entry

Why Can't We Have REAL Coders?

I have the dubious pleasure of acting as more and more of the "Consultant" it says on my job description these days. Due to policies at a certain client, actual software development is all supposed to take place elsewhere, with the cheapest developers money can buy, rather than getting people who know what they're doing to do the job in a fifth of the time.

Now, wearing my contractor hat, this actually works out nicely for me. If there's a chunk of development that would take me 10 days, I now spend 5 days writing the spec for these drones and roughly 20 days "consulting" to explain how to do the damn thing, telling them how to do basic tasks like testing and debugging, and then working out what they've done wrong once it makes it into a real test environment. Makes the entire process more profitable to me (although it does suggest that this approach may be a false economy to my client... ho hum)

However, there is an emotional downside. I'm a coder by choice. If I wasn't being paid to do it, I'd be coding stuff anyway. I've also been doing it for ... eek, over two decades. So, I am both experienced, and a grumpy old man. I can, and routinely do, find fault with just about any other coder because nobody ever does things precisely the way I would. I know this, and accept it's a personal flaw, and usually will let things slide as long as they work.

My current "consulting", however, is reaching new depths. We have a system which reads in a (potentially binary) file, performs a few byte translations, and ftps the result to another machine. Pretty basic stuff, that should be bread and butter stuff to any half-decent coder.

The work, however, is done in C#, by someone who has clearly only ever been trained in C# and has no real grasp of how things actually run underneath all the frippery of DotNet. Consider, then, this email conversation which has taken place over the course of some 3 weeks:

Drone: We have some data corruption; also with very large files the process is very slow.
Me: Oh dear. are you by any chance reading the file in as text, rather than binary?
Drone: Yes. we will fix this.
Drone (some time later): The processing is still very slow - it seems to be when we're converting the string back to binary data to ftp
Me: Err... why the hell are you having to convert anything? Didn't I tell you to read it in as binary data?
Drone: Yes, we do. Then we convert it to string, do the translation, and convert it back.
Me: Well stop it. Not only is that horribly inefficient, but you're probably getting all sorts of stupid implicit conversions from DotNet. Keep binary data as binary, FFS.
Drone: Yes. we will do this.
Drone (some time later): We are still having data corruption.
Me: Fine. Send me the code for a change, or I'll refuse to help any more.
Me (after reading something which, charitably, we shall call "code"): So, still converting to string then? How else can I say this - it's binary data, keep it as binary data. Stop making things more complicated than they are.
Drone: But in DotNet there's no easy way to find and replace in a byte array. If I convert it to a string I can just use the replace() function.
Me: (bangs my head against the desk)

Now I have to find a polite way of saying "well what the f$*k do you think is happening when you call that replace function? You don't think that maybe, just maybe, DotNet has to loop through the damn string anyway? How the hell can you think that just because there's a function call, data processing a string will be any faster than data processing a byte array?

This just confirms to me that all programmers should, at a bare minimum, be forced to use nothing but C for the first 5 years of their career - preferably with a smattering of assembler. Bringing people up in high level "frameworks" apparently creates programmers with cotton wool for brains.

Tags:

Comments

( 4 comments — Leave a comment )
nmg
Sep. 24th, 2009 09:33 am (UTC)
This just confirms to me that all programmers should, at a bare minimum, be forced to use nothing but C for the first 5 years of their career - preferably with a smattering of assembler. Bringing people up in high level "frameworks" apparently creates programmers with cotton wool for brains.

Unfortunately, most universities teach students programming in high-level languages (typically Java or C#) which come ready supplied with libraries of common data structures and data manipulation functions.

I'm firmly of the belief that it's dangerous to encourage students to use prepackaged algorithms, because they end up with very little idea of the fundamental complexity of those algorithms.
ahnlak
Sep. 24th, 2009 10:05 am (UTC)
I am, of course, conscious of the fact that the generation before me probably rants at idiots only trained in C, who don't properly appreciate the minutiae of CPU registers and clock cycles...

(although, in my defence, I *did* cut my coding teeth counting clock cycles on the C64...)
marklesuk
Sep. 24th, 2009 01:29 pm (UTC)
Surely you you write a ByteArray class that handles byte data properly and for instance allows arrays to be concatenated, split, words, dwords (both big and little endian) and strings read from / inserted into at will ?

Mark (who may just have had to write such a class for handling binary data for phone comms)
marklesuk
Sep. 24th, 2009 01:38 pm (UTC)
And

The software engineering course that I did (getting on for 20 years ago!!!!!!!) also had a assembly component, basic hardware design, cpu architecture with the logic being understanding how hardware works will produce better software.

Mark
( 4 comments — Leave a comment )