Computable Multiverse

Hi, I'm Rakhim. I teach, program, make podcasts, comics and videos on computer science at You can learn more about my work and even support me via Patreon.

Please, recommend me a book about X

In the past I spent hours asking people to recommend me some books, in both real life and on the internet. I was starting to learn programming, so obviously I wanted to find The Bible, the best book for each of the aspects of coding. What is the best book about algorithms? Can you please recommend a book about Java? I’m looking for a good book that’ll teach me Django. Any suggestions?

When online courses and videos became widespread, I remember asking similar questions about courses and screencasts. Today our community at is pretty big, and questions like this appear in our chats, social media, forums and blogs every day.

Of course, there are objectively good resources and not too good ones. “C Programming Language” is a great book, even if you don’t plan to program in C (let’s be honest — you probably don’t). O’Reilly books are usually pretty good. SICP is a must-read. Right.

But the thing is, if you go ahead and ask this question publicly, say, on Reddit or HackerNews, you’ll get plenty of answers. You probably won’t have a definitive answer in the end. Same if you just Google this question: many compelling answers, and you still have to decide.

The thing is — there is no Bible. No silver bullet. And if hundreds of people recommend a particular book, it only means there are higher than usual chances of that book working for you. It might not work for you at all, and that’s fine.

If you’re serious about learning something, you gotta take in plenty of information, read multiple books, listen to many people, watch lots of videos. Some of them will be subjectively bad, some — good. They will work together and help you understand ideas from different perspectives.

Think of this like trying to create a 3D model of an object. One book, one author, one approach is like taking one photo of that object. You get a lot of information (compared to nothing), but creating a good 3D model from a single 2D photo is hard, especially if this object is new, unknown and unexpected. You need at least few other photos, from different angles. Some photos will be so detailed and awesome, that they’ll contribute more than several other photos combined. This quality, level of contribution to the overall result is determined by compatibility between the photo and you. Your sensors, your brain, understands certain photos better than the others.

At some point you’ll get enough, so that new photos won’t make much of a difference anymore. There’ll be a point when you open another book and just don’t get anything new from it. This is how you know you got somewhere.

So, yeah, take some recommendations from people you trust, or just go ahead and get most upvoted books and resources along with some random picks. Nobody knows what is good for you. And only one person can know.

The best general advice, I guess, is to put some effort into knowing yourself first. Try to figure out what works better for you, that’s the only person who matters when it comes to education. Some people get the best results from thick, serious textbooks, some — from humorous, illustrated blogs, others — from videos. There is a guy who says “video is the worst medium for computer science education!” and gets hundreds of upvotes on Reddit? Well, who cares? Jacob from Wisconsin learns better with books and doesn’t get much from videos. Great, now what? This fact is useless to me, I want to know what works for me.

This is not “we’re all unique snow-flakes” type of bullshit. You are not unique, there are lots of people with very similar mindsets and mental structures when it comes to learning stuff. That’s not the point. The point is — unless you actively learn about yourself, you won’t know which non-unique group you belong to. Being unique or not is irrelevant.

— What is the best way to learn X?

— Know yourself first, then try whatever.

November 24, 2016 | permalink

What am I doing

There is a popular anecdote in the frog community. Older, wiser frogs love to tell to it to younger frogs. It goes something like this: once there was a man who worked at work and ate at diners, and all seemed fine enough to him, and over the years things in his life were constantly changing for the worst, but he didn’t really notice and didn’t make decisions to fix this trend. Today always seemed not too bad compared to yesterday. A year ago was hard to recall, so he didn’t bother. He died being an unhappy, grumpy, miserable man. The end.

The boiling frog anecdote is considered extremely offensive in the frog community.

Metaphorical tales are fun and all, but I find them very unhelpful at times. If you’re stuck somewhere in life and need a push, a boiling frog analogy won’t wake you up. The whole problem is in not seeing stuff clearly, and another perspective just makes you not see stuff clearly from another perspective.

So, instead, think of an unhappy, grumpy, miserable old man regretting his lack of decisions.

The frog is fine.

October 30, 2016 | permalink

Dreaming of obsession

When I was a kid, everyone around me was obsessed with something. For some it was football, for others — cars, video games or some martial art like karate. And I was jealous. I couldn’t get obsessed, I was trying to, but couldn’t.

I didn’t have doubts that I’ll become obsessed with video games as soon as I get a gaming console. My parents got me a NES (actually, a Chinese NES clone called “Dendy” that were extremely popular in exUSSR in the 90-s), but instead of a real obsession I got obsessed with the idea of obsession.

