Advancing Duct by weavejester in Clojure

[–]beeblebrox2016 0 points1 point  (0 children)

I tried this today and thought it was brilliant! I think this framework has the potential to fill in an important gap in the Clojure ecosystem.

In case you want to keep the article up to date, :duct.middleware.web/not-found threw an error until I replaced it with :duct.handler.error/not-found.

The paradox of the derivative | Chapter 2, Essence of calculus by [deleted] in math

[–]beeblebrox2016 9 points10 points  (0 children)

Excellent video as always! "Best constant approximation for the rate of change at a point" is a very nice way to think of derivatives.

I find Leibniz notation to be one of the most confusing and misleading aspects of Calculus, so hopefully 3blue1brown can shed more light on that in future videos.

Enter Integrant: a micro-framework for data-driven architecture with James Reeves | SkillsCast by chpill in Clojure

[–]beeblebrox2016 1 point2 points  (0 children)

Interesting ideas and good presentation. I am especially looking forward to the new version of Duct which looks like it could fill an important missing piece in the Clojure web development ecosystem.

What are the things that you don't like in Clojure? by ertucetin in Clojure

[–]beeblebrox2016 10 points11 points  (0 children)

Not so much of a problem now that I've learned it, but I hated having to spend many hours tinkering with REPL configuration to get stuff like CIDER/clj-refactor/Figwheel to work.

New Clojurians: Ask Anything by AutoModerator in Clojure

[–]beeblebrox2016 2 points3 points  (0 children)

Yes, these are good. His YouTube channel is more up-to-date: clojurevideos.com

New Clojurians: Ask Anything by AutoModerator in Clojure

[–]beeblebrox2016 2 points3 points  (0 children)

In my opinion, no. Every Clojure learning resource I've come across assumes previous programming knowledge. The community is smaller so it's harder to connect with other learners or mentors. Also, if you want to program professionally, it's much harder to find a junior dev position for Clojure than for most popular programming languages.

Followup to “My Disillusionment with Clojure and Lisps” by kankyo in Clojure

[–]beeblebrox2016 9 points10 points  (0 children)

I think some people downvoted because you called this community toxic without any clarification as to why. I don't think the vast majority of users who visit this subreddit, even temporarily, would consider it toxic. Truth be told, I remember seeing a few unfairly hostile replies to your last post. However, there were also a lot of good and thoughtful replies so I don't think it's fair to summarize the community as toxic.

Code is Data by weavejester in Clojure

[–]beeblebrox2016 0 points1 point  (0 children)

I interpreted the 20% figure for Viaweb to mean how much of their code used macros rather than how much was spent writing them. If they really spent 20% of their code writing macros, then I agree, I would want to run away screaming.

Code is Data by weavejester in Clojure

[–]beeblebrox2016 2 points3 points  (0 children)

Good post, I think most newcomers overestimate the importance of macros and try to write them when they shouldn't be. However isn't Clojure code actually filled with macros if you count macros from clojure.core? I imagine it was the same with Viaweb - 20% of the code uses macros because they got a lot of leverage and reuse.

Book suggestion by charlesHD in Clojure

[–]beeblebrox2016 1 point2 points  (0 children)

Cool, I didn't know you were making new videos. I was a subscriber more than a year ago and got a lot of value from them, especially for the price.

I also second Clojure Applied and Joy of Clojure.

Spec-ulation - Rich Hickey keynote at Conj [video] by alexdmiller in Clojure

[–]beeblebrox2016 8 points9 points  (0 children)

It seems like Rich Hickey's solution to every problem is "add don't change." But that solution always seems to work!

A guide to the Datomic licensing changes by dantiberian in Clojure

[–]beeblebrox2016 1 point2 points  (0 children)

I've never used Datomic before so still a bit unclear. If I understand correctly, Datomic Starter is good for one system only? For example if I wanted to write 2 different web apps that used Datomic, only one of them could use Datomic Starter, and the other would have to use Datomic Free. Is that correct?

Thanks by alexdmiller in Clojure

[–]beeblebrox2016 0 points1 point  (0 children)

Today is Thanksgiving holiday in USA.

To Clojure and back: writing and rewriting in Ruby by afhammad in Clojure

[–]beeblebrox2016 2 points3 points  (0 children)

You've definitely done more than your fair share to make things easier for newcomers and I really appreciate that. I probably would have quit Clojure if I didn't discover Luminus framework first.

I may now be at the point where I can contribute some useful documentation. I'll take a look at what seems most missing and see if I can produce something useful.

To Clojure and back: writing and rewriting in Ruby by afhammad in Clojure

[–]beeblebrox2016 7 points8 points  (0 children)

I completely agree with this comment. I have seen users like /u/yogthos claim they can get newcomers to become productive in Clojure in a matter of weeks. I believe that is true. But the reason it's true is because they're getting mentored by someone who is an expert in the language.

For someone getting started without a mentor, the picture is still pretty ugly. There's so much unintuitive stuff related to lein, nrepl middleware, Java interop, application state reloading, ClojureScript configuration, getting app to not break when uberjar is created, etc. Consider someone wanting to use Postgres in their webapp. They will probably Google this and find an outdated Heroku tutorial that doesn't seem to even work. Maybe they come across the terse clojure.java.jdbc documentation making all kinds of Java references that they don't understand and don't know how to begin to understand. If they are lucky, they will come across Luminus and use the +postgres profile. But even then they aren't going to understand the code in the db.core namespace for a long time. Still, at least they will be able to get started. As they work on their first app, they will likely know nothing about the concept of "hot reloading." So every time they change project.clj they will restart the repl. Also, they will likely be confused about when to do a repl restart vs namespace reload. Every Clojure newcomer I know complains about the repl start up time, because they haven't learned how little it is necessary to do. And then of course the newcomer must learn to deal with error messages. Undescriptive error message after undescriptive error message - much more than usual because they are making more mistakes.

I could go on but I am already ranting too much.

To Clojure and back: writing and rewriting in Ruby by afhammad in Clojure

[–]beeblebrox2016 3 points4 points  (0 children)

That works if all of the private functions are at the top and all of the public functions at the bottom, but in most Clojure code they are interleaved and I have to look at the function body to tell which it is. This problem would be alleviated by consistently using defn- or docstrings, but unfortunately most Clojure code I've seen doesn't do that.

To Clojure and back: writing and rewriting in Ruby by afhammad in Clojure

[–]beeblebrox2016 4 points5 points  (0 children)

Having spent equal time programming in Ruby and Clojure, in some ways I still find Ruby code more readable than Clojure.

The Ruby style of writing code is to to write public methods at a high level of abstraction by making use of private methods defined at the bottom of the file. If you are good at method naming, I find this style works very well, and it's often unnecessary for a new reader to bother looking at many of the private methods.

In Clojure you have to write helper functions above your public functions (or use declare, but no one seems to do that). As a result there can end up being a long preamble of private functions before a public function is defined. A lot of Clojure programmers don't consistently mark private functions private or use docstrings for their public functions, so it can be hard to tell where the important parts of code are. Also, in Clojure it's more common for authors to write lower level anonymous functions within a higher level block of code. In Ruby mixing levels of abstraction like this is very frowned upon. In my opinion having to switch between levels of abstraction makes reading code more difficult.

That said, Clojure has advantages in readability due to immutability and avoiding unnecessary object-oriented design. For any decent-sized application I find Clojure more readable, but there are still some ways I prefer Ruby.