Yesterday at 6 PM the final project in my constraint programming class was due, officially marking the end of my first term at Uppsala, and let me tell you, it came right down to the wire. I hadn't done any real work on the project before this week (beyond choosing which of two problems I wanted to do, reading over that, and thinking about how I might solve it), but I had the whole week to work on it, so I wasn't too worried. The week progressed about like you'd expect:
Sunday, afternoon: Started coding.
Monday, morning: The bulk of the coding is finished, leaving just a handful of small bugs to work out.
Wednesday, approx. 2 AM: One of the small bugs has proved to be completely intractable, and possibly fatal to the whole approach.
Wednesday, morning: Start the day by abandoning problem 1 in favor of the now much more appealing problem 2.
Wednesday, afternoon: Problem 2, attempt #3, mostly finished, leaving just a handful of small, but horrifyingly familiar, bugs to work out.
Wednesday, midnight: Yup, nearly the same intractable bug. Suspicion that I have a deep and abiding misunderstanding of the basic tenets of the problem begins to take hold. Urgent e-mail sent to professor.
Thursday, morning: Professor replies with encouraging e-mail hinting at solution. Further reflection reveals that I don't see what he's getting at, so it's off to his office.
Thursday, noon: Professor has agreed that bug is probably intractable, but wonders why I haven't taken the approach suggested in e-mail, which (a) completely bypasses intractable bug, and (b) is both easier to write and more promising from an efficiency standpoint. After listening to explanation, I am forced to agree.
Thursday, 3 PM: Armed with new approach, attempt #4 is much simpler, and materializes in mere hours. Test run #1 starts.
Thursday, 7 PM: Test run #1 making progress, but still running. Long solution time is theoretically acceptable, but need to run another dozen tests before deadline, now less than 24 hours away. Spouse suggests running tests on her currently idle and oh-so-much-more-powerful computer at work. Forehead slapped and "Doh!" uttered, it's off to spouse's office to start an automated run of tests #1–8, while tests #9–12 run at home.
Friday, 8 AM: Tests #9 and 10 complete, but with distressing results which imply that tests #1–8 should have been structured differently.
Friday, 9 AM: As feared, test #1 not complete. Now forced to wonder why tests #1–8 were left to run in sequence on one of the more powerful computer's 4 processors, instead of running four at a time. Using results from test #9, new test #1a–8a set up to run in parallel.
Friday, 10 AM: Report writing begins (time to remember how to use LaTeX). Lack of any results makes reporting on testing… vague, at best.
Friday, 5:30 PM: Spouse reports that approximately half of all tests completed, which will have to be enough. Results received by e-mail and hastily written up.
Friday, 5:57 PM: Project submitted online.
Friday, 6:30 PM: Met spouse at local eatery to heave big sigh of relief, and consume Turkish food.
Not my finest project ever, but should be sufficient to get the 12 points out of 20 that are required to pass the course. Meanwhile, grades on the exam were posted, and it turns out I did just fine, so no real worries there. Sure am looking forward to a little time off, though.