123 comments

[ 5.3 ms ] story [ 94.7 ms ] thread
[flagged]
down arrow key scrolls the modal for me
I was actually talking about this with a dev this morning.I might reframe this away from self-taught and more towards on the job experience.

Obviously, I think it depends on the domain you're working in, but most comp sci majors really learn math and algorithms.

Math is great, of course, but the vast majority of app and web developers never use any of it. So at the end of the day, even with a proper technical background, everyone is really self-taught when it comes to Python or React programming when they get a real job.

This is a broad brush, but then you get data scientists with academic background who maybe learn R or Python for analysis, which again is great, but they don't necessarily learn OOP principles or exception handling and so their code quality is bad. Yet, they are often tasked with creating apps or doubling as a dev and so they too end up becoming self-taught to a degree.

Just two cents

Self-taught is a double edged sword.

It generally can't occur without some level of passion for the material. But you also tend to miss the boring details.

As a mostly self-taught engineer, the reason is simple: after 5 or so years, the language, tools or architecture is going to be dramatically different and you have to learn on the fly. Heck, even how to learn has changed dramatically. When I started, I learned languages from printed books. Then docs and Google, then added StackOverflow, now AI.
I think one needs to be careful with statements like this. Is it the case that those who outperform tend to be self taught? Or that those who are self taught tend to outperform?

I can easily see why the former is true. The latter seems a lot less likely.

Think of knowledge as a circle on a board. https://matt.might.net/articles/phd-school-in-pictures/ is a great example.

Everyone that goes through university learns within a pretty similar circle initially. That circle is surprisingly narrow in the broader field. Who has time to teach the dmc algorithm (used in all highest ratio data compression software) for example. Instead everyone's taught a pretty common curricula in all comp sci courses despite the field being much much larger than that.

Now some who go through university will go well beyond that circle of knowledge. These are the most amazing programmers you'll ever meet. They'll know algorithms that are mentioned in white papers, not taught in courses and they'll kick ass. Those who've been in the industry a while have met a few like this.

Likewise self-taught engineers. They may have humbling gaps in knowledge of that big circle of knowledge that everyone that went through a comp sci course was taught. This may be a constant source of imposter syndrome but also humbling motivation for them. What they'll also know is a whole lot of stuff outside any standard curricula. After all they have the same motivation that the super engineers who went through university and continued to self-teach had. Their circle of knowledge was organically created through passion and that passion is actually one of the best signals for performance in not just engineering but anything in life.

University classes are great. They force you out of your comfort zones. When I was self taught I would never have pushed through learning the socket API in C, doing so many projects in bash, studying the academic side of distributed systems, data structures, common algorithms. Stuff like that.

I interview a lot of self taught people, or boot camp graduates, and their issues is often that they pigeonholes themsleves into a comfort zone, or they fall apart when you ask them about academic topics that are relevant for the job.

On the other hand, people who never taught themselves anything code related often suck at coding, or they've forgotten a lot of what they learned in college. Hell, for some of them, even while still in college they've forgotten a lot of what they were taught the years prior.

It's best to have done some code by yourself before university, so that you have faced the problems that arise naturally, and when the courses present you with clever solutions to them, you retain them. You don't just dismiss them as fancy theoretical stuff you need to know for the exam, then promptly forget. You've footgunned yourself with memory management enough times that it speaks to you when you get explained RAII.

By the time I got to university I already knew C and the socket APIs and have been paid for delivering software that uses them. I had a friend who made a lot of money selling games he wrote in high school for the C64. Both of us were well ahead of new grads in terms of raw programming skills.

What I was missing were things like Calculus, Linear Algebra, Discrete Math (I knew parts having read TAOCP but had gaps). I knew data structures and algorithms but learnt some I didn't. I had some other random theoretical exposure but the CS program plugged some holes and I did learn random things I didn't know. I also learned more about how to learn.

I think the CS program made me more well rounded. I don't think it made me a better programmer. There was zero challenge for me in all the programming related courses. Where I had to work was on the math and theory side.

Totally agree that the sweet spot is a mix: struggle on your own first, hit walls, make a mess... then when the structured material shows up, it actually means something
Boot-camp grads are not self-taught, they went to a boot-camp. Boot-camp people are career opportunists. Nothing wrong with career opportunists, just saying that they are different than a self-taught dev.
It really depends on the university, and then also on the lecturer.

