So you’ve decided to enter the Clojure Cup. Awesome.
The organizers have asked me to write up some advice. I’ll give the opinionated nerd tips first:
- Stuart Sierra’s Clojure workflow
lein midje :autotest
- Note that 95% of a well-factored ClojureScript app will run happily inside of a plain JVM Clojure REPL
- Note that contest sponsor Digital Ocean’s servers are virtualized, meaning that you can spin one up from a clean image in about 20 seconds. If you ever SSH into a server and type in more than one command, you are doing it wrong. If you ever SSH into a server for a second time, you are doing it wrong.
- New Relic works great with embedded Jetty and will take you only 5 minutes to setup; do it.
That’s all tactical stuff, though. To take home the Clojure Cup, you’ll need to win the hearts and minds of the judges. I can’t speak for the others, but I can publicly declare my own judging criteria: my top entries will be those that explicitly define a problem and potential solutions in a broader context.
Don’t just write a library README that says, “Here’s Foo, it takes an X and returns a Y”. Provide some context: “I looked at Bar and Baz (which do X), but I needed something that also does Y and Z.” Consider drawing a picture to explain how things work at a high level. If you’ve actually thought about your problem, it should be easy to say: “Foo assumes that…” and “You shouldn’t use Foo if…”. Now, two days isn’t very much time—you might be tempted to skip the documentation and dive straight into the code. As a judge, I would rather see great design-level documentation with little-to-no code than running code with no context or documentation.
As for the context of Foo itself, that’s not for me to judge. I’d love to see anything:
- I don’t know a lot about frontend development, so I wanted to see how many different ways I could draw a circle in the browser using Clojure.
- I love readable Verbal Expressions and want to implement a library for Clojure/ClojureScript that can express these 5 gnarly expressions from my day job codebase
- I think the Plan 9 guys were onto something with content-addressed archival storage and I want to wire together a minimal Clojure proof of concept demonstrating X, Y, and Z.
- I want to speak the language of the system on my laptop, but it’s not going to happen if every Clojure JVM process wants 500 MB—I’m going to outline several approaches to reducing memory consumption, put together a benchmark suite, and shoot for a Clojure Ring server in less than 10 MB.
- I’m tired of waiting for lazy hipster Clojurists to cut releases; I’m going to implement a fake Maven repository that dynamically serves up artifacts like
["github.lynaghk.zmq-async" "sha123-SNAPSHOT"]
.
Finally, take heed of this sentence from the rules:
You can, of course, work on the concept for your application before the competition starts, including paper and / or digital mockups of the user interface
Coding isn’t the hard part, it’s thinking; luckily, you’ve got the better part of a month. Good luck!
–kevin