Hi folks,
I read this thread with interest, especially the replies by @HolyJak @PEZ and @seancorfield. As a complete #Clojurenoob, this thread really resonated.
But as I read the thread, I realise that there are beginners, and there are beginners. Some of the beginners here make me feel that they are misnamed: they might be beginners in Clojure but they definitely feel very experienced as developers!
And it dawned on me that, maybe it makes sense for us to clarify further what we mean by beginners.
I will speak first for myself: I am a beginner-beginner, in that I completed an online web dev bootcamp, so I know basic HTML, CSS and Javascript, but haven’t really practiced those because I have an instinctive feeling that I will develop a lot of bad habits… so I basically followed the web tutorials, and can do some very basic commands. But I really disliked the messiness of JS, which feels very unclean and untidy mentally: very hard to debug… I only started last year, so am really a complete noob not just in Clojure, but to the world of programming in general.
Besides me, there are people who have a couple of years’ experience in other languages. They are then exploring Clojure. I think they are the next segment.
Then there are beginners to Clojure, but who are highly experienced in other languages, some with 10+ years’ experience. I suspect their needs will differ from the above two categories.
So when we talk about beginners, it really spans a spectrum, each with different needs.
I suppose the corollary question in my head is, is there a segment of beginners that y’all want to focus on first?
Related to that question, is the question of which segment of beginners should y’all focus on first? (I don’t have answers to the questions I am raising btw)
I also recently read this (great) book on open source software and how it has changed a lot thanks to Github and the rise of Javascript: the book is called Working in Public. In there, the book talked about how the nature of OSS has changed a lot, and how the rise of JS has also meant that many maintainers struggle with dealing with HUGE numbers of low-quality pull requests.
What I thought interesting was the characterisation of the different types of communities:
- Federations (high user growth, high contributor growth) → Rust, nodeJS, Linux
- Clubs (low user growth, high contributor growth) → AstroPy, but also Clojure, Haskell, Erlang
- Stadiums (high user growth ,low contributor growth) → Babel, webpack
- Toys (low user growth, low contributor growth) → ssh-chat
I suppose the corollary question is what segment or direction the Clojure community wants to go, and what type of beginner growth aligns with that?"
Again, I’ve no answers, just posing the questions off the top of my head. My instinct, though, is that we probably don’t want to end up being a stadium-type community…
For me as a beginner-beginner, the hard parts are learning all the basics:
- tooling (especially finding a suitable editor, which was much harder than expected, and then setting up a REPL. I have found the IntelliJ + Cursive so far to be the easiest and most straightforward for me: initially I found Atom + Chlorine, but sadly it does seem that Atom is dying…)
- error messaging is super opaque: they sometimes read like exclamations from Marvin the Martian to me
- I initially also lost a bit of time wondering if I should start with Clojurescript instead of Clojure, since I know some JS. However, it’s actually a lot easier to get the tooling setup and done for Clojure than Clojurescript, so I’m taking the one-fire-at-a-time approach, and focusing on learning the language first and foremost.
- the lack of a structured pathway with examples that I can follow. For me, I found some of Eric Normand’s videos to be super good, but they also strike me as being a bit too deep into computer science concepts for some people (I love them btw). Concurrently, I am also working through The Clojure Workshop, which is actually a REALLY great way for me to learn (as I learn best from seeing how someone does something and trying to replicate it).
- I think what will soon follow is trying to really understand HTTP (underlying Ring), Clojurescript, etc.
But can I just say that, while the learning is tough, it is also super rewarding and I really appreciate just how friendly and helpful everyone is, on the Clojurians Slack and also on this forum? It’s amazing to see the degree of generosity and general kindness. I really appreciate that, and only wish my Clojure skills were better so I can give back and pay it forward.
Peace out.