Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

  • Full complement of web development skills (normalized databases, SQL, HTML, CSS, JavaScript), and I'm very confident of my skills in these. Also aware of security issues, and how to write a secure application. My main deficiency is scalability, which I've never had a need to learn, unfortunately.

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.)

  • I've done a little bit of functional programming by way of JavaScript, python, and dabbling in Haskell. (I realize the first two aren't functional programming languages, but they have functional aspects to them). I understand currying and higher-order functions.

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?
share|improve this question

closed as off-topic by MichaelT, gnat, GlenH7, Kilian Foth, Ozz Oct 2 '13 at 10:39

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – MichaelT, gnat, GlenH7, Kilian Foth, Ozz
If this question can be reworded to fit the rules in the help center, please edit the question.

6  
At least you know what you don't know. +1. –  Toon Krijthe Sep 15 '10 at 18:01
1  
@Gamecat - +1 for that. When I interview someone, I value the ability to describe where and how they not know something as quite a reliable indication that I'm talking to a pro. It already takes quite some understanding of a field to know one's own limitations. –  Hanno Fietz Oct 28 '10 at 10:41
    
add comment

6 Answers

up vote 9 down vote accepted

In one of the companies that I've worked for, most of the developers there finished college with degrees that are completely unrelated to Computer Science. Most of them are just self-taught when it comes to programming and they are the big guys in our company, mind you. The most important trait a developer should have is self-motivation and initiative when it comes to programming so I'm pretty sure you'll be fine if you're not aiming for Google or Microsoft. Maybe in a few years after getting actual work experience in the industry.

share|improve this answer
1  
Ditto to that. Many of the good developers I work with have come from diverse background. EE, CE, Mechanical, Physics, even Spanish and Business. And when I mean good developers, I really mean it. –  luis.espinal Oct 14 '10 at 21:33
2  
@luis - unfortunately, not having a CS background doesn't necessarily mean someone is good, either. But you didn't imply that, did you? I sometimes miss some CS in my background, that's for sure. –  Hanno Fietz Oct 26 '10 at 9:52
1  
@Hanno - nope, I didn't imply that :) A CS background, however, is vital from certain specialized tasks, and it can helps in detecting certain classes of coding "red flags" (inefficient access to resources, abuse of OO or lack thereof, etc.) In the end, I think programming is a natural talent, and a person with that talent (under the right conditions) can become a good programmer, with our without a CS background. –  luis.espinal Oct 26 '10 at 13:01
    
Several of my friends have physics as background, and currently have great positions at Microsoft. So even at Microsoft (and Google, I believe) Computer Science is not required. –  Niklas H Jan 13 '12 at 13:34
add comment

My experience is that there are loads of working programmers with degrees in other fields. In fact it can be a positive if your degree demonstrates domain specific knowledge related to the company you are interested in working for.

As for the computer science-y stuff. Unless you are working at one of the "Brain-shops" like Google where they do a lot of theoretical stuff, I don't think it will hurt your chances much. The sad truth is that 90% of programming these days is gluing together other peoples code (frameworks, APIs, etc.) and very rarely do you need to write algorithms for anything trickier than "Read from database, write to database, add some good error handling."

share|improve this answer
add comment

Depends.

Most of your skills are self-learnable.

  • If you don't know algorithm analysis, you are much more likely to stumble into writing hideously inefficient code.

  • If you don't know the basics of theory of computation/complexity, you might wind up trying to solve n-sat naively.

  • If you don't have a handle on an algorithm book (or three), how will you know what has already been done?

Okay, so you can bang out line of business apps. Sweet. There are tons of shops out there that need that exact ability.

Practical knowledge can be learned by anyone. It is not an advantage over the long term. (Experience is an advantage).

But your knowledge of computer science is is subpar and will hamper you if you want to move into more edgy areas of programming.

