I thought the same thing, 35 times...
HN user
gvickers
Communicating sequential processes
The most difficult project I have solved (just finishing up the implementation) is developing a monitoring solution for a bunch of legacy telephone PBX's.
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.
As am I
Thats a bad argument. Pickup an imperative language (python), learn a function language (Clojure), and you pretty much have your basis covered with whatever the future throws at you.
http://functionaljobs.com/ seems to have a few postings. It is strange that there seems to be a huge desire for Clojure programmers but I have seen very little in the way of wanted adds.
Rich Hickey - Simple Made Easy http://www.infoq.com/presentations/Simple-Made-Easy
Changed how I think about a lot of stuff, made my design process a lot more rigorous, and my projects more successful.
I've been searching for something like that for a while now. A metrics web framework that consumes and renders json/edn would be interesting.
You would be surprised how easy it is! Often when new to a language, especially if it crosses paradigms, contributing to an existing project is difficult. Wrapping another library that may be obscure or niche allows you the freedom to fail and learn from your mistakes.
Unless there are significant differences in the way a web framework is structured (i.e. Pedestal for Clojure), I find that making a web app doesn't really contribute much to learning the intricacies of the language.
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.
About two years
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.
Yea, Eve online had me for a while. It also had the strange effect of making all other games un-enjoyable for me. Eve is a true min/max game, where 2% of something often makes a huge difference. The desire to maximize the efficiency of everything I did carried over to other games and even aspects of my life.
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.
Yes
Lets you get around the GIL (Global Interpreter Lock), basically gives python lightweight threads (greenlets).
Using mutable data structures is pretty easy in clojure, I'm going to dig around and see how they handle this.
It has been said time and time again, Clojure is suitable for anything that Java is suitable for. Clojurescript is extremely similar, so much so that you can expect most lib's to be trivially refactored between CLJS/ClJ.
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.
I used to be in the exact same position. Switching between different languages, paradigms, frameworks helps immensely in narrowing down you're area of interest. I spent a significant amount of time playing with python, tried thinking "pythonically" and using it as my side-project language. But after about a year I never got comfortable, maybe it was the mature community surrounding the language or its opinionated nature.
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.
The American Dream is not "work hard and you will be successful", the American Dream is "Work hard at something people are willing to pay you to do and you will be successful".
How is this relevant to HN?
They were mined
Very impressive, I am glad I started studying clojure earlier this summer, I feel it will be a powerful tool in years to come. Currently working on a Cljs life simulation engine (flora, fauna, think Rich Hickeys Ant Colony demo)
I didnt understand the point of your website until I read the comments section. Perhaps post something describing what your site does in clear detail.
Interesting but as accurate as pissing in the wind
How would just the area around the rocks freeze? Why doesent this happen in more places if this is the case?
I am excited to see how this will change gaming. Traveling and moving with become first class citizens when it comes to the difficulty aspect of a game. Imagine multiplayer, where people's differences outside the game come into play inside the game like tactics, speed, agility...
You have weak and dynamic typing confused.