When I was self-taught, I learned the socket API in C because I needed it for what I was trying to do. This was long before college, and when I got to the latter, it turned out that the person teaching us networking only knew the absolute basics of the API, and I could already run circles around them, so it was the opposite of "out of my comfort zone" (which is "in the boring zone").

How do you define self taught?

Linus Torvalds was a CS student when he released the first version of linux...

I'd rather say you need both "breaking your teeth" on your own projects and some formal training on top of that.

The reactive ingredient is passion, not the learning modality. Low motivation is really limiting, no matter how you like to learn. Of course, this topic is hard to discuss in a quantitative way because the number of engineers you come across in your career is a minuscule fraction of the total. Hard to draw broad conclusions like this, but here are a few:

- Formal education is great for foundational concepts (math, hardware, operating systems, compilers, graphics, etc.). Self-taught approaches tend to be goal oriented (I'm learning X because I want to do Y), which can overlook fundamentals that are important. When you don't know what you don't know, having someone to efficiently guide you can save a ton of time, and for some topics, that mentor is a great textbook or teacher.

- Most engineers I know would consider themselves a mixture of formal and informal/self-taught. Again, if you have passion for engineering then you probably like to learn and build, which means you're complementing any formal training with your own tinkering.

I've met and worked closely with amazing engineers and have never found their education style a distinguishing factor. Their passion however, was obvious.

Also, the examples given in the post (Linus, Margaret) were incredibly academic :-)

Because we have to. It's obviously survivorship bias. I don't have a single chance at interviewing against someone with a degree unless I can undeniably prove that I am head and shoulders above the pack. And so you grind and grind and grind in a way that someone with that piece of paper to rely on doesn't feel the need to, because the bar is that much higher.

It wasn't always this way; making it without a degree used to be a badge of pride in this industry. But the glut of CS grads these days has made it something of a handicap to be brushed around at this point.

As a self taught engineer who hasn't read the article or done any research I can confirm.
Anecdote: I grew up in a poor family, that was single parent for my teenage years. I dropped out of high school when my son was born and I was 17. I never went to college. I was, however, a lifelong nerd and by mid-20s was able to get a foot-in-the-door job in IT. I'm 40 now and have been doing my dream job for almost 8 years. My current position was for a job that required a degree on paper. During my interview (all of them actually) I was honest about education, but also work experience and personal interest in the field, and got the position. That was 2.5 years ago and I hope to retire here.

I'm sure there was some luck involved, but just having a singular focus on computer adjacent fuckery, I managed to build a pretty successful career being 100% self taught.

> Linus Torvalds built Linux by rewriting MINIX to scratch an itch. Margaret Hamilton debugged Apollo guidance code on-the-fly, inventing modern software reliability.

Their very first examples are Engineers with formal training. Formal training gives you the mathematical and engineering maturity TO tinker.

Torvalds had very little formal education in computer science when he released the first version of Linux in August 1991.
Margaret Hamilton (checks wikipedia) studied mathematics at the University of Michigan in 1955.

Back in 1955, "computer science" wasn't a thing yet. Computers were the domain of electrical engineering and math, the latter of which was what Margaret studied..

Well, "Case Studies of Tinker-Born Mastery" is a pretty LLM-sounding heading if ever I've encountered one, and that bulleted list of examples...

It's interesting to think through which of the LLM-produced texts that I've read recently have delivered value and which haven't. This one doesn't impress me, but there was one about social skills I thought was good – yet the comments there pointed to maybe that being because it was synthesizing some high-level points from a book. Getting the model to go fishing for ideas rarely seems to work out to anything that feels worth my time.

Nah, you need both. A formal foundation in core concepts is the bedrock upon which to do self-study. The smartest engineers are the academics. They're the ones who design new algorithms for the rest of us to use and their achievements are built on deep knowledge-sets, which are mostly formal.
Slightly misleading headline. This article is about programmers not licensed engineers.
Self taught then got the paper degree from the daycare. Best combo. Ok to be fair the college did teach me a lot I didn’t get while self taught.
Probably the actual difference is what you are able to retain in your memory.

I know that the parts of computer science I learned on my own or while on the job, are far more sticky than anything I studied in university, even back then

Also there's a different in what you think you understand and what you actually understand

