6 ms·
I've said it before, and I'll say it again. I will continue to write Clojure for a living as long as I am able to find a job willing to pay me to do so. I have
by jakebasile 6y ago
I've said it before, and I'll say it again. I will continue to write Clojure for a living as long as I am able to find a job willing to pay me to do so. I have never encountered a more pleasant environment to do my work. I think Clojure isn't going to "go away" any time soon as long as there are other people like me still around.
I do think that Clojure shops (like all software shops) need to dial back the torture interviews / homework / tests, but that's really a bigger thing that just Clojure. I think more could be done to market Clojure to the non-believers, but I don't have specific ideas on how that could be done.
You can take my parentheses from my cold, unemployed hands.
- Scarbutt 6y agoDid Clojure made you unemployed?
- jakebasile 6y agoNo, I am currently employed. It's a play on the "from my cold, dead hands" phrase. https://en.wikipedia.org/wiki/From_my_cold,_dead_hands https://en.wikipedia.org/wiki/From_my_cold,_dead_hands
- bit_logic 6y agoI'm a bit surprised to hear this, I thought Clojure shops would be better than this. It was must hard to find any candidates and they're still doing the stupid leetcode interview style? Are these companies putting any thought into their hiring process? That process was created by FANG because they can abuse their candidates and still get a lot of applicants (although I think this is less true than it used to be) But to use that same hazing ritual at a smaller company with the hiring funnel further reduced by a niche language? Really stupid.
- deleted 6y ago[deleted]
- jakebasile 6y agoI agree, but it's definitely still common enough even among Clojure shops. I think it's an insight wide plague but despite so many of us hating it, it persists.
- smarx007 6y agoAlternative perspective: we were thinking to hire an M.Sc. thesis worker to do some work in Prolog and we definitely contemplated how to make the interview harder. The point was not to be monsters. Instead, Prolog is harder than JS and thesis is shorter than a few-year contract and there is less help on SO. If we hire someone who can barely write Prolog or understand what RDFS inteference is, the output will be nearly zero. Also, if the person struggles to complete something in 6 months, they will get anxious too and nobody wins. But obviously not a regular "hard" algorithms interview. Also, a senior engineer was essentially suggesting ways to completely rewrite my Prolog code in PRs for quite a while. So I hope you can appreciate why Clojure and other niche shops are a bit more selective.
- johnnycerberus 6y agoProlog is not harder than JavaScript, it is just different. I would hire somebody that is interested in Prolog and good with data structures and algorithms in general, and by good I mean knowing the nitty-gritty behind them. In my experience, exotic languages are not enough, they are not good indicators that you have a prospect in front of you.
- mto 6y agoRecently seen some statistics (if I could just find them) where clojure was one of those languages with more people wanting to work with it than jobs. Compared to something like Go where it was the other way round
- bIAW7hAhDO 6y agoHonest question: Why is clojure so much better than the rest?
- mbil 6y agoCompared to other languages, I've found Clojure makes it much easier to iteratively turn an idea into code. Say you're writing a pure function... You start with just data and a sense of how the output might look. Let's say I have APIs providing me with a user record and a list of transactions, and I want to get that person's balance... Maybe you start with some canned data (let [person {:name "Matt" :id 12345 :current_balance 100.10} txns [{:person_id 12345 :amt 10} {:person_id 44444 :amt 0.5} {:person_id 55555 :amt 10} {:person_id 12345 :amt 11} {:person_id 12345 :amt -5} {:person_id 66666 :amt 3}]] (->> txns count) ) => 6 and maybe you want to filter the transactions to just that user (let [person {:name "Matt" :id 12345 :current_balance 100.10} txns [{:person_id 12345 :amt 10} {:person_id 44444 :amt 0.5} {:person_id 55555 :amt 10} {:person_id 12345 :amt 11} {:person_id 12345 :amt -5} {:person_id 66666 :amt 3}]] (->> txns (filter #(= (:id person) (:person_id %))) count) ) => 3 then you want to extract the amount for each of those (let [person {:name "Matt" :id 12345 :current_balance 100.10} txns [{:person_id 12345 :amt 10} {:person_id 44444 :amt 0.5} {:person_id 55555 :amt 10} {:person_id 12345 :amt 11} {:person_id 12345 :amt -5} {:person_id 66666 :amt 3}]] (->> txns (filter #(= (:id person) (:person_id %))) (map :amt)) ) => (10 11 -5) and sum those amounts (let [person {:name "Matt" :id 12345 :current_balance 100.10} txns [{:person_id 12345 :amt 10} {:person_id 44444 :amt 0.5} {:person_id 55555 :amt 10} {:person_id 12345 :amt 11} {:person_id 12345 :amt -5} {:person_id 66666 :amt 3}]] (->> txns (filter #(= (:id person) (:person_id %))) (map :amt) (apply +)) ) => 16 and add that to the existing balance (let [person {:name "Matt" :id 12345 :current_balance 100.10} txns [{:person_id 12345 :amt 10} {:person_id 44444 :amt 0.5} {:person_id 55555 :amt 10} {:person_id 12345 :amt 11} {:person_id 12345 :amt -5} {:person_id 66666 :amt 3}] bal-change (->> txns (filter #(= (:id person) (:person_id %))) (map :amt) (apply +))] (+ bal-change (:current_balance person)) ) => 116.1 the function is done! (defn update-person-balance [{:keys [id current_balance]} txns] (let [bal-change (->> txns (filter #(= id (:person_id %))) (map :amt) (apply +))] (+ bal-change current_balance))) I posted here as a series of snippets, but this would have been a single block of code, refined and evaluated and refined and evaluated, over and over, in a REPL-integrated editor. It feels like sketching a portrait or sculpting clay. "But I can do that in any ol' REPL!" you might say. Try Clojure -- really try it, with an nREPL connected to your running application and to your editor, capturing inputs, playing them back, writing evaluation output as comments -- and then tell me you want to go back to your old REPL. A notebook environment is similar, though clumsier IMO. Come for the REPL-driven-development, stay for the immutability, the Java library ecosystem, the lisp syntax, the concurrency support, etc. I know going on and on about how great Clojure development is is basically a meme at this point, but that's because it's really great!
- jb1991 6y ago> I do think that Clojure shops (like all software shops) need to dial back the torture interviews / homework / tests I work in three main language, including several years of Clojure work. When I applied to a new Clojure shop in Germany, the first step was a lengthy take-home assignment that was time-consuming and vague. After spending a couple days on it, I never got a reply. A second Clojure startup in Italy did the same to me. In both cases, there was zero guidance and it felt more like a guessing game about what they were looking for than an actual coding evaluation. I have never experienced this in any of the other langauges I've used professionally. I've had to do simple, short technical screens, but only Clojure companies seem to expect that you give up big amounts of your time for no pay for the honor of applying to them. That really needs to change.
- simongray 6y ago> That really needs to change. Here's a different anecdote: I've had two Clojure-only jobs here in Denmark and neither of them had any homework assignments. I got hired at the first and only interview in both cases. One was my first job after finishing uni and the other one was the job after that. Now I work at Copenhagen University, also writing Clojure and ClojureScript (so the third Clojure job, although it was never advertised as such) along with a little bit of Java for projects inherited from my predecessor. I didn't have any programming assignment while interviewing here either. It's not that we don't get interview assignments in Denmark, but I've only had to do them in Python, PHP, Java, and Javascript - i.e. mainstream languages.