3/21/2011

03-21-11 - Slow Coder

I'm doing the cross platform build script for my RAD library, and I am SO FUCKING SLOW at it. Somebody else could have done it in one day and it's taking me a week.

It reminds me that in some of my less successful job interviews, I tried to be honest about my strengths and weaknesses. I said something along the lines of "if you give me interesting technical work, I'm better than almost anyone in the world, but if you give me boring wiring work, I'm very ordinary, or maybe even worse than ordinary". I didn't get those jobs.

Job interviewing is one of those scenarios where honesty is not rewarded. Employers might give lip service to trying to find out what an employee's really like, but the fact is they are much more likely to hire someone who just says "I'm great at everything" and answers "what is your weakness" with one of those answers like "my greatest weakness is I spend too many hours at work".

It's sort of like the early phase of dating. If you are forthcoming and actually confess any of your flaws, the employer/date is like "eww yuck, if they admit that, they must have something really bad actually wrong with them". You might think it's great to get the truth out in the open right away, see if you are compatible, but all the other person sees is "candidate A has confessed no weaknesses and candidate B has said he has a fear of intimacy and might be randomly emotionally cold to me at times, and that was a really weird thing to say at a job interview".

Furthermore, it's sort of just a faux pas. It's like talking about masturbation around your parents. It's too much sharing with someone you aren't close with yet. All the people who understand the social code of how you're supposed to behave just feel really uncomfortable, like "why the fuck is this guy confessing his honest weaknesses? that is not what you're supposed to do in an interview/date". Job interviews/early dates don't really tell you much deep factual information about a person. There's an obvious code of what you're supposed to say and you just say that. It's really a test of "are you sane enough to say the things you are supposed to in this situation?".

13 comments:

Thatcher Ulrich said...

Nobody is fast at writing cross-platform build scripts. Right?

cbloom said...

Nah, there are people who are like an order of magnitude better than me at grunt work. Actually M Sartain is the most amazing guy I've ever seen at doing the really unpleasant stuff insanely fast. I think for many smart/creative people when they have to do something painful and boring and frustrating they sort of turn off their brain in self defense, because it doesn't hurt so bad if you're running in 60 IQ mode, but MS seems to be able to apply full brain power even to things like figuring out SQL Server problems.

cbloom said...

And it's not like I'm figuring it out from scratch, RAD has a ton of prior art on this topic, so I just have to crib from various others projects that already have this all set up.

nothings said...

Rad uses cdep, which has a much worse learning curve than most such systems, and I'm doubtful that the later ease of change pays for that initial cost.

Worse than that, cdep isn't even cdep. Much of the build system is actually written in cdep itself, which makes it impossibly opaque to decipher how it works and what it does.

Thatcher Ulrich said...

Do you guys ship source, or is cdep only used internally?

ryg said...

"Rad uses cdep, which has a much worse learning curve than most such systems, and I'm doubtful that the later ease of change pays for that initial cost."
What ease of change would that be?

Adding new files is easy, but that's basically true for everything except maybe Makefiles without some auto-dependency mechanism.

But if you want to do something even very slightly more complicated than that, it gets ugly really fast. Like removing "-ffast-math" from the compiler settings for one file. Actually, changing any setting for just one file is either really hard, or really obscure, or most likely both.

castano said...

SET_SOURCE_FILES_PROPERTIES(${file} PROPERTIES COMPILE_FLAGS -ffast-math)

Yay cmake!

nothings said...

What ease of change would that be?

Ease of adding new platforms and new projects/executables/whatever.

But yeah, I was mostly just trying to be polite.

cbloom said...

I don't really think cdep shares any of the blame, I would be just as slow with "make". I've always hated make.

IMO the right build system for coders is *code*. Give me some simple functions in C and let me write my build script in C. I despise all scripting language.

castano said...

but then you need a build system for your build system!

Thatcher Ulrich said...

My toy build system is intended to be comprehensible c++ and bootstraps itself with a batch file. I suppose you could write your project config in c++ though I didn't think about that, instead I added the typical crappy scripting/config language. Tulrich.com/geekstuff/dumbuild/

So cbloom's idea is not so crazy -- say the build engine is a static lib, and the build configuration is some c++ file you wrote. The build batch/bash script compiles your config file, links with the engine, and invokes it. Link time is probably the long pole.

Yann said...

This is so fucking right. Honesty Never pays with Human Resource people.

Todd said...

I wish I learned that expressing my weaknesses is worthless in an interview early on.

I eventually figured it out though.

old rants