What are the most common knowledge gaps a self-taught developer has and where/how can one find out about them?
So good news: you didn't necessarily miss very much. Get a basic algorithms/data structures book and skim it, and you're good to go.
But like all programmers there's lots more to learn, and mostly you will learn it on the job from coworkers. Things like testing and API design and performance analysis.
http://sijinjoseph.com/programmer-competency-matrix/ is useful (you don't need to be top at all of it, though!) but leaves out a lot of important skills.
Not that you learn much of those at school either :)
hardware, chip, logic gate design. Asm.
inheritance, templates/generics
compiler design, some math stuff
fizz buzz, fibonacci, fucking sort functions, and palindromes
(From what I've seen from other devs)
Best advice I could give to any professional is to ACTUALLY READ the great books of the field. Everyone wants the distillation and the cliff's notes versions, and a lot gets lost in translation. There are a lot of threads on HN where people recommend their favorite programming books.
The other thing would be the old "harder you work, the better you'll get" adage. Book learning can only take you so far.
It is hard to know what you have missed, since you specificly say webdev, you can get by with very little knowledge and still make functional websites. Im guessing that low level stuff is what you are probably missing, maybe some design patterns.
I think the best way to get validation of your skills is to get your work peer reviewed, either by working in a shop that actually does code reviews or participating in open source or even just putting your own stuff on github.
Years later, I went back to school and finished a degree in marketing. Oddly, I wrote way more useful code while I was studying business, and developed a tremendous sense of navigating client expectations versus technical limitations.
My background might influence my answer - I have had an interesting career despite (or perhaps because of) my marketing degree. I'm not convinced that I would have accomplished the same things with a CS degree. Accounting (my first business major) and marketing helped me look at technical projects in terms of market opportunity vs cost.
That said, I have missed out on things. When I work with young developers and the subject of Big O notation comes up, I am usually at a complete loss. I've also had to invest quite a bit of time reading large, well maintained open source projects. I simply don't have much formal training in algorithms or design patterns and so it's nice seeing them implemented in projects that I use.
Also, I occasionally wonder about things like the strength of my network. Maybe a CS degree would have given me the chance to meet a few more people who could help me in my career. It seems like the vast majority of the people I graduated from business with work for banks. I can think of a dozen ways I'd rather torture myself than working in a bank...:)
To answer your question, the biggest knowledge gaps for me where in the following: Mathematics, Physics and just being able to parse and understand theoretical stuff like books and articles on information or complexity theory.
The biggest thing that has helped me has been to just do tons of math, i.e. working through calculus, linear algebra, combinatorics, probability theory, etc. and once you get relatively comfortable with these subjects most of the "CS Theory" stuff seems pretty simple IMO or at least easy enough to understand and apply.
From experience, I can also tell you the theoretical stuff is generally the biggest gap all developers have whether they have a degree or not, simply because they are developers not theorists and rarely if ever use 90% of the theory except perhaps O-Notation.
So my advice would be to do lots of math/physics in your free time if you're not already really comfortable reading and comprehending more advanced "math texts". Once you get comfortable there, I'd just read the following books till you understand and can apply them, if you do that you will probably know more than 95% of software developers out there.
Books:
1. Introduction to Algorithms (by Cormen,Leiserson,Rivest,Stein)
2. Introduction to Automata Theory, Languages, and Computation (Hopcroft)
3. All of Statistics (Larry Wasserman)
Perhaps you can figure out what you don't know by looking at the study schedule for a computer science program?
Of course this can be done with self study as well.
Since no one will fill you in, you should go check some well written open source projects to see how others solve problems.