6 ms·
Clojure from the ground up
- ranit 10y agoChapters do not appear ordered. Is this intentional?
- Dangeranger 10y agoYes, they are in reverse order, start from the last post and work up.
- john2x 10y agoFrom the ground up :)
- BWStearns 10y agoThe modeling chapter is really fun (for those with some clojure chops already looking for a fun random place to assess the work).
- susi22 10y agoI've been doing Clojure full time for a few years. Here a recommendation on editor setup if you're new to the parentheses: 1. Setup Cursive ( https://cursive-ide.com/ https://cursive-ide.com/ ) 2. Start a REPL on the command line with `lein repl :start :port 38123` and connect to that repl with cursive, a remote REPL. 3. Bind and learn the following structural editing commands: a) Grow selection (this will be by FAR the most used in the beginning) b) Slurp. c) Send top form to REPL. d) Join lines Don't ever select by line, only use "grow selection". Don't ever break any parens ("[({") imbalance. Shouldn't happend if you use "grow selection". Editing like this will get you pretty darn productive. I used it for probably 6-7 months before I introduced more structural editing commands (Next in line is IMO "Move Forward").
- pkd 10y agoContinuing with the topic of editor setups - I highly recommend CIDER if you are already comfortable with Emacs. I say already comfortable because it is a bad idea to learn both Clojure and Emacs at the same time, especially so if you have no experience with Lisps. CIDER is extremely powerful and has a built in step-through debugger which is a complete joy to use. It also uses nREPL under the hood and Emacs being built for Lisps, the support for sexp editing is first class - use the Smartparens package and as the parent comment said - use slurp forward, backword, raise, kill form etc. Think of it as editing an AST instead of text. But CIDER is worth it just for the debugging experience.
- keymone 10y agothe biggest leap in productivity i've experienced is after i tried parinfer (https://shaunlebron.github.io/parinfer/ https://shaunlebron.github.io/parinfer/). seriously, just find the plugin for your editor, it is amazing, the cognitive load of balancing is simply gone.
- harperlee 10y agoI agree with this. I believe failing to recommend parinfer to a newbie doesn't make sense in any case, as it binds a very common issue for newcomers (the parentheses management) with something that is very intuitive, indentation with meaning, which in my opinion is part of the huge success of python.
- susi22 10y agoI used parinfer for a 1-2 months. Then I quit and switched back. Wayyyy too many silent errors that get introduced and you don't notice them until runtime. Especially if you edit code that other people wrote. I've also seen at least 4 people in the chats/forums that had errors because of parinfer. So no, I won't recommend it to a beginner.
- harperlee 10y agoOk, that's a fair point. If you open code indented somewhere else, there might be changes. In my experience, as my IDE (Intellij Idea) highlights lines that are changes for git, these errors are trivially detected. But perhaps for a newbie, this could be confusing? In any case I still think it is a net win.
- markc 10y agoCoded Clojure for years, including w/ Paredit and I find Parinfer extremely frustrating as it fights my edits and sometimes creates syntax errors - in the Atom Parinfer in indent mode anyway. Maybe other implementations are better? Or do I just have to "unlearn" a bunch before I can relax and let the magic flow? Cuz as it is, Parinfer makes me nuts.
- hacker_9 10y agoI like Clojure but ended moving away from it to Racket instead. The error messages and debugging story in Clojure just plain suck, and have for a long time now. Error output is just java stacktraces, which for a newcomer make zero sense. I got stuck for two days on something before realising the problem was because of a lazy list elsewhere in the program. The CIDER debugger is pretty good, but I can't help feel that people who sing it's praises haven't been exposed to graphical debuggers like in Visual Studio, which offer a far superior experience. Additionally there is no break on exception functionality, and you have to actually commit a debuggable version of a method before you can step through it. Combined with the nonsensical erro output, you can be looking for hours for the actual location an error occurs. Which is bizzare because functional languages usually make error finding a breeze because mutable state is so locked down. I'll mention Cursive too, which is an intelliJ plugin, that does actually offer a really good editing experience, and more importantly a modern graphical debugger that makes sense. But it's only a 30 day trial before you need to pay, and because Clojures error messages are still useless I just can't see a reason to pay for something I get for free with any other language. It's a shame because otherwise the Clojure library comes across as really well designed. Since moving to Racket, I've been a lot more productive because of the out of the box editor it ships with, which along with its built-in package manager, really make it feel like you can hit the road running.
- ClashTheBunny 10y agoCursive is free for non-commercial use: https://cursive-ide.com/buy.html https://cursive-ide.com/buy.html If you are working on personal projects, you are good to go.
- jstewartmobile 10y agoThat's the fatal flaw--being a layer over the JVM. It's a shame since the rest of it, as well as the community, is top-notch.
- markc 10y agoYes, stack traces suck, but being on the JVM is also a gigantic win for its runtime ecosystem and vast collection of solid libraries that you can access almost seamlessly. I.e. it's a flaw, but hardly a fatal one for large numbers of enthusiastic Clojurists.
- markc 10y agoBtw, this tutorial is by the author of the esteemed Jepsen https://jepsen.io/ https://jepsen.io/ and Riemann http://riemann.io/ http://riemann.io/ . He really knows his stuff, yet this material is very approachable. It should be noted however, that the project was put on hold several years ago, with the intent to eventually tackle: Polymorphism, Modularization and refactoring, object state, JVM interop, Clojure type system, Compiler at runtime, Build your own language, Performance analysis, Parsers and protocols, Storage and persistence, Networks and messaging, and Concurrency and queues. Consider http://www.braveclojure.com/ http://www.braveclojure.com/ as another free and well-written Clojure learning resource, that's more complete.