I didn’t finish a single game, I didn’t play much in general, but diligently filled thick notebooks with cheat codes, maps of levels and best paths to clear them. I spent hours exploring the cartridges at all gaming stores in the town, compiling tables of comparison to help me decide what to buy. I guess, I was obsessed with something — the infrastructure, the things that surrounded the games. I was simulating the video games obsession.

In high school I was jealous with football fans. They always had something to fill their time: they discussed endless games and championships, played football-related computer games, exchanged cards and posters, read newspapers and magazines. I was jealous just like I was before. I forced myself into watching football games, simulated emotions, got myself into senseless arguments, bought newspapers and read the news. Of course, it didn’t work, I got upset and carried on being jealous.

I am unable to be obsessed. And it took more than 20 years to realize I actually am very lucky.

December 23, 2014 | permalink

How to evaluate personal growth

Note: I don’t differentiate between personal and professional growth in this essay. Professional is considered a subset of personal.

New Year is upon us, and along with resolutions for 2015 many of us try to take a look at 2014 and find some promising changes. Did I become a better entrepreneur? Am I smarter than before? Am I going in the right direction? Do I even know what direction to go?

It can be hard to evaluate personal growth, but it’s very important to get some idea about it regularly. Seeing that you’re getting better is a huge motivation boost.

It’s easier with measurable things, for example, with programming. A year ago I didn’t know Ruby on Rails, today I can build simple things with it. Several months ago I’d spend days setting up the working environment, today I have made automation tools to deal with it in minutes.

Back in the university it was also pretty comfortable: I got marks and I could see if I’m getting better. I could also measure the time needed to complete assignments. Working for someone is another position where you have delegated some part of the evaluation to a trusted party: your boss, your team or your clients. Getting a bonus or a raise or just a positive comment gives you some idea. Since January 2014 I’m working on my startup. There are of course measurable things there too: sales, clients, feedback. Just like in school or at work they measure the outcome, and you can get some idea of what it took to get there. But being an entrepreneur (god, I still feel so sketchy saying that), it’s a bit different.

Working as a software developer for some company, you have some tasks, some context and some defined goals. There is a relatively small set of skills you use and assess. Mainly, programming, communication, learning, teaching. So, if you meet all the deadlines, keep your team and clients happy and learn and adopt new things — seems like those skills are getting stronger. In other words, you are able to connect the outcome with your actions and skills.

The difference you’d feel as an entrepreneur in a startup is that the number of skills and actions is larger. Not that entrepreneurs are better than developers! Au contraire, they are worse: they don’t have a chance to focus on a single thing for long periods of time, they have to deal with lots of things, using different skills, but still have the same number of hours in a day as everyone else.

As a result, when your startup, say, gets more sales, you can’t always clearly see the path from actions and skills to this outcome. Yes, you can see the feature your team completed to get there, but that’s not deep enough.

It gets worse: sometimes the path isn’t there at all. Maybe, you had nothing to do with this increase in sales. Or maybe “nothing” is exactly what you did: sales increased because you didn’t do what you wanted, didn’t get in the way.

Startups are about learning, but measuring learning is hard. How your actions and skills affect the overall business is a topic for another discussion, let’s get back to personal growth. So, it’s the end of the year, there’s definitely been some progress over the months, but did I become better? It is very possible that I didn’t grow at all — my team did, my co-founder did, but not me.

Maybe, one way to tackle this is to imagine you-from-the-past dealing with today’s issues. But that’s impossible, unfortunately. That person is gone, you’ll never have access to your past, unless they invent a time machine. But even if they do, and you go there and ask you-in-the-past “what would you do in this situation?”, and get an answer (along with “what the hell, who are you?!”), what next? How to determine if your present answer is better and if it shows your superiority? But fear not, there is a way to evaluate personal growth! It’s called… embarrassment.

About 12 months ago I was convinced I have to spend weeks writing a huge project description and business plan, then hire 5 best developers and designers I can find, work for several months and release this awesome, successful and fantastic product everybody would love. If you’re into startups you know this is a bad bad idea. I know it now, and I feel embarrassed about considering that a year ago. Did I become better in thinking about startups? I’m pretty sure I did.

The best way to preserve this embarrassment material is to keep a diary. Write about your ideas, actions and thoughts every day, and review them in the future. Of course, if you’re embarrassed by everything you do in the past — that’s a bad sign. But if you have nothing — that’s even worse. So, hopefully, a year from now I will feel embarrassed about some of my current ideas and actions. The hard part is to accept the idea that you’re never perfect, you’re never the best. The idea is not to be the best, it is to be better.

December 14, 2014 | permalink