Hello, everyone: 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 /usr/dict/words) * 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. -- Sasha Pachev AskSasha Linux Consulting http://www.asksasha.com Running Blog http://sasha.fastrunningblog.com /* PLUG: http://plug.org, #utah on irc.freenode.net Unsubscribe: http://plug.org/mailman/options/plug Don't fear the penguin. */
