5 ms·
I had the same issue. Then I went back to the roots: Lisp And learned Clojure. You will feel like you know nothing. You will feel handicapped. You will be con
by beders 7y ago
I had the same issue. Then I went back to the roots: Lisp
And learned Clojure.
You will feel like you know nothing.
You will feel handicapped.
You will be confused.
Then, one day, you will understand what simplicity means
and how Clojure's design embraces that more than in any other language I know.
By then you will have embraced the flying-by-your-pants-exploratory style of programming at the REPL.
And don't want to go back anymore.
It's awesome!
- crispinb 7y agoI've been learning it for a couple of weeks. It is humbling as an experienced dev to find something quite straightforward (parens-whining aside, Clojure is a small & simple language), yet not have a clue how to approach problem-solving with it.
- markc 7y agoUse 4Clojure for practice. Talk about humbling! You’ll struggle to write a 20 line abomination and then see some wizard’s beautiful 2 liner that does the same thing. You might spend a long while grokking it, but when you do you’ve added one or more new tools to your Clojure problem solving repertoire.
- crispinb 7y agoExactly my experience. I've dipped into 4Clojure (thanks for the suggestion), and also Exercism as the mentoring is handy. I really enjoy the way you can reach solutions that are pithy without being obscure or artificially terse. It does take me a long time to get there though. It's kicking my arse to be honest. Which is fine, as it means I'm learning - far more enlightening than frustrating.
- reinkaos 7y agoHow do you reconcile this with your day job? Or did you go on to work with Clojure full-time?
- simongray 7y agoI'm not the one you asked, but personally after I learned Clojure I completely joined the Rich Hickey cult and only sought out Clojure/ClojureScript jobs or jobs where I could decide what language to use myself. I'm now on my third one. It obviously limits your pool of available jobs significantly, but I try to keep up with which companies and organisations are using Clojure in my city and so far it hasn't been an issue at all.
- reinkaos 7y agoThanks for sharing your story. At some point I might embark on a similar journey but with Elixir. Side projects are always an option, I guess.
- elamje 7y ago+1 for Clojure making me love programming! You likely are burned out from corporate code because of the huge compile times, complex processes, and generally a ton a of typing. This will mostly go away with Clojure. What you will be left with is significantly smaller code bases, fun with metaprogramming, and instant feedback with no waiting for compilation.
- markc 7y agoMe too. I was bored with 2 decades of C/C++/Java and didn’t like programming any more. Dabbled with Ruby, Python, Groovy and enjoyed them. Discovered Scheme, SICP, and Clojure and never looked back. Beat my head against not having my old problem solving paradigms, but it was fascinating rewiring my brain. It finally clicked and coding has been a joy ever since. The Clojure REPL rocks.
- kleiba 7y agoWhat is the best way to get started with Clojure these days? So much has changed since the early days.
- iLemming 7y agoThe language itself is very stable. There were no breaking changes. You can pick up just any Clojure book (even old one), and probably 98% of it still be very relevant.
- kleiba 7y agoGood to know. I was also interested in the full environment, e.g., IDE's, package management, build chain, etc.
- cutler 7y agoYeah, then you won't be able to get a job anywhere and will puke at the sight of OOP code. Seriously, Clojure is by far my favourite language but with mouths to feed I had to put it down and get serious with JS, Python and Kotlin.
- iLemming 7y agoClojure is still massively helpful to learn, even if it is not the primary language of use. It is guaranteed to make a better programmer from anyone who has never done Lisp or FP before. It is my go-to tool for prototyping - whenever I am not allowed to use Clojure, I still first write an initial prototype in it and then translate it to the target language. Even though that sounds counter-intuitive - I am far much faster compared to if I had to write directly in the target language.
- cutler 7y agoI don't really get this. If you're working in the usual OOP environment (JS, Ruby, Python, Java) what use is it modelling your solution in a functional language based on immutable data structures? Isn't that like running around naked before putting on your straight-jacket ready for work?
- iLemming 7y agoFirst of all: every modern version of languages you mentioned has some basic FP primitives; second: most of the time, it's all about the logic (algorithm) and data transformations. Yes, sometimes, it feels weird, like trying to glue every single hair back onto your chin after you shaved your beard off. And of course, the approach has certain limitations - you can't use macros, you have to be careful with recursion and lazy evaluations, etc. And it only works for small problems, and I'm not talking about maintaining big projects that way.
- slifin 7y agoI came here to say this, the REPL feedback loop is amazing, I think we can do more with LSP in Clojure with spec so I'm trying to build that out to attract people used to advanced type systems that would otherwise be put off The problem is I don't have a good track record for completing projects so competitors or collaborators would be greatly appreciated
- djhaskin987 7y agoAnd then you get so good at clojure that repl is "just another style" and it's not much different from Python in terms of effort or thought. After all, Python has a repl too, they just call it a shell. I have gotten burned out of my personal clojure projects same as anything. It's just a language people. Whether speaking Japanese or English, it's just a language. Yes culture is a part of it, but it doesn't imbue the speaker with some sort of superpower. Yes other languages are fun, but both get the job done. English has the word "love", Japanese has "yugen" but both peoples seem to get by just fine.
- slifin 7y agoWell Clojure is a language designed to be evaluated form by form if for example I wanted to evaluate an if statement in PHP's "REPL" then working out where that statement begins and ends is annoying compared to just sending an if expression in Clojure In PHP once a function is defined I can't redefine it and then call it again to iteratively build that function Just because your language has a repl doesn't mean you can get a quick feedback loop from it, in fact the more compile time constructs you have like classes and interfaces the harder it is, particularly if they're sticky with dependencies everywhere Bret Victor's work I think really illustrates how little respect and investigation we do into feedback loops
- iLemming 7y ago> After all, Python has a repl too, they just call it a shell. No. Most non-lispy (non-homoiconic) languages do not have "true" REPLs (and that includes Python as well). At best they are just that - interactive shells. To understand the distinction, one has to give a sincere heartfelt attempt to use a Lisp. Having able to evaluate any expression and sub-expression without any preceding ceremony is extremely empowering. There's a massive difference in the workflow - any experienced Lisper can attest to that. The benefits of homoiconicity are incredibly underrated in modern programming. Perhaps you just haven't used Lisp for long enough to learn how to appreciate it. > It's just a language people. Yes, it is. There are many different ways to express something like "number 42" - using ordinary objects like sticks, or by counting numbers out loud, or by writing the amount using words, or by applying mathematical sigma notation. And Mathematics is just a language as well. And when it comes to expressing something far less trivial than natural numbers, we have not yet discovered|invented better ways. That all been said - Lisp syntax is not without certain disadvantages. But in many cases - the benefits outweigh the cost. That is why Lisp as an idea is still relevant, even after over six decades. And until we figure out (discover?) a better way, the ideas behind Lisp still would be very useful.
- iLemming 7y ago> You will feel handicapped. You will be confused. For anyone who wants to learn Clojure (or any Lisp) from scratch, here's my advice: Don't try to learn it by reading books. What I mean: don't try to mentally parse and analyze printed code written in Clojure. For uninitiated Clojure code may look like unreadable gibberish. If you try to understand Clojure code by merely staring at it, it may feel very exhausting. Remember: Unlike most other languages where the code is "dead" until you compile it an run it, Clojure code is a "living thing," analyzing its "static" properties without evaluating that code makes little sense. Get an editor/IDE that supports "structural editing." Learn basic structural editing commands - slurp, barf, transpose. Learn/set a keybinding that allows you to evaluate the expression at the cursor. And then eval your expressions and sub-expressions. That would make it much easier to learn. And would bring joy to the experience.
- runald 7y agoHow is printed clojure code from regular clojure code? Sounds like a maintenance nightmare if the code can't be understood just by reading it.
- iLemming 7y agoI should've probably clarified: It is difficult to grok Clojure code only in the beginning - when you are new to the language. To many beginners, Clojure code at first may not look very intuitive. That is why I'm suggesting to learn it by "breathing it" - try changing it in an editor/IDE that supports structural editing and connected to a REPL - change an expression, eval it - see the results, expand, eval again, move onto the outer/inner level expression, eval, and so on. That way you quickly get the insight and learn how the language works. And it won't take too long to learn how to comfortably read and mentally parse "static" Clojure code. After some time it becomes clear - Lisp is not harder to read. For some people, it's the other way around - going back to languages with C-like syntax may feel awkward.