logoalt Hacker News

josephgyesterday at 8:19 PM1 replyview on HN

> But if they actually spent time trying to learn architecture and how to build stuff well, either by reading books or via good mentorship on the job, then they can often be better than the folks who went to school.

Yeah I just haven’t seen this happen. I’ve seen plenty of people graduate who were pretty useless. But … I think every self taught programmer I’ve worked with had meaningful gaps in their knowledge.

They’d spend a week in JavaScript to save them from 5 minutes with C or bash. Or they’d write incredibly slow code because they didn’t know the appropriate algorithms and data structures. They wouldn’t know how to profile their program to learn where the time is being spent. (Or that that’s even a thing). Some would have terrible intuitions around how the computer actually runs a program, so they can’t guess what would be fast or slow. I’ve seen wild abstractions to work around misunderstandings of the operating system. Hundreds of lines to deal with a case that can’t actually ever happen, or because someone missed the memo on a syscall that solves their exact problem. There’s also hairball nests of code because someone doesn’t know what a state machine is. Or how to factorise their problem in other ways. One guy I worked with thought the react team invented functional programming. Someone else doesn’t understand how you could write programs without OO inheritance. And I’ve seen so many bugs. Months of bugs, that could be prevented with the right design and tests.

I’ve worked with incredibly smart self taught programmers. Some of the smartest people I’ve ever worked with. But the thing about blind spots is you don’t know you have them. You say you’re self taught, and self taught people can be better than people who went to school. In limited domains, yeah. Smart matters a lot. But you don’t know what you don’t know. You don’t know what you missed out on. And you don’t know what problems in the workplace you could have easily solved if you knew how.


Replies

abustamamtoday at 1:49 AM

Yeah, I agree, but not knowing what you don't know applies to almost everyone in every skill, not just programming. I acknowledge I have gaps in my knowledge. But it's because of those gaps that I am always trying to supplement my knowledge by studying different data structures, different patterns for solving problems, different algorithms. I don't aim for complete mastery. I aim for basically "what can I add to my bag of problem solving tools." I concede that because the barrier to entry is low, stories similar to your anecdotes are probably quite common in most self-taught programmers. I think this just speaks to the necessity of rigor during the interview process. Like, does the candidate just know how to build features, or do they know how to design fail-proof systems?

Also, to clarify, I'm not arguing that self-taught vs CS grad is mutually exclusive to smart/not smart. There are plenty of not-smart self-taught engineers and plenty of smart grads.

> In limited domains

I'd argue that many, if not most, teams operate in limited domains.