

Job Description as runnable python UnitTest - smn
http://github.com/praekelt/careers/blob/master/software_engineer.py

======
mahmud
Heh, job teasers are getting simpler and simpler. I remember in the late 90s
they were "compile with GNU/Sun/SGI/HP toolchain, call the phone number that
gets printed when you build on a big/small-endian machine".

The early ones were funky C compiler weirdnesses that exploited word size,
endianness, binary format and other machine quirks. This one is practically
readable.

~~~
ciupicri

        print "2. Fork out this code, suggest improvements and submit those" [L141]
    

So fork the code and suggest something funkier.

[L141]
[http://github.com/praekelt/careers/blob/master/software_engi...](http://github.com/praekelt/careers/blob/master/software_engineer.py#L141)

~~~
craigts
print("2. Fork out this code, suggest improvements and submit those")

There fixed it for you :)

~~~
ciupicri
They might be using RHEL (Red Hat Enterprise Linux) which comes with Python
2.4 and in 2.4 you can't use print as a function.

LE: python 2.5 -> 2.4 (bconway was right)

~~~
bconway
Two corrections:

A.) RHEL 5.x (by default) comes with Python 2.4, not 2.5.

B.) Yes you can. It is required in 3.x, though.

~~~
kingkilr
Well you can't use it as a function. You can however combine the parsing of
the "print" keyword, and the "(" and ")" taking precedence around the string
to form KEYWORD STRING that looks a hell of a lot like a function call though.

------
njharman
1) I'm annoyed I can't enjoy looking at clouds (which I really do) and pass
their test.

2) I'm annoyed by companies who think working for them is some great gift to
me. Various wordings in this test exuded that attitude.

~~~
smn
2 - wasn't intentional, what wordings exude that attitude in your opinion?

~~~
njharman
I went back to find specific things for you and couldn't. The idea of "tricky"
"test" is off putting. Making me jump through hoops just for the "honor" of
being a possible candidate.

OTOH, I could have just been a bad mood that day.

------
eitally
I appreciate the concept but it's too readable. If you're going to do
something like this as an actual test, why not funkify it a little bit to
challenge the candidates?

Still, great idea! Coming up next -- Job Description as an infographic!

~~~
smn
Yeah, truth in that. I'm needing to write a couple more like this, this is the
first one. Next one will be an job description for a DB guy with interest in
databases in the broadest sense. Not sure how to go about that one yet.

I like the infographic idea, any other suggestions?

~~~
mahmud
I am sure eitally was being sarcastic.

Also, why are you attempting to recruit people who are interested in a subject
"in the broadest sense", as opposed to people who live and breath the damn
thing?

Recruiting people of marginal interest and passing familiarity sounds like a
recipe for mediocrity, imo.

~~~
smn
Maybe my bad choice of words. In the "broadest sense" I meant that we're
looking for a DB person who's interested in both relational DBs as well as the
complete other side of the spectrum.

Still, I think a tongue in cheek infographic could be pretty cool as a job
description. True, maybe not so much for databases.

------
famousactress
(sorry, gut reaction). This feels like a company who wants to _seem like_ a
company I want to work for.

------
drv
Some of these tests seem backwards:

"10 years software development experience." is translated as

    
    
       assert candidate.results['started_programming'] <= years_ago(10)
    

That reads like "10 years or less" rather than "10 years or more"; I'd be wary
of applying to a place that can't even get that right (although maybe your
first job can be fixing their ad).

Edit: Reading more closely, perhaps years_ago(10) returns the numeric year
that was 10 years ago now, and 'started_programming' is an absolute year as
well, in which case this test makes more sense. However, it's not intuitive to
read this way...

------
jimbokun
Python scope still freaks me out.

It's weird to me that the "candidate" referenced by FoundationEngineerTestCase
is the same candidate instantiated at the bottom of the file, without ever
being explicitly passed into an instance of that class. I would have expected:

    
    
        test_program = CandidateTestProgram(candidate)
    

Furthermore, how is CandidateTestProgram connected to
FoundationEngineerTestCase? Does it do a global search for subclasses of
unittest.TestCase, then instantiate and execute them?

~~~
digitallogic
Referencing the 'candidate' variable from within the test case is not a good
approach as it's referencing a module global instead of an attribute.
Additionally, it only exists when the module is executed directly, so if it's
imported and run in a different manner a name error will result for every test
that references.

As for the TestProgram, it's inheriting routines from the base class in the
unittest module that do introspection to find all test fixtures.

------
pdelgallego
It would be better if you just write the test, so the candidate in order to
apply should fork, write a Candidate class and pull a request.

BTW the position is in Cape Town?

~~~
smn
not necessarily, but would be nice.