Having been on both sides of the fence I can definitely speak to autodidacticism as having yielded some of the most durable and rewarding lessons of my lifetime spent programming, if only because I was really internally motivated to try my hand at game modding, or writing fun toy websites or mobile apps, or even learning Haskell. There are indeed some practical realities you will learn how to overcome that simply are not (and should not) be covered in a usual computer science curriculum (e.g. git, vim, basic shell fluency, etc.).

At the same time I feel that the self-taught dev or bootcamper from the 2010s is really a far cry from the geek culture of yesteryear. As opposed to misfits obsessed with computers, we now have grifters appropriating geek culture to make a buck off the industry. These people lack internal motivation; they are driven only by the external motivation of monetary reward. Consequently it's unlikely that they would delve into more of the esoterica of computing that, while interesting and fascinating to learn about, doesn't yield immediate monetary benefit.

In concrete terms what this amounts to is people "self-identifying" as "senior software engineers" who have never heard of the term `xor` in their life, and don't even understand what a truth table is when it's drawn out for them.

Even still, those who are highly internally motivated are still likely to have blindspots in their knowledge or not know that a field of study useful to them even exists, which is why having a more systematic and thorough review of the field's basics is useful.

Is knowledge of basic boolean logic, "advanced and impractical theoretical computer science," or merely, "table stakes?"

When anybody can identify as anything you eliminate the possibility of drawing meaningful distinctions and assessing qualifications.

I used to call myself self-taught because I never finished my CS degree, but the truth is I learned a lot of formal methods and techniques in college, and I wouldn't have been able to succeed without it.

Formal education is the beginning, not the end, but if you have the opportunity, why not take it?

Linus Torvalds given as an example of self-taught engineers yet he has a masters degree in CS.

Higher education isn’t just about what you learn, it’s about learning how to study and learn.

> Linus Torvalds given as an example of self-taught engineers yet he has a masters degree in CS.

The example was Torvalds building Linux. Linux was written before he attained a CS degree.

> Higher education isn’t just about what you learn, it’s about learning how to study and learn.

You'd have to have screwed up your life pretty bad to not have already learned to study and learn before reaching the point of going to a place of higher learning. But that wasn't a problem for Torvalds anyway. It is well known that he was writing software since he was around 11 years old. He is unquestionably self-taught, as the term is normally used.

Higher education is about gaining access to machinery that mere mortals can't afford on their own. Linus' university story is significant because that was where he was first able to use Unix. It is unlikely that Linux would have come to be without that experience.

But that is also the contention around a modern CS degree. What is the "Unix" of our time that you can't reasonably access without going to university?

Sure, but with that argument I think you could say most people in software engineering are self taught. If you want to get a job as a SWE you probably need to learn a lot outside of the classes for a typical CS degree.

But I don’t think that’s as much of a black mark on formal higher education as the article suggests. Since the reality is, the vast majority of people aren’t organized, driven, and bright enough to learn all of the fundamentals taught in a CS degree on their own. That’s why I don’t think it’s smart advice to recommend spurning a CS degree in favor of being wholly self-taught.

To your last point, what can access at a university that you can’t get elsewhere? People. Namely, a community of like-minded peers, and personal relationships to experts in the field. Those relationships and mentorship opportunities are far more valuable than the content of the syllabus. For that, I agree it’s all available online.

Learning to learn efficiently is an incredibly useful skill that is required for survival in the self-taught path. Deciding what to learn next while making progress in your project in order to strategically unlock better decision-making at the right time before investing in the wrong path will compound over time and lead to increasingly improving skills like technical design, architecture, and project planning. The only major downside to this path in my experience is the increased probability of impostor syndrome which can be detrimental specially during the early years of your career and when you are trying to grow into the next level.
The article is specific to software engineers, and perhaps it's accurate within that discipline. The field is incredibly broad—ranging from writing small support scripts to engineering massive distributed systems—so it's plausible that a self-taught engineer could excel in certain areas. However, I don't believe this holds true, or is even feasible, for other engineering disciplines. In those fields, earning an engineering degree is typically a prerequisite. After that, you're free to self-teach and explore further, but without that formal foundation, it's difficult to progress meaningfully.

Side note: I think the term self-taught is often misused. Very few people are truly self-taught in the sense of starting from a blank slate and independently mastering a subject without any guidance. What the article refers to as self-taught is really just informal education—learning through blogs, tutorials, bootcamps, or YouTube University.