27 karma · joined May 31, 2013
Essentially, the bureaucratic overhead for getting a bunch of companies to open their firewalls to us was unfeasible. Long story short, I ended up hijacking the SSL/VPN generated by a running JVM to forward a bunch of SNMP/OSSI-polling traffic to our api.
At the end, after implementing the above, I found out about a service port for outgoing only traffic offered to business partners. That was much easier to use, only requiring nginx to split off a certain sub-path of SSL traffic + business partner status.
I am still proud of the original hack, although brittle and ugly it was very exciting to get working.
Changed how I think about a lot of stuff, made my design process a lot more rigorous, and my projects more successful.
I like to try out a languages interesting features by wrapping an existing library in an idiomatic style suitable for that language. For example my most recent work is attempting a wrapper around SNMP4j in Clojure, foregoing the OO style for a more data-centric approach.
I'm serious, two years of an hour or two a day (at least!) will give you enough foundation to really enjoy it. You have to start with tutorial, use the sample projects you build and change them drastically. Break them, improve them, talk to people about them.
The issue that is most common is the starting momentum is difficult. There are some concepts that are dead simple in programming, by their nature they are composable. The composition of simple concepts form virtually all the higher level concepts. It's not so much learning to code as it is learning to think in a certain way.
Most games stop being fun when you make a spreadsheet for them, Eve is one of those few exceptions. Right around the time I stopped playing Eve, I started finding it difficult to play games just for fun without trying to min/max every aspect to gain an advantage. I guess I was really addicted to the meta-game rather than the game itself.
There are some issues you are going to face, there's no way around them. First the tooling, it is beautiful in it's own right but takes a while to get used to. Leiningen is the preferred build tool, it cleanly handles almost everything for you but learning it seems to the beginner like just another thing preventing them from getting productive. You will miss your debugger for a while, until you realize having a debugger allowed you to write confusing, messy code that could be funged into working. There are many editors available, but when switching to clojure I decided to also learn Emacs 24 and now use it as my primary editor for every language/document.
Second is productivity, coming from php/js you will simply not have the background to lay down code quickly, let alone for-see potential issues. It took me approx. 5 months of study, every single day, to reach a comfortable point in the language where I could pump out Clojure code at a faster rate than C# code. I'm not even sure if it is faster or just my Clojure code doesn't have as many issues or is architecturally more sound. Why I feel more productive is a mixmash of things that I could probably write a book about. It's also very strange doing java interop with Clojure constructs. I often find myself getting caught up on clojure's lazyness or lack of types. Once you get a handle on it though it is extremely simple and my preferred way to write java code.
Lastly, I seem to have poisoned my brain a bit with these ideas, I approach almost every problem now as a functional one, yielding crappy looking C# code. I often have to take a step back, stop trying to make things fit into a functional category that are clearly OO.
I am risking sounding like an evangelical but Clojure has changed every aspect of programming for me, and made it fun again. I find getting in "the zone" is much easier when things seem to spookily just work. Looking at problems through the Clojure lens more often than not resolves in a simple, composable solution.
Anyway, I distinctly remember learning about Clojure, and being completely enamored with the ideas Rich Hickey talked about. I would still get bored of doing 4clojure problems, but instead of abandoning them for a different subject entirely I would watch a ClojureConj video, read a blog on a Clojure library, or even just practice some of the tooling like emacs key-chords.
I believe the learning process is better when it is erratic, both for you're own sanity and the overall completeness of a knowledge domain you can acquire after jumping around from topic to topic.
5 months in, I am trying to push Clojure/Cljs ideas into the C# shop I work at, and upholding my promise to do SOMETHING regarding the language or tooling every night.
Our brains seem to work best this way, storing an idea in our subconscious after rigorous study allows us to process it in the background. I find myself frequently daydreaming about language constructs or architectural designs.