Skip to content

Comment on Self-Taught Developers: Are You Missing Your Foundation?parent

Comments

What about being able to analyze efficiency (Big O), understanding compilers, full understanding of computer architecture, realizing how the CPU executes code, knowledge of advanced algorithms, knowledge of the OS workings, and AI fundamentals? That's generally what I see self-taught people lacking, i.e., deep understanding of anything outside of languages.

You realize these pet topics are only 5 university courses. It would be a intense 4 month semester, but it's workable.

  1. full understanding of computer architecture, realizing how the CPU executes code
  2. analyze efficiency (Big O) (a few hours), knowledge of advanced algorithms
  3. understanding compilers
  4. knowledge of the OS workings (often self taught out of necessity) 
  5. AI fundamentals (Admittedly a specialized topic)

I wholeheartedly disagree. First because I'm a self-taught developer (if such a thing is actually possibly), and second, because I often find myself studying deeply into things outside of the languages I use. A self-taught programmer isn't any less (or more) motivated to study Comp Sci topics than a CS student and most school's curriculum are wide open for anyone to inspect. Most self-taught developers I know are actually mostly the same, deeply passionate, driven, insightful, and knowledgable in a wide range of Comp Sci topics. But as the saying goes, birds of a feather flock together. I suppose I wouldn't necessarily engage with self-taught programmers who don't exhibit any kind of depth any more than I would a University CS graduate who lacked depth. Having said that, none of us are experts in all things Comp Sci related.

The difference between a self-taught programmer and a college CS education is that the self-taught studies what he wants to. If a self-taught person dives into the CS pool, they often learn much more than a B.S. CS person because they are learning what they want to.

However, some self-taught people have conditioned themselves to hate CS due to constantly needing to prove to companies that they are qualified for a job despite not having a CS degree. These people place little value in understanding CS and because of that they are worse off because they weren't forced to learn it.

It all depends on what kind of person the developer is, and I am glad that you are the first kind. I'm getting tired of HN bashing any article that suggests that perhaps a developer doesn't know everything.

I'm a self-taught engineer, and I first picked up Big-O when I was 16. (That was almost 20 years ago). I've written a linux kernel patch (rejected), toy compilers, and the two big no-nos of software development ( 1: Writing your own lock-free code, and 2: Writing a string library, both of which went successfully into production ). I've built my own microprocessor from NAND gates, and wrote the microcode instruction set to go with it. I've studied VLSI (ages ago), but I've never dug into AI topics.

There is one way in which I feel handicapped compared to my colleagues, which is that I find it generally hard to grab a book on a programming topic and read it cover-to-cover (The same goes for taking classes). I've got to get a development environment up, see how I can break the 'examples', and generally abandon the book to doing my own thing before I get more than a third of the way through.

On the other hand, every time I've worked with more classically trained developers on real projects (and all the cruft that goes with it), I always find that there are corners of the code base that none of them understand, and no one ventures in to find out what's wrong.

Myself, I need to understand how a system works in order to work on it, so I always dig, and tweak here, or tweak there, and so I tend to learn full systems much quicker than my colleagues.

In the end, it's a trade-off, but it's how I work, so I guess I'm stuck with it.

As someone who had started out as a self-taught programmer and only after a couple of years went back to school to get a degree, I can confirm that. I think the only thing from your list that I had been familiar with from my self-studies was the Big O notation and some algorithms and data structures. I first went back to get the degree mostly for the piece of paper with better job security and salary prospects in mind, but I actually enjoyed hearing about most of these things. I would add two things to your list which were great fun: automata/languages (I had known how to use regular expressions before, but I had no idea where they came from and how they fit a bigger picture) and heuristic algorithms (like simulated annealing and what not).

In all honesty, I can't say I know for a fact that knowing these things made me a better developer. It's hard to quantify. In your day-to-day life you don't generally use such knowledge. It's entirely possible that it didn't make any difference to my actual work. I certainly did use it during job interviews and lunch-time conversations with my coworkers.

That's generally what I see self-taught people lacing, i.e., deep understanding of anything outside of languages.

What a shame. There are lots of very accomplished self-taught people who know much of this stuff and are busy changing the world. I sincerely hope you get a chance to meet many of them.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.