You often see software engineers brag that they never used any CompSci in their very well paid jobs.

I been a software engineer and I never needed no CS and I’m still a great engineer. Waste of money!

Then others pipe in and talk about how the only time CS has ever been useful was to pass a whiteboard interview. Abolish the interviews! They’re testing pointless knowledge nobody uses!

And those people are right. You don’t need a CS degree to be a successful software engineer.

Write code, solve business problems, get paid. Best job in the world. Ka-ching 🤑

NOTE: This is a cross-post from my newsletter. I publish each email two weeks after it’s sent. Subscribe to get more content like this earlier right in your inbox! 💌

Nothing about algorithms, big-O notation, inverting binary trees, or knowing arcane lore about the Church-Turing thesis. Did you know it stems from Gödel’s incompleteness theorem that states, roughly, that you cannot design such an axiomatic system that is both useful and without paradoxes?

Fear not! You can read this email without a CS degree. I wrote it without one 🤙

5 years of CS, no degree. That’s how I roll. Thank god it was in Europe and therefore free 😛

You can’t use what you don’t know

I’ve had the strange fortune to be both a self-taught and a schooled programmergineer. Mostly because I often get ahead of myself.

There’s a moment from college that I’ll never forget 👇

I came to my future favorite professor’s first or second class on Classes of Computation by Strength. He was talking about determinism and mentioned briefly that non-deterministic algorithms also exist.

At the time, I was heavy into machine learning and probabilistic programming. Spent all my afternoons trying to figure out how to build a system to probabilistically determine which news articles you would enjoy reading based on various inputs like clicks, likes, and time spent reading.

This was 2009. We didn’t have algorithmic timelines yet. The internet was savage and raw. You get 500 tweets every hour. You read 500 tweets like a sucker.

“Are we going to learn non-deterministic algorithms?”, I asked.

“Oh no, that’s far too complicated. We’ll be sticking to determinism this whole semester.”

I decided the class was pointless and never came back. That was a hard exam to pass.

But while studying for that exam, I learned one thing: What my professor called non-determinism and what I called non-determinism were completely different concepts. He meant “class of computational problems that are unsolvable with approaches implementable in reality and can only be solved with a magical computer that can make guesses that are always correct”

What I meant was “use fuzzy random inputs and run simulations until you converge on the result and have no way of verifying that it is in fact the result”.

I was doing machine learning. Something I’d learn about in a different class 3 years later and think “Oooooh, THAT’s what I was doing!”

And that’s why I’m not filthy rich. Can you imagine if I actually implemented one of the first successful algorithmic timelines? How much would Facebook or Twitter have paid to acquire that startup? 🤔

There are libraries I could’ve used! LIBRARIES!

My programming career is full of such examples. It’s kinda sad.

In 6th grade, I built a 5000 line piece of software with only global variables named a , b , c , .... Then I ran out of letters and started using aa , ab etc.

Next month, at my coding extra-curricular, we learned about arrays.

I built a huge app with GOTO jump statements.

Then we learned about functions.

I once spent two months trying to build a fake 3D spinning pyramid. Sooooo much time spent on a gigantic block of if -> then statements to get it just right. And it still looked wonky.

Next year in math class, we learned about sin and cos . Translating between angles and circles and x,y coordinates suddenly becomes super easy. x = sin(alpha), y = cos(alpha) .

If only I had known what question to even ask!

There are many many more examples, don’t worry. I been screwing myself awhile.

It’s about knowing enough to know what to ask

Computer Science won’t make you a great engineer. Engineering will make you a great engineer.

My faculty of computer science even offers two distinct programs. One for computer engineering where you focus on implementing real systems, and one for computer science where you focus on pushing the envelope of what computers can do.

Either of those will give you the most important skill you need: A framework of knowledge. A map if you will.

With a map, you can find your way.

You know where the gaps are. You know where there’s stuff you should look up. You know the words to look for. You have a rough skeleton, an outline, of your field and you can fill in the blanks when you need to.

That is the number one thing self-taught engineers lack.

They know all the tiny little details, but can’t see the bigger picture. They see the trees, not the forest.

Not all of course. Some climb above and get a birds-eye view. But it’s easier with a helicopter.

Online courses help.

In other news…

Learn While You Poop has been going strong! We’re up to 11 videos, uploaded every day.

First one has been viewed over 2,645 times on Twitter alone 🤯

You can learn React from Why all the way to React 16.3 Context API so far. It’s all in a YouTube playlist.

I think the format is validated. Time to build a small website and stuff.

As you can imagine, this means I haven’t been blogging as much as I’d like. Here are the two things I published this week 👇

Livecoding recap: Blockchain-redux now shares blocks between clients in real-time about some cool stuff happening on the blockchain-redux project. Almost ready for the WeAreDevelopers talk in May. No pressure 😅

And Declarative D3 transitions with React 16.3 where I talk about building D3 transitions with modern React. Going to followup this week with a solution for full D3 integration.

Some stuff has changed. Need to update the React+D3 book and a blog is a great way to start :)

A few cool things

What about you?

What about you, did you ever bang your head against the wall only to later learn some crucial knowledge that would’ve made your life so much easier?

Leave a comment. I read everything.

Cheers,

~Swizec