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 did my degree in physics and moved later into programming. I have two and a half years experience under my belt and like to think I write good code. I am, however, concerned that not doing a compsci degree has left holes in my knowledge. I would like to fill those up now since I know I want to be doing programming for the rest of my career.

What skills/techniques did you learn in your compsci degree that one wouldn't pick up from on-the-job programming?

share|improve this question
    
I learned all kinds of nifty mathematical proofs (some even related to computing) that I can write on non-programmers' whiteboards to leave them standing in their cubes scratching their heads. –  Joel Etherton Jul 8 '11 at 13:01
2  
@Joel Etherton You get a couple of those from Physics too :) –  Tom Squires Jul 8 '11 at 13:04
    
I also was a physics major before getting a computer science degree. The funny part is that the simplest proofs cause the most confusion. –  Joel Etherton Jul 8 '11 at 13:10
    
Yes there will be some things you are not very likely to learn unless you study computer science, but you don't need to go get a degree. There is some pretty good open courseware available. –  Jeremy Jul 8 '11 at 18:38
    
Obligatory: What every computer science major should know –  user16764 Nov 26 '12 at 23:49

8 Answers 8

up vote 7 down vote accepted

In all honesty, I had experience going into my computer science program to the extent that a couple of the graduate student instructors would check with me to make sure they were teaching the language right. There were some mathematical things I learned that I find remotely helpful in day-to-day stuff, but unless you intend to end up specialize in a particular intense programming direction you really won't get much. Even beyond that, in order to specialize a post graduate degree with an emphasis in that discipline is often the preferred route.

I think the most beneficial things I got from my computer science degree were some advanced instruction in Boolean Algebra, analysis of algorithms and automata theory. These are all things you will pick up on the job, but I do find it handy in some of the more complex situations to be able to identify a particular problem mathematically or through a proper state diagram. Algorithm analysis was also handy because we learned the pros and cons of various sorting, searching and filtering methods.

There were some data structures classes that I found useful, but in all reality you would absolutely pick up all of this information on the job from a supervisor, peer or mentor. In most cases, the computer science degree is just an expensive piece of paper that gets you through the HR door. As for becoming a better programmer, that is all experience related. Everything changes so rapidly that the degree itself is fairly superfluous.

share|improve this answer
1  
+1 Good answer. This has been my experience also. I would add to your answer that relational algebra and cryptology was helpful. Artificial intelligence was also useful in thinking about fuzzier techniques, and learning Common LISP while doing some research was invaluable in what it taught me about software design. –  Matthew Rodatus Jul 8 '11 at 13:53

An analytical way of thinking. It taught me how to think more about solving problems and discovering solutions than writing java apps. In fact I would say the weakest part of the CS program I've gone through was the software engineering side, collaboration, testing, etc. The strongest part of the program was it made learning new technologies straightforward since it focuses on learning the thought process not learning the technology.

Coming from Physics you probably have a better grasp on things than, say an English Lit major. I'm not sure what specific benefits you would gain.

share|improve this answer

I did a CS degree while trying to shadow physics ... damn you vector calculus!! :-)

I think that you can "pick up" an awful lot of things as you go. The things that I wouldn't have been likely to go out and learn include:

  • database normal forms
  • advanced querying
  • lambda calculus
  • some advanced data structures, though I will likely never reinvent them from scratch
  • finite state machines
  • demonic joins and other advanced relational algebra
  • formal language theory
  • recursion, different forms, why/when to use each
  • function currying
  • functional programming style
  • data relationship analysis

... but that's me ... I never really stopped to think, in depth, about the design and the relationships in my software. I think, perhaps, I would have developed that on the job through exposure to good code, but maybe not.

Hope this helps.

share|improve this answer

It has been years since I did my degree. However some things that come in useful from time to time:

  • An understanding of how computers work and the history of computing.
  • An understanding of how languages work and get compiled.
  • An understanding of logic (enhanced by my logic course from the philosophy department).
  • An understanding of the strengths and weaknesses of various languages. (I haven't yet seen a language which is good for all tasks.)

My best instruction was prior to entering my degree program. I did a few short (1 to 3 hour) courses. These introduced me to well written and well structured code and a couple of languages. (In one case a better introduction than the corresponding university course.) I also learned how to understand a new language quickly.

The Canadian Information Processing Society is updating its Common Body of Knowledge. It and other similar documents (IEEE, Australia and Britain) may help you assess your knowledge.

share|improve this answer
    
+1: Grammars and logic are definitely things I use on a regular basis. –  Joel Etherton Jul 8 '11 at 15:17

I think with 2 years of Programming and a Background in Physics you will be ok!

Physics has given you a couple of the most important skills Computer Science students get also, Problem Solving and Attention to Detail.

You have gotten over your 2 year experience hump so I would not be to worried, you can always minor in it if you have concerns or even go for a masters in Software Engineering if your bold!

We have an employee who has his Bachelors in Chemistry and a minor in Computer Science!

share|improve this answer
    
Add some software engineering tha wil show you the methodology of software development and you will be fine –  Gus Jul 8 '11 at 17:51

It has been my experience in working with quite a few engineering-type degree people is that they have a difficult time appreciating/creating a good modular design. I'm not sure if it is because their interest really isn't in software so it doesn't matter much to them or if they didn't get the education to do it.

share|improve this answer

In my eyes there are some things that make a computer scientist:

  1. Logical/Reasonable/Mathematical/Scientific/Technical thinking and understanding.
  2. Programming Skill
  3. CS Knowledge, i.e. theoretical (e.g. Turing machines, complexity theory), mathmatical (e.g. group theory, algebra, analysis, statistics) and technical (e.g. transistor, adder, cpu) and at least one cs specific field (like database technology, cryptography, ...).

Most people coming from somewhere else, are missing some of it. Its not important to have them all, you can be a good programmer when you got programming skill. Most programmers (and not computer scientists) have just good programming skill and cs knowledge in a specific field. This must not be bad and is enough to be a good programmer, but that doesnt make you a good computer scientist. Often when I see those people they are good, hell when they have enough experience, they can teach me in their specific field, but when it comes to the point where they need some of the other knowledge, e.g. because they have to come up with a algorithm for a certain problem of their own, the solutions are sometimes really, to say it mildly, funny. Also they cant often estimate impact of their algorithms or invent the wheel (because they didnt hear Algorithms 101).

Missing the thinking and understanding happens not very much, as most cs-foreigners have still technical/scientific background (physics, engineer,...).

share|improve this answer

I understand why you might feel this way. I'm sure you've learnt a lot on your own in the two and a half years that you've been working, but I am also of the opinion that a computer science degree proves beneficial in more ways than one. For starters, having a professional qualification, or in this case, a computer science degree, from an accredited institution goes a long way in securing better jobs in the future, but it also covers the finer nuances of the field that you might otherwise overlook or not find important. A computer science degree not only teaches you about the programming, databases and networks but it also teaches you about entrepreneurship and management principles. Nowadays, in fact, colleges have started providing programs to suit your interest and needs so you can choose the area of computer science you like best and focus on that.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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