658 karma · joined December 30, 2015
Obscurity actually is a layer of security. The mistake is is when people are dependent upon it.
Discontent would be expressed somewhere, but yah, it's definitely encouraged to escape (no friction!) through Internet discussion.
In nitty gritty terms, programming in Clojure actually feels a lot like programming in Haskell to me, without the heavy type system. Lazy infinite lists, all your FP classics like map, reduce, filter, etc. work exactly like you would expect. But I don't miss having to create a stack of monad transformers in an area of code where I need to mix IO and state or something...and using type synonyms to mask the monstrous Turing-complete type signatures I had to make to describe it... In Clojure, you just put the "dirty" work in its own function, clearly separated from the pure functions (which are the de facto default), and you push them to the boundaries of the system while passing extracted data into pure functions (just like Haskell). If you did anything different, you'd get the stink eye from even the least principled Clojurists. It's just not done. A ball and chain type system is unnecessary.
The lack of (explicit) types has been at the very most a minor nuisance. Occasionally I mistype something or miss a parameter, you're going to see the error pretty quickly in the REPL. If you run or test your code at all, the pedestrian type errors (oh, that was a string not an int) will be wrung out immediately. That benefit of type systems (preventing typos, essentially) has been much, much overstated IMO. Given you're going to be in the REPL a lot with Clojure, you'll be iteratatively developing and running your code constantly, so it's really not an issue. As far as refactoring, I think that's where there is more meaningful benefit. I use Intellij/Cursive IDE, and the refactoring capabilities are good--much like if it were a Java project (and there are hints and such for the typos I mentioned earlier, autocomplete, etc). So, while it is more of a challenge for IDEs, there are some excellent ones that do a pretty bang up job of inferring types for you.
I haven't used Clojure on the job (Java dev by day), but I would have no problem using it for something "real", whereas I never felt anywhere near confident in using Haskell for something outside my own fiddling.
Parentheses? You don't even see them after a short while--as a beginner, you use something like parinfer, you are good to go. That, and like all lisps, you begin to appreciate programming directly in the abstract syntax tree: the language you type and the way it is interpreted aren't disjoint things.
Dynamic typing? Being functional, immutable by default, and data orientated steal the vast majority of the sting from that in my opinion--and leave you with often downplayed advantages. On the last point, "data oriented", to put it succinctly, data itself is first class or the prominent currency among Clojurists, rather than a zoo of abstractions that never quite fit and and all have to be reconciled and made to play with one another (and often the reason you need types everywhere to keep it all straight).
But where types--or validation--are more crucial near the boundaries of the API, there are outside the box solutions like Spec that don't rely on a baked in type system.
The recent keynote by Rich Hickey covers a lot of these points (and far better than me):
The Disappearance of the Universe
Programming:
Effective Java - straight forward pragmatism
Learn You a Haskell for Great Good - took me down the rabbit hole of Haskell, which is just a natural mindbender
I feel like if the front-end dev world is so keen on reinventing itself, it should just go all the way...repackaging HTML/CSS/JS in new and interesting forms and frameworks isn't getting anyone anywhere, IMO. Scorched earth, a new protocol for web applications...don't even call it the web anymore...just put on your CS hats and start over...kill the whole thing with fire.
99% of the people who could claim to have knowledge of all the above in their organization either have a very shallow (read: not useful) knowledge, OR their product itself is simply the gluing together of various DevOps technologies listed, so there is little more to know outside that.
For sure its a lack of careful thinking and consideration of trade offs I'd take any issue with...it sounds like you didnt come to those conclusions out of emotion or a deep yearning for something new.
And then there is survivorship bias. What if by some strange turn of events, ColdFusion had continued to evolve and eaten its respective niche? While I wouldn't condone an attitude of not being open to new things, the ColdFusion stalwarts would look like sages, while people who invested in an upstart technology could well have wasted a lot of time.
The move "backwards" to older, more mature technologies happens often enough, too. Startup uses latest NoSQL thing, and then realizes an old timey SQL database would have saved them a lot of trouble, etc. It cuts both ways.
I get the premise, just trying things and having fun. But I get the impression that in a lot (most?) scenarios this would be a lateral move at best. His last comment about going with Phoenix instead of Rails for new projects, if he's not just being kind, that seems like a major case of throwing out the baby with the bath water.
Goodbye 10 years of experience, knowledge of pitfalls, etc...hello 1 month of promise and years of gotchas and relearnings for small benefit?
I'm just honestly disturbed how much this "issue" seems to resonate with hacker news. I could leave well enough alone, but I had an opinion I wanted to share.