Re. learning resources, I'm just at the beginner level in clojure, but a subscription to https://purelyfunctional.tv/ was very good to get a start, as well as the book "getting clojure".
Clojure Workshop [1] is one of the best introductions to Clojure, Lisps and FP I've had the pleasure to read.
If I'd recommend one thing to get you started with Clojure, it would be that. The rest is practice and experimentation (of which the book provides plenty).
1. Know Clojure (duh...) You should know language and most features of most standard functions.
2. Know Java VERY well. You will be debugging system with JVM underneath and Java libraries but programming Clojure. If you don't know Java you are not going to learn it while programming Clojure but you will be needing it nevertheless.
3. Have mature understanding of various approaches, patterns, paradigms, development practices and most importantly, importance of simplicity and how to write maintainable code. Clojure allows you to do basically anything and will not handhold you on how to structure your application. Therefore, if you don't already have that knowledge and maturity with you, more likely than not you are going create an unmaintainable monstrosity.
You don't need to "know Java very well", adding that to a minimal clojure curriculum is a very misguided recommendation.
You can do loads of things without needing more knowledge from java than: a) it exists, b) it has stacktraces, that you will read on errors, and c) that you pack it in a .jar.
You can even easily do with less, as you can use e.g. heroku without knowing how to create a jar file, just pushing a repo, and you can start working with clojurescript and avoid java whatsoever.
I think you have a very high bar of "minimum viable"!
IME you don't need to have Java experience previously, you can just pick up needed bits of JVM as you go - which is less than you make out. I'm sure you can approach things from a Java expert angle as well and leverage your tooling etc knowledge from there, no doubt it helps a bit in the beginning.
I think (3) would be an equally valid requirement for a Python, JS, C++, or Java developer.
I say this after observing Clojure project at the bank I work for and from other projects I observed in the past.
The guys knew a lot but left a big pile of unmaintainable crap.
IMO minimum viable developer should be able to not trip on their own feet. Generally be able to produce working, maintainable application.
In Clojure (and other Lisps) this absolutely requires you to be able to structure application.
If you use other languages, the frameworks that are there do the work of structuring for you. That's why when you are Java developer, every web app largely looks the same. That's because you don't actually structure application, as much as use structure that is offered with Spring ecosystem.
It seems very unwise to plan your career around using a particular language, especially a niche language such as Clojure.
For longevity as a developer, it's important to become comfortable with picking up new languages and tools as necessary.
A better strategy for career planning is to decide which domains you find interesting, and then focus on the skills and tools that are used in those domains.
The OP doesn't say anything at all about "planning a career" around the language. They just want a job in it.
A large portion of my audience is currently employed using a popular language like JavaScript or Java and are currently looking for a job using Elixir. In many cases it's precisely because they do want to pick up new tools and grow.
Given that Clojure is a lisp and works quite a bit differently from mainstream languages but is full of useful ideas that can be taken back, I think the motivation makes perfect sense.
10 comments
[ 2.7 ms ] story [ 28.6 ms ] threadIf I'd recommend one thing to get you started with Clojure, it would be that. The rest is practice and experimentation (of which the book provides plenty).
1. https://courses.packtpub.com/courses/clojure
Minimum viable (no particular order):
1. Know Clojure (duh...) You should know language and most features of most standard functions.
2. Know Java VERY well. You will be debugging system with JVM underneath and Java libraries but programming Clojure. If you don't know Java you are not going to learn it while programming Clojure but you will be needing it nevertheless.
3. Have mature understanding of various approaches, patterns, paradigms, development practices and most importantly, importance of simplicity and how to write maintainable code. Clojure allows you to do basically anything and will not handhold you on how to structure your application. Therefore, if you don't already have that knowledge and maturity with you, more likely than not you are going create an unmaintainable monstrosity.
You can do loads of things without needing more knowledge from java than: a) it exists, b) it has stacktraces, that you will read on errors, and c) that you pack it in a .jar.
You can even easily do with less, as you can use e.g. heroku without knowing how to create a jar file, just pushing a repo, and you can start working with clojurescript and avoid java whatsoever.
IME you don't need to have Java experience previously, you can just pick up needed bits of JVM as you go - which is less than you make out. I'm sure you can approach things from a Java expert angle as well and leverage your tooling etc knowledge from there, no doubt it helps a bit in the beginning.
I think (3) would be an equally valid requirement for a Python, JS, C++, or Java developer.
The guys knew a lot but left a big pile of unmaintainable crap.
IMO minimum viable developer should be able to not trip on their own feet. Generally be able to produce working, maintainable application.
In Clojure (and other Lisps) this absolutely requires you to be able to structure application.
If you use other languages, the frameworks that are there do the work of structuring for you. That's why when you are Java developer, every web app largely looks the same. That's because you don't actually structure application, as much as use structure that is offered with Spring ecosystem.
For longevity as a developer, it's important to become comfortable with picking up new languages and tools as necessary.
A better strategy for career planning is to decide which domains you find interesting, and then focus on the skills and tools that are used in those domains.
A large portion of my audience is currently employed using a popular language like JavaScript or Java and are currently looking for a job using Elixir. In many cases it's precisely because they do want to pick up new tools and grow.
Given that Clojure is a lisp and works quite a bit differently from mainstream languages but is full of useful ideas that can be taken back, I think the motivation makes perfect sense.