I've been considering moving to a new city (getting seduced by those big city lights), and I'm trying to decide if my lack of "computer science"-y skills is going to make me overly uncompetitive. Let me explain my situation a bit more:
Programming since jr. high school, professionally since 2004. I've worked for a small company that does custom web applications (PHP) since 2006.
I've studied design patterns on my own, and used them in my work.
Worked with MVC frameworks (PHP) for a couple years now. I have a strong understanding of how to write good, maintainable MVC code that adheres to the principles of MVC (rather than just cramming code into wherever I can in the framework.)
Recently done some work with C#, through which I'm learning dependency injection and the MVVM pattern. Grokking these, but still a ways to go.
Where I get nervous is with the things you'd learn in a CS degree. My degree is in aerospace engineering, not CS, but I've decided that programming is the thing I really care about.
What I know:
Basic data structures: I took a class in which I implemented basic linked lists, and queues and stacks built on those. I've written a basic binary tree (inserts, various traversals, but not removal (I was really drunk when I wrote the code, and it turned out not to work at all)). I know about hash tables, and understand some of the principles of their implementation.
I understand big-O notation, but since I'm not really familiar with algorithms, I suspect I might miss interview questions about this topic. (what's the worst-case insertion time into a hash table? I have no idea.)
What I don't know:
Don't really know formal algorithms at all. I couldn't sort my way out of a paper bag (well maybe bubble sort, which I know is O(n2)). I guess I know some of their names.
Never written a parser, or compiler, or any component of an OS. I've never done anything interesting with concurrency (e.g., anything beyond using basic asynchronous calls in .NET to keep my UI from blocking.)
I want to learn all these things, purely out of interest, but for now I simply don't have time right now with main job + side job + life outside programming (gasp! I know). I don't want to put my larger life plans on hold unnecessarily if I don't have to.
I'm not aiming for a Google or a Microsoft, but I'd like to at least get a job that's interesting. How much will I be held back by the deficiencies I've listed? I feel relatively confident that in a job I would actually apply for and get, I would be able to perform very well, but what about interviews?
I'd like to know:
- How crucial are computer science topics toward getting a job?