You will have to make the career choice to either push towards dealing with your gaps (possibly a non-thesis Master's would be a good choice) or decide to focus on the line-of-business and other areas that don't require that extra edge.

share|improve this answer
    
Practical knowledge can be learned by anyone. Maaaan is this far, far from the truth in my experience. I've interviewed plenty of programmers, some with CS degrees that couldn't even get the basics. –  notJim Sep 16 '10 at 6:14
2  
@notJim: I've found that practical knowledge is moderately easy to pick up and is a fairly "mechanical" thing. Finding someone who gets theory? much harder. There's a big gripe by the C#/PHP/line of business/webapp people that theory is outdated/useless. I come down really hard against that view. Every other day I need CS theory pretty much. –  Paul Nathan Sep 16 '10 at 6:21
    
I'm certainly not trying to discount the value of computer science skills (and I'm familiar with the attitude you're talking about [cough]slashdot). I'm just making the point that people with good practical skills are not easy to come by either, at least in my experience. Of course, these topics are not orthogonal, either. Ideally a developer really needs both. –  notJim Sep 16 '10 at 7:02
    
Not all skills are self-learnable. If you have trouble understanding a subject, take a class. A good teacher and some incentive (good grades) to solve a problem can overcome the occasional self-learning obstacles. –  Jay Elston May 31 '11 at 4:09
add comment

IMO, the big factor in your favor is that you started on your own, stayed with it, and eschew your actual degree in favor of coding. Those are signs of a programmers' programmer. I'd hire someone like you over someone with a CS degree any day of the week. About the only area it might hurt you is if you are going for a job for something computer-sciency, like writing compilers or embedded systems. Then you might have a disadvantage. But since you have an Aerospace degree... pesonally I find that far more impressive than a CS degree.

Actually, as I'm thinking about it, you might still consider Aerospace positions. A lot of the engineers I've known were essentially programmers, since thats all they did.

share|improve this answer
    
I don't understand why people vote you down. Your post was right on, and in my own experience resembles what I've seen. Most engineers (specially aerospace, EE and CE) do a lot of programming anyways. –  luis.espinal Oct 14 '10 at 21:35
add comment

The fact that you have an aerospace engineering degree and that you can program puts you above many. I would not worry if I were you. Having that degree and your programming experience opens a lot of doors in the DoD and industrial sectors.

There are ways to formally get those things you desire to learn (algorithms, automata, compilers). There are traditional brick-and-mortar universities and community colleges out there that provide distance learning courses (I'm talking real universities and colleges, not diploma mills.) You can take one course here, another one there.

I don't know your specifics in your life, but I can tell you that you don't have to kill yourself and go to school full-time again to learn those things. Just take your time and look at it as a midterm (rather than short-term) process.

You could do it yourself (you seem to have what it takes for self-study), but sometimes it is better to put oneself under a curriculum (specially when we have work, family and gasp a life.)

Having said that, one of the things I would do if I were you is to buy "Algorithms in a Nutshell", and go one algorithm at a time. Also get the classic MIT textbook "Structure and Interpretation of Computer Programs" or SICP for short, and work through the chapters. These two will lay the ground for more advance CS stuff should you wish to pursue it.

You will have to take a course or do the work yourself for algorithms, and compilers (plus you need to get the nitty gritty of discrete mathematics and theory of computation.) Take your time and do it one step at a time.

My suggestion, should you wish to pursue it, would be to take the following in the given order:

  1. Discrete Mathematics
  2. Theory of Computation
  3. Algorithms/Algorithm Analysis
  4. Compilers
  5. And maybe get and read Wolfgang Mauerer' "Professional Linux Kernel Architecture" just to cover your OS bases.

Don't try to cram it all up, nor sacrifice your life out of work. Just take it one step at a time. You don't need any of this to do your job, but if you want to strengthen your CS knowledge, this would be the sequence I'd suggest to do (which will would definitely open more doors to very, very interesting software jobs.)

share|improve this answer
    
Thanks for the info, especially the order! I recently tried to do an OCW algorithms course, and totally didn't realize that discrete math was a requirement. Unfortunately, I've never taken discrete math. –  notJim Oct 14 '10 at 23:13
    
Discrete math shouldn't be a problem given that you already have a math-based engineering background. It might entail work, but it should be doable ;) –  luis.espinal Oct 14 '10 at 23:41
1  
You should consider taking some CS classes to fill in the gap, one at a time at a local university. Most of it will make sense to. To avoid wasting your time, get a copy of the text and see how far you get into answering the exercises at the end of each chapter. If you learn from the book and master the topic, great. If you struggle, take the class :-) Check out the core curriculum of some of the leading universities for what is considered key knowledge. The education may not be important for an immediate position, but the breadth of knowledge will help you in the long run. –  Jay Elston May 31 '11 at 4:08
add comment

Since you do not aim for Microsoft or Google, you should be fine. There are plenty of self taught programmers, and while these things are great to know, there are plenty of jobs that don't do anything too academic, algorithmically.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.