My company organized a "hackathon" for engineers. We had 5 hours to build a nontrivial web application. People, who didn't have any ideas of what to build, were given a topic, and the topic of this hackathon was "Build a web-based RSS reader to replace Google reader". After 5 straight hours of coding, there were 8 people ready to present about their products. Minh's weird PyRSSReader was the most completed, production-ready RSS reader. Though the result still didn't present yet, I thought he would finished in the first place.
To me, what did I build? At first, I thought that a RSS reader was fine but sounded uncool, and due to my temptation to solve a "real-world" problem, I gave up the RSS reader and followed my own idea. I tried to build a web-based log-grepping tool. The web frontend was built in Flask framework. The api backend was built based on a half-baked select server. The system ran smoothly and I thought of presenting my result to get 50k Yen but the app broke in the halfway and I had to cancel my presentation. What a pity.
Though I didn't finish my app in time, I still gain a lot from this time hackathon.
Firstly, I realized that I wasn't as skillful as I've thought. I even couldn't use python (my favorite language ever) fluently. I managed to build the backend system using gevents library but didn't know how to code in gevents correctly. The system also had hidden bugs that I didn't discovered until the last time. This means I'm still inexperienced with building such a distributed systems.
Secondly, I learnt the hard way that building a distributed system is in fact more difficult than one can imagine. I was messed up with several ways to implement polling mechanisms and didn't know which one is good. I switched around several libraries to find a solution but didn't find any possible result. My system in fact returned expected results but it had serious bugs which need to deal with carefully. I realized that I totally lacked of patterns to organize such systems. From this lesson, I thought that I should dive into zeromq books more carefully.
Finally, I realized that I lacked imaginations. The system I thought of wasn't as cool as I've imagined. It's unpractical and crappy. The source code worked but it didn't need to be such complex. To create a better product means to have a more vivid imagination.
The hackathon was a fail to me but I learnt a lot from it. It helps me identify my weak points, as well as indirectly shows me knowledge I'm lacking of. It also proves me that I'm totally inexperienced and I should build several more applications to gain practical experiences.