Hacker News new | ask | show | jobs
by votr 3520 days ago
Clojure. Before learning Clojure, I didn't even have a career. I just wanted to get into software development.

But at the time, all I knew was a bit of Python. And while I could've learned Java, I figured that being yet another Java programmer in the marketplace, but with no experience and a liberal arts degree, was probably going to get me nowhere.

So I decided I had to learn something emerging. Something where there was nascent demand but not much supply. I chose Clojure because it looked weird, and all these bright people were talking about how great it is. I invested a couple of months learning it deeply, open-sourcing my side projects, and blogging about it. I also spent that time learning non-programming fundamentals.

When I felt I was ready, I started reaching out to people in the community and companies on "Who's Hiring" threads mentioning Clojure. Within a couple of months, I landed my first full-time programming gig at an investment bank.

I know that if it wasn't for Clojure, I wouldn't be here today.

5 comments

Wow! Awesome story! It totally resonates with my experience with Clojure.

Would you like to do an interview about it for my site PurelyFunctional.tv? I think your story could help others find their careers. Email me at eric@purelyfunctional.tv and we'll figure out the best way to do it. Thanks!

Are you employed remotely? Someone asked a question on Ask HN a few days back about whether learning a less common language made remote work more feasible. So this is kind of a follow-up to that question.
Nope. Still commuting. But becoming remote is my number one goal.

At the moment, I have a client outside of work (ReactJS stuff), and am negotiating a remote gig with a company in California.

I agree that exotic technologies give you a leg up.

My stance is also that, if you're pushing for remote, then by definition you need to justify why you're a better choice than your remote competition who may live in lower COL areas.

If you're remote, then why should someone pay you a high salary vs. paying a lower one to that bright guy in Romania, who can still live like a king?

That's where marketing, differentiation, and service come in. But these are just my guesses.

Everyone has a plan until they get punched in the face.

If you're remote, then why should someone pay you a high salary vs. paying a lower one to that bright guy in Romania, who can still live like a king?

Companies will pay a premium to have someone in the same timezone who speaks the language fluently.

Have you ever worked with a guy from Romania?
I have. He's a good programmer and a nice chap.
But he is in Romania. It would be a lot nicer if the Romania guy was in my timezone or, better yet, my office.
Or what if you were replaced with another Romania guy/gal then that would also solve that problem.
Awesome story! I'm interested in hear more about the time you spent learning non-programming fundamentals. Would you care to elaborate?
I'd say non-programming fundamentals took about two months at about 4-6 hours a day, with the majority of that dedicated to algorithms and data structures.

I took these two OCW courses: https://ocw.mit.edu/courses/electrical-engineering-and-compu...

https://ocw.mit.edu/courses/electrical-engineering-and-compu...

And worked my way through these two books: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

https://www.amazon.com/Algorithms-Robert-Sedgewick-ebook/dp/...

I wrote out my solutions on a whiteboard or pen and paper before typing them into a computer.

Outside of A & DS, I spent some time on operating systems and networking in general. A little bit of probability, but no hardcore discrete math.

There are swaths of areas which I now cover at a slower pace as time allows; compilers, AI, etc.

just to confirm, you completed BOTH MIT algorithm courses and BOTH algorithm books, in the span of 2-months, including completing all the exercises/algorithms?

that seems like an incredibly short amount of time given the content. But if true, congrats! and please let me know your secret!

Thank you for your reply. I'm currently studying CS fundamentals as well. I'm taking an excellent operating system class from https://www.ops-class.org and I recommend to everyone that wants to learn this stuff.
What makes you categorize algorithms as non-programming? Isn't it like saying rhythm and melody are non-musical concepts?
Not OP, but maybe "coding" is a better term: they are language-agnostic fundamentals that don't change as quickly as the tools and frameworks we use daily as "programmers"
I agree :). Clojure re-invigorated my love for programming after years of working on boring products in boring languages. I still work on boring products, but at least I get to work with awesome technologies (Clojure/Datomic being my 2 favorite).
I'm very interested in learning Clojure. Would you care to share more of your experience learning the language in terms of learning curve, useful libraries or just general tips. I'm sure that would benefit the community at large.
I approached learning Clojure the way I approach learning everything else. I survey the resources available, then pick the two best books. Ideally, I want them to come at it from different perspectives. e.g. one may place an emphasis on doing stuff with Clojure while another may be more about functional programming.

At the time, they were:

https://www.amazon.com/Clojure-Programming-Chas-Emerick-eboo...

https://www.amazon.com/Joy-Clojure-Michael-Fogus/dp/16172914...

I then wrote a data processing app in Clojure; consuming financial data and finding patterns in it.

My suggestions are: 1) If this is your first time learning a functionally-oriented language, clear your mind from any kind of assumptions picked up from other languages.

2) Get a handle on the core tenets of functional programming: immutability, purity, composition, and functions as objects. If you know Javascript, then a lot of this stuff may already be familiar to you. JS is underrated in that department imo.

3) To me, writing programs with Clojure is akin to playing with Lego. You write your base functions, then higher-level functions which use those base functions, and so on. Functions all the way down.

4) Write something with it; it'll force you to decompose your program and think functionally.

Clojure is a simple, opinionated language. I don't think you'll have a hard time picking it up at all. The hard part will be to think in a manner amenable to it.

These days, I think Clojurescript has overtaken Clojure in terms of traction, so if you're into webdev, then CJS would be a natural next step.

> You write your base functions, then higher-level functions which use those base functions, and so on. Functions all the way down.

I'm hoping to follow a similar trajectory to you, but with Elixir instead of closure. At the moment though, I tend to do things the other way around: write the top level functions and then fill out the base functions.

So I'd start a module with

def whatever(something), do: something |> function1 |> function2 |> function3

Then I'll write function1, 2, and 3 and whatever helper functions they need. And so on until it works. Maybe doing it your way is a better approach: helps you think it through first.

(although I'm aware some would say that tests should come before everything else anyway)

It is useful and necessary to use both directions at times. You can't always presuppose the relevant details. But do be ready to factor away functions at a moments notice
"some would say that tests should come before everything else anyway"

Which some others consider a cargo-cult practice if done mandatorily for it's own sake.

Good luck on your studies!

Where did you get this financial data for your first project? Is it a public feed / API? This sounds like exactly the sort of thing that I would like to start playing and eventually working with. I had been assuming that this type of data would only be available to the kind of entities that have a compliance officer, but I would love to have that assumption proven wrong.
I would recommend Clojure for the Brave and True - [0]

I have done some 40% of this book and so far I have thoroughly enjoyed reading and learning. Plus, the book is free to read online.

[0] - http://www.braveclojure.com