We always thought we worked with a bunch of smart people here at CNET, but now we have actual proof. Matthew McEachen, a senior software engineer based in our San Francisco office, won the Coding Challenge at the recent JavaOne conference. We got a few minutes from him recently to answer some questions about his accomplishment.
Q: Tell us a little bit about this Coding Challenge—what was the exact challenge?
A: In the coding phase, you get an hour to solve two problems. The first problem was 350 points, and involved querying a Web service to determine the closest restaurant to a given location with a certain set of menu choices.
The second question was 1,000 points, also a Web service problem. Given a 10-by-10 city grid, determine the fastest route between two points. The Web service would only provide the travel time to pass through a single requested city block. No one finished that problem.
After the hour of coding, there's the challenge phase where you get to look at your competitor's solutions. You can challenge their solution with some set of input you think will make their code break. If their code does indeed fail, you get 50 points and you uncover their flawed solution, so they get 0 points. If their code passes your challenge, you lose 50 points.
Q: What tools/references did you get to use?
A: You have to write your code directly into their TopCoder Arena Applet. You can paste code into their text area, but you can't copy out of it. They also give you a browser with unrestricted access to the Internet.
I normally code with IntelliJ IDEA and Emacs, but the computers at the competition were so slow that using either tool wasn't really an option. So I just typed straight into the text area.
Q: The score between you and the second-place guy looks pretty close. What was it about your program that earned it the extra points to win?
A: I submitted my solution faster than he did. Actually, the two guys that got zero points both finished faster than I did, but neither of their solutions passed the unit tests.
Q: The TopCoder site lists a number of possible grand prizes. Which one did you actually win?
A: Every day's winner got all of the grand prizes. It's certainly a lot of goodies!
Q: You're obviously good at Java, but do you actually like programming in Java or is there some other language you secretly prefer? Are you one of those closet PHP programmers?
A: Be suspicious of any programmer that says "language X is the best." No tool is applicable for every task.
I've done some PHP. For small one-off tasks, shell and Perl scripts can make a lot more sense than to wait for a JVM to spin up.For anything non-trivial, though, using Java opens up a very rich environment to get your work done. Modern IDEs, like IDEA, let you code at a much higher level than simple text editors—you worry about the interesting bits, and the tool automates the drudgery.
Q: Drunk with success, what's the next challenge you're looking to enter? Run a marathon? Climb Mount Everest?
A: Heh, sign me up for the marathon. But if I get to beta with my personal side project, PhotoStructure, I'll be just as happy.
Q: What advice would you have for anybody thinking of entering one of these flash-programming contests?
A: The TopCoder folks not only give really good questions, with tons of sample inputs and expected outputs, but they make it easy to run those inputs against your solution in their applet before you submit. Even if you think your solution is correct, at least run all of the canned tests. There is no partial-credit score if your solution is not completely correct.
Also, if you know your solution is not correct, don't bother submitting it on the off-chance the geek gods will smile upon you. Those gods are more than happy to spite you, and you risk a competitor challenging your solution. They get 50 points due to your excess optimism.