Looking for Programmers
sasha at asksasha.com
Fri Mar 10 14:20:07 MST 2006
One of my clients is looking to hire programmers, and has asked me to fish some
out. So I am throwing out a bait, hopefully some good fish will take a bite.
The job will be programming mostly in PHP on Linux with Apache and MySQL. The
hours are flexible and some work (actually quite a bit) can be done from home.
The ideal candidate should be a versatile programmer that can work
independently, solve challenging problems, know how to learn what he does not
know, and have an overall solid understanding of computing. I am not the one to
decide on the compensation, but I would venture to say that the right candidate
will be compensated accordingly.
Instead of asking for a degree or reading resumes, I am going to throw out a
simple test which gives you a lot of freedom, but beware - you will be judged on
how well you use it. If you are not interested in the job, but just want to have
fun feel free to submit your solution. I do not mind even if you post it
publicly for comments or educational purposes. Anybody who would want to cheat
on this test to get the job is plain crazy - if you feel you need to cheat, I
will guarantee you will not enjoy the job at all. No amount of money will be
enough to compensate for your misery.
Here is the test:
* locate a dictionary of English words ( many Linux systems have it in
* write a program in the language of your choice that will output a list of
unique words and their counts found in an arbitrary file (given as an argument
to your program) that are also present in the English dictionary. Write two
versions of the program: one that requires the minimum development time on your
part, and one that executes as fast as possible. Benchmark both versions.
* suppose the only tool you were allowed to use to solve the above problem was
MySQL. You could not use any of the programming languages or the shell - only
MySQL command line client connected to a MySQL server. Could you do it?
You are allowed to use the Internet, books, and whatsoever resource is available
to you. You are even allowed to consult others. However, the bulk of the work
should be yours, and you should give your sources proper credit. If you find
something ambiguous in the definition of the problem (eg. what exactly is a
word, are the words case-sensitive, is there a limit on the length of the word,
etc), just make a reasonable decision and stick with it.
Submitted solutions must be complete, and should run on most Linux systems
without the need to install a whole lot of extra stuff. In other words, I do not
mind installing a package or two to benchmark your solution, but I am not going
to spend a day upgrading my box just so I could test your code. You must clearly
state the system requirements for your solution and if you choose to push the
bleeding edge, do so sparingly and be prepared to defend it when challenged (eg.
the new version of language/library X provides the functionality that has
permitted me solve the problem with half the amount of code, and it executes
twice as fast). You must also provide clear usage instructions for your solutions.
I will naturally accept no excuses for unfinished low-development time versions.
However, if you say - "here is my low-grade high-performance solution, and here
is how I would do high-grade if I had a day, but I do not have a day", and with
that somehow demonstrate that you indeed have the ability to carry out
high-grade to completion given enough time, this will be taken into consideration.
AskSasha Linux Consulting
More information about the PLUG