First some context: I'm currently a senior developer (mainly full stack web based experience) and I've been working professionally for 11 years. I've never had a formal computer science education (my degree had plenty of programming but nothing theoretically in depth) but I've picked up a little bit over the years from working on projects with senior developers and asking plenty of questions. I learn pretty quickly, I'll use whatever tool/language is appropriate for the problem and I like to think that my colleagues think highly of me.<p>I can't tell you how to write a bubble sort, I can't tell you differences between different sorting algorithms, I understand Big O notation but can't look at code and instinctively apply the notation, I know no path finding algorithms, and beyond arrays and hashes I don't know data structures like trees, double linked lists, and so on.<p>My not so simple question is this: should I spend time learning these things at this point? Will it help me problem solve but looking at a problem in a new light (or a previous solution in a new light)? Or given that I got this far without needing a formal CS education should I continue picking up what I need as I encounter it? Assume for now that I am not interested in engineering management / leadership roles.
If you feel like you not having the theoretical grounding is holding you back, you should do a few classes to get an appreciation for the theory. I don't think you need to go and do every single class though.
> I know no path finding algorithms, and beyond arrays and hashes I don't know data structures like trees, double linked lists, and so on.<p>you can learn it from
<a href="http://www.techiedelight.com/" rel="nofollow">http://www.techiedelight.com/</a>
Only required if you want to break new ground. Such as writing compilers, vm internals, 3d engines and machine learning. Then CS pays off. For your average PHP, RoR, ASP.net or Javascript programmer, probably not so much.