A few months back I was bored with figuring out whatever it was I was figuring out at the computer, and decided I had had enough. I needed to throw out all of my programming expertise and fill my mind with new super-powers. If only!
I was not lacking for inspiration entirely however. I’ve been coding since my college days, and went on to work fulltime on some big projects, including some very famous websites that a lot of people have used at one time or the other. More recently, I have been helping startup founders learn coding, and the technical mindset and tips they have to pick up.
What if I could reprogram my mind? I thought.
What if, instead of being stuck coding Rails and Python, and do that for life, what if you could be having more fun, and there really was some weird new thing that could transform the way you think about code and computing?
I felt kinda like this guy Joe Armstrong in the video below:
But I felt I was on the edge of something nice, and yet, little did I know how much I was getting myself into. For, you see, I decided to learn, not one, not two, or three, but something like 5 new programming languages, and a labyrinthine collection of stacks and frameworks that most people have never heard of.
“But Why, Mr. Anderson? Why Do You Persist?”
Because I can. Because I choose to. And because it’s fun. I play around with linux distros for fun. My Mac-loving friends ask why I bother when I could just boot into Mac every-time, and play around in the sandbox.
After all, not everybody has to go about digging into the kernel and stuff like that. Except if you’re curious, then you do. And if you want to know how.
So I jumped right in! Little did I know I was just about to get the equivalent of a lifetime’s worth of programming education, more than my little brain was equipped to carry, like a core-dump from some super alien planet of computing where a segmentation fault had resulted in ages-worth of knowledge being spam-mailed to the wrong coordinates and somehow been delivered, all neatly-wrapped up, at my door by an unsuspecting mailman.
But what is fun? And what should a hacker learn? What is of value? No, scratch that! What is of value TO A HACKER?
Cause I didn’t want the suits (read, corporate higher-ups and slave-masters) setting the fashion through O’Reilly Publishing and Amazon and moWrox the publishing company, and channeling us all into forests of corporate dump-speak and brainless monkey-coding.
Me chico, I wanted what was coming to me.
Out went the suits. Out went “agile”, and “scrum” and “scalable-this” and “scalable-that”, and “stateless” and “sessions” and “architect this” and “standards that”, and “pair-programming this” and “hackathon that”.
I threw out all the corporate soup, and all the dishes in which it’s been served to turn us all into self-effacing, servile and un-thinking automatons, to be milked by the system for what it knows best, dollars and more dollars.
If you gonna do code right, chico, you need to throw out all that stuff. Think for yourself, pursue your own agenda, and fight the machine at every turn. It’s the only way how I tell ya, it’s the only way.
Some new friends now. Enter your new friends.
Fun is Erlang. Erlang is fun.
Fun is OCaml.
Fun is Lisp. Some swear by Common Lisp. Some swear by Scheme. Still others swear by Racket. I’ve tried all three to one extent or the other, and they’re all more fun on a dry summer evening than 2 hours at a James Bond movie. No-one disturbs you with their ill-timed shouts when you’re coding, unlike when you’re at the cinema, making you lose out on the full 100% of your hard-paid $15 for the movie and popcorn and stuff. You should have known better, going to the movies alone, didn’t society tell you something about that!
Fun is Blender and Gimp and animation dude! You should totally be in animation! It’s the way of the future, eh, the future past and the past future, and the future, period.
This is a paradox. You can totally have fun doing things that most people have only ever heard of, or dreamt of, whatever, but the reality is, no-one does this stuff. At least that I know. I mean, one or two other people I’ve come across claim to have done Haskell in any measure, or at least told me so, but I’ve worked alongside going on hundreds of other tech people and programmers. Most people wouldn’t recognize a Haskell if it bumped into them in the parking lot, and wouldn’t want to know.
They’d rather go home and watch Game of Thrones. Or 50 Shades of Grey, or whatever other mindless junk is on TV these days. If you want the real hacker stuff, there’s very little competition out there. No, I’m talking real SERIOUS competition. There’s almost none. Everyone is busy watching reruns of Seinfeld and drinking three-days old Miller Lite.
You want a Haskell? You can have the whole thing, there’s enough to go around! Reserved for real hackers only!
Want a side of Lisp with that? Sure, here you go! No-one else is in line after you. Oh, you don’t have to bring it back today, feel free to bring it in whenever you’re in town next time. The whole brogrammers tribe are over in the woods somewhere watching the Super Ball or something un-nerdy like that!
And yet it’s so easy nowadays for a committed hacker to learn some truly wonderful things. And to code circles around teams and teams of sheeprogrammers who only code 9 to 5 and turn up dutifully at every one of those stupid politics corporate cookouts.
The learning resources are abundant, more books, videos, MOOC classes, forums, websites and meetups to learn through and to code better and better things.
So I took my fill.
Here is the list of funtasic things I wanted to learn over the next couple of months:
Blender, because I wanted to learn animation
Unreal Engine and C++, for making games
Racket, the programming language
Cordova and Ionic
Swift for iOS
I was lucky I had a long 10-day holiday coming up at work, so that gave me a huge jumpstart.
I splurged on whatever took my fancy in programmer-land. I was like a little kid in an ice-cream factory.
But notice what’s missing in the above lists. Yes, that’s right. The usual suspects are missing. The stuff that’s boring to death, that makes most programmers’ eyes glaze over at their day job, and makes them feel like smashing both computer and monitor together, and walking outta there, never to come back again.
My list is extensive, okay. It’s hard, that’s fine. It takes time, that’s okay. It’s very challenging, that’s okay. Most people probably couldn’t do it, that’s fine. But what’s there to stop you, or any one person, from learning all this? Only yourself, that’s what!
I’ve read some articles by hackers like Peter Norvig and Eric Raymond, amongst others, suggesting you need 10,000 hours to truly become a masterful hacker.
And I think that’s a wrong statement to quote on many levels. Not least of which is that it’s such a specific number, with no precise goal, like “to be in Tokyo, travel for 3000 miles by boat”. I’m surprised everyone is quoting it so blindly and so lazily. I’m only quoting it here to illustrate a point.
I think the 10,000 number is based off research from other “experts” that proves that this is so. This is exactly the sort of stuff I’m advocating you to avoid. Don’t drink the Kool Aid!
Listen, these guys like Norvig and Raymond and others are very accomplished hackers, so listen closely to whatever they say. But please don’t parrot their opinions and thoughts as fact without doing some research yourself.
Go out, do all the hard work yourself. Then, you can read some fine research stating certain things and make up your own mind, but please don’t become an unthinking automaton that can be programmed and remote-controlled by popular opinion, even if that popular opinion is correct every once in a long while.
Now, as I said, my list above is quite extensive, and I realized it was not going to be easy to ingest so much education in a short amount of time. It was going to be very challenging, time-consuming, and mentally exhausting.
Silva: Do you see what comes of all this running around, Mr. Bond? All this jumping and fighting, it’s exhausting!
This is what I call “Paying the Bill.”
You go eat at a fine restaurant, maybe it’s an eat-all-you-can fine buffet, but you gotta pay the bill, and that’s how the world works.
Well, no different here.
Paying the programming bill. Wow, this wasn’t easy, or lite.
This couldn’t be diluted with some BudWeiser and watered down like Chivas Regal. This was the real deal, and it was gonna cost.
So, when I looked at the ‘learning bill’ of what in my foolish ambition I’d signed up to learn, as you can imagine, I was overwhelmed. The ‘learning bill’ came up to a staggering 250-300 hours depending on how strenuous you wanted to be on certain things and how efficiently certain things could be covered.
“250-300 hours! 300 hours! How I will make 300 hours?” I lamented!
Said the number out loud, 300 hours! How would I make 300 hours? I didn’t have 30 hours, much less 300! That abstract number stood before me like a sheer wall I could not scale.
I was a busy programmer. Writing code for fun in the evenings and toying with multiple business ideas, and sharing my programming knowledge with budding programmers at a technology institution by day.
I had no time to do everything that was helpful. Much less crawl away into some cave for 300 hours without sleep or break and try to crack the koans of coding on some kind of life-enlightenment Quest of the Minotaur!
It’s like Robert Frost said.
You either take the path not taken. Or you don’t.
And for most novel choices and most people, that answer will be don’t. That’s why it’s the path not taken.
But for you young programmers out there, this is something you will confront repeatedly in the course of a technical career. You must not stop until you’ve scaled every mountain. So who cares if the mountain is X feet high. If you’ve committed to doing this for a lifetime, you’ve got to count the cost, put together a plan, and show up each time. If you look at it the right way, that’s actually the fun part of being a programmer.
Treading those parts that mere mortals fear to walk.
Do they shrink at OCaml?
Well you know what. You become the Cool Hand Luke of OCaml, unfazed and unperturbed.
But for your own sake, don’t faint because “oh this requires so much time”. You can be any programmer you want, but you can’t be a weak programmer. You’ll get washed out when the next recession comes if you do that.
I’ve been fired from companies in the past. But I had made coding my good friend. Guess what I did. That’s right, I trotted off to start my own coding company, glad I didn’t have to waste time anymore baby-sitting some dumb-dumb buggy code that the higher-ups wouldn’t touch.
You know what’s a weak programmer?
It’s the programmer who can be SAFELY outsourced to India and all those places when times allow, and even in India, they have weak programmers there. They also have strong programmers, probably two of the best three programmers I’ve worked with were Indians, out of Korean, Chinese, American, African and Latin American programmers I’ve worked with. A great programmer will be fine wherever he winds up. He’ll build the next Alibaba from there!
If you’re in that situation you must read the tea leaves and become a super programmer, like me, that’s your only hope of having fun on your own terms.
Begin today, and begin by knowing that whatever there is in code that might be useful, can be learned. And the really useful stuff, the really special stuff, is a ton of fun, and most programmers will never know this stuff anyway. So you have very little competition. You just need to believe in yourself, in your abilities to keep learning and to learn better and faster than you can imagine, and to make a heady go at it.
So that’s how I tackled it, and I’ve told you why I did it, and how I gained a lifetime’s worth of programmer education in 300 hours over 4 months. And how you too can do something like this and become a better programmer than you ever thought possible.
By the way, don’t skimp on the hours. For each topic I had to cover, it took about 20 or so hours to become conversant at the basic level, and then many more hours to truly become fluid and use it natively. The whole learning adventure was something in that realm of 250-300 hours, spread out over 3-4 months.
600 Hours to Learn Chinese. 300 Hours can get you very far in programming
I heard recently a language expert or other saying it takes about 600 hours of studying a language like Russian or Chinese before you can be comfortably conversant and semi-fluent for most situations you’ll face. I’m willing to listen to these figures from that field because they correspond very well with the experience I’ve just described to you. So that’s more or less how much mastery will cost you. Anything beyond that will make you more and more fluid, and it just gets better from there. You’ll be presenting news on CCTV at some point north of that. But the hardest part is that initial 600 hours of conscious, active practice and learning. And you don’t need 10 years this or 10,000 hours that, the figures you hear being parrotted by idle minds, and, quite honestly, defeatist people just hear those figures and think “What’s the point, I won’t even try!” And is it any wonder no-one ever learns anything as a result?
If you measure the art of programming against this 600 hours to become conversant at Chinese, you realize 300 hours is about half that, and you can get pretty good, so it’s probably a more efficient field of knowledge-uptake(Part of this is no doubt that Chinese is a fairly complex communication platform with different semantics to Roman script, and so it is a bit more demanding, but coding is no less demanding, maybe just a tad easier to reason about initially). Granted, I was a fairly decent programmer before, but boy, I learned so much more than I had ever thought possible. At one point I became so confident with my new powers, so then I was going to launch my own Rails-like framework for Ocaml, then I played around with ChicagoBoss, looked at how that had been done for Erlang, and decided it’d be a lot of work that perhaps was a bit too distant if one of my goals at that time was to continue with the plan and finish what I had started.
But, you become fluent at this sort of thing. Who knows where you can go with it? Maybe join an open source project after this, release a game, or, like me, launch a startup or just work with others to improve their products? There’s a lot of ways you can apply this sort of knowledge. But at least have fun doing it! Nothing worse than a grumpy programmer who’s lost the enthusiasm of the game. Normally they are the ones dissuading everyone else from learning new skills and cussing out popular open source projects because they can’t understand why anyone still enjoys that kind of stuff.”
Share with others in the comments below if you’ve gone on such a fantastic learning journey as this, and how it changed your perspective.
Below, I’m linking to some resources I used to learn some of the stuff I listed above.
Resources and a few pointers
Book: 7 frameworks in 7 days , go over the Erlang Webmachine Part,
Book: LearnYouSomeErlang, in some detail, or, more concisely, read the next book
Book: “Concurrent Programming in Erlang” by Joe Armstrong, it’s about 150 pages.
Then, play around with the WebMachine source code and attempt to master it better
There’s a book for the ChicagoBoss web framework. Look it up. It’s a lot of fun.
Book: “Introduction to Objective Caml.”
It’s about 250 pages.
Learn Eliom web framework from the Eliom book. Look it up.
Racket Web Tutorial
Racket systems programming tutorial:
Go through the entire Racket Guide:
Book: “Realm of Racket”
Do Laravel and PHP quick tutorials
Learn by doing
Read the books and resources from Apple’s Developer web pages
C++ and game development
Go through the C++ Programming guides from Unreal Engine, and the Unreal Engine guides from scratch.
Blender, and Gimp
Simply go through all these tutorials from the Blender website, sequentially:
Then do these 12 tutorials:
And finally, do these:
Do these 15 Gimp tutorials:
So now that I’m done with this great voyage of fun through the programming wasteland, and know the bright spots, and all the good stuff I listed above, here perhaps is the key question, or at least one of the key questions I had a lot of curiosity about that I can now answer, at least for myself, and other reasonable people:
What then is the most fun programming language to code with, at least out of all these, and others I have used in my varied and exotic programming life?
Without any qualification or excuses whatsoever,
The most fun programming languages I have coded with that gave me the most pleasure, power and aesthetic enjoyment and fun,
Are Erlang, and Racket.
When I coded Erlang and Racket, the hours just flew by, and I was aware I was having some of the most fun I’ve ever had at a computing console.
I can’t even begin to describe it.
And that’s funny, because, if you look at it, both Erlang and Racket absolutely discourage almost everyone from even coding one line to try them out because they are both unforgiving in their look and have defiantly “weird syntax” and are bravely unaware anyone thinks they look strange in that “red dress and blue shoes”.
But believe me, these were the most fun languages I’ve ever touched to date.
No questions at all about it.
Now, I had also coded things similar to this, like Common Lisp, for instance. And it doesn’t even come close, at least for me.
What about Ruby, and Python, languages I’ve coded handily since back when? They are both very fun and enjoyable, and I still use them all the time, but, are you kidding me? Erlang and Racket are at once so flexible it’s like driving a flying car through the Daytona 500, and so powerful it’s like bringing a 20-000 horsepower Dodge Ram to do a tug of war with a bunch of Mini Coopers, there’s just no comparison.
That’s not the only really good question I now have answers to, there’s a lot more, questions you’ll never be able to answer until you actually sit yourself down and grok a lot of this stuff on your own.
Which of the above languages is faster, doesn’t blow up randomly, which would be nice as a systems language?
And many more questions that because you haven’t seen, you’re not even aware there are such questions, let alone ask them.
If you must quote me, well, I can’t recommend OCaml enough as a systems language and to learn more about computing. And CoffeeScript as a way to learn frameworks like Meteor and DerbyJS and make mobile apps with Cordova.
I can’t recommend Python’s Flask enough as a web development framework, and I can’t tell you how much more efficient it is to use Ruby on Rails as the web framework of choice over many others, and there’s a lot that I just can’t convey to you at this point. For that, you’d really have to go on a voyage yourself, and learn.
Only then will you truly understand what’s out there. And all the wonderful things that are possible for the hacker of today.
Enough about my lifetime’s worth of programmer education. Where is yours?
Thanks to earlier hackers like Norvig, Eric Raymond, Stroustrup, DHH, Joe Armstrong, and many others, upon whose accomplishments we are able to build today, it’s never been a better state of the civilization in computing land.