Hello, I’m John (Closer to 40 than 30), and I am not actually a programmer, more like interested party. But here’s my (long) story:
I was first introduced to programming via Quickbasic on DOS, did something really simple and stupid stuff and one actually really complicated “3D first person” dungeon crawler. Basically a really simplified computer generated maze in the vein of Dungeon Master RPG (1987). About 99% of that code was to get the weird drawing code to draw something that looked vaguely like a corridor with few white lines. Fugly stuff. I honestly don’t remember much about it, as I was really young.
Then I watched my friend start learning Pascal, then C, and Assembler, and then C++. We made bunch of small games, one with just pure assembler. I mostly listened to his explanations and helped brainstorming, but had no idea how to code. I did all the other stuff. Doing music with Tracker, Art, etc. All I knew that just from all his talk and from what I could see, I NEVER wanted to touch C++ or C. That seemed like the dumbest language known to mankind.
Forward some 5-10 years, and I decide that I want to learn to program at least a little. I looked at C, went “nope”, and then checked Python, tried it for a bit, did a plain text editor with it, and went “nope”, then tried Ruby… and nope.
You have to understand, I didn’t actually LEARN these languages, I just fiddled around with them until something happened and used bunch of tutorials as a crutch.
But then I learned about Lisp and started learning Common Lisp. I actually got fairly well into it, far enough that I understood the concepts fully and I got a real education in Vectors, Hash Maps, Lists and all that. I did some data manipulation code that handled inventory calculations (related to work), etc. That was the first time I actually learned to program anything without a crutch. But it didn’t take too long, maybe a year, into my journey into CL until I noticed that I couldn’t actually do anything useful with it.
I mean, anything modern you wanted to create with CL would require interfacing with some foreign C/C++ library for graphics/UI. And doing stuff without GUI was about as far from interesting as I could imagine. Despite using some libraries, tutorials, etc, to get GUI/et al – I finally gave up on it. Probably around when Clojure was very new, but I wasn’t really interested in it, or truly aware what it even meant.
Years pass.
Then about 3 years ago, I program something ridiculously stupid on Twine 2, because of a bet. It was a nightmare to code on Twine, because I didn’t want to touch Javascript. I had looked at Javascript once, and that was more than enough for me to swear to never touch it. So I used the inbuilt language (forget the name) but it only had global variables and huge limitations on how to do things. While I wasn’t a coder, I knew the concepts and had coded in the past – so I actually was very aware of the limitations.
So I got it done, but I figured that I really needed something more user friendly if I ever need to do something like that again. So I looked around, and somehow (I don’t remember how) I found Clojure. Saw Rich Hickey’s talk,“Are we there yet?” and went: “Damn, man, you got a point.” Gave the language a shot, and after the initial floundering of “WTF? Immutable?” I fell in love.
I love that Clojure has Opinions, with capital letter. That means it doesn’t just drop you off and say “here you go: stuff, do something with it, maybe”, it actually says “this is how things are done, deal with it”. I also love that it’s much more concise than CL ever was. It was real drag to write something like “hash-table-rehash-threshold” or “least-positive-normalized-double-float”. Okay, fairly extreme examples, but as a example CL “defun” is in Clojure “defn”, this goes all around the code. Also it uses “[” and “]” to good effect to clean up the code representation, also “{” and “}”. It’s very important to me that the code looks clean and legible.
I now use mostly Clojurescript + Reagent + Figwheel to do easy GUI stuff for myself. Possibly do a game some day, because why not?