I had an advertisement pop across my Facebook wall the other day called TripleByte.
I was bored so I clicked through, set up an account, and started doing a mini quiz / application / random dart throw into the abyss. The first part is a technical quiz. Multiple choice tests about application designs, modern web applications, and the like. I must have done alright on that because I moved along to the coding section.
It's been 6 years or so since I had an in depth technical interview so writing code for this was intimidating, regardless as to whether or not I felt like I was actually interviewing.
The first problem threw me on a bit of a loop. I had learned about the concept in dynamic programming back in school, but really haven't touched it in industry since. For academic integrity for TripleByte, I'll not dive into details however it's a bit of a play on edit distances between two words. It was really cool and I got to go back and investigate and teach myself after the fact, but at that point in time I failed the implementation miserably. The other algorithms weren't all that even then I kind of ignored the clock and let one or two expire by accident.
Even if you're not actively interviewing for a job, it's a neat service to freshen yourself to the experience. It was really sobering to realize how awful I was with thinking up algorithms on the spot! It's not even that I can't (I'll blame it slightly on an off day) however I realize now that I have such a dependence on libraries to accomplish menial tasks that I'm not really versed at writing optimized algorithms anymore.
After getting a very polite rejection letter from TripleByte I decided that I should probably brush up on my design skills and started rummaging the internet for some sites. I started doing the free exercises on CoderByte (think they're related? I didn't investigate TBH) and RIPPED through the first dozen or so.
Then the Correct Path algorithm threw me on a loop. Not because it's difficult, but just because I couldn't think of how to code it! After pondering a super elegant solution, I figured that I could just brute force all the ?'s for ?^4 possible alternate solutions, check it out by running instructions against a 5x5 grid and should you revisit the same cell twice, then you'd fail and start the next iteration. Continue until you find the best possible solution.
Is it elegant? Nah, Is it efficient? Probably not. I could think of an O(n^2) ish solution I believe. However for the life of me, for whatever reason, I just couldn't turn my thought process into an executable block of code! It was a tad embarrassing.
Long story short, I'm glad I did it, and I'm taking that smack in the face as a learning experience. Every so often bring yourself back to basics and remind yourself of your roots. Eventually you may need to build from scratch and if you've forgotten how to code your thoughts, you could be dead in the water.
Be sure to check out my GitHub in the future for implementations. I welcome discussions on the code :)