My question is will I be able to compete with Computer Science graduates, assuming I know the relevant programming languages and have some experience?
Moreover, much of what needs to be done with programming doesn't require CS knowledge as such, but rather a lot of ancillary skills that aren't taught in any school; some of them are barely even mentioned in books. There you and the CS majors start out tied.
Conspicuous among that set of skills are business skills: Not MBA stuff, but things like "here is a potential customer: what are their actual problems, can I help solve them, can I prove that to myself, can I prove that to them using words they will understand and like, will they really pay me?" So much of your work will be about these things, in programming or in physics, and CS training doesn't teach them any more than stat mech class does.
I will close with one of my favorite anecdotes: Michael Crichton wanted to be a writer. His family told him he was crazy, you cannot support yourself that way and encouraged him to be a doctor. So he went to medical school. And his first book was published before he graduated, so he never did work as a doctor. Still, his overwhelmingly successful books and movies are all the richer due to his educational background. Jurassic Park and other works would not be so compelling if, like so many authors, he had some throwaway explanation like "er...radiation! That's it!"
Not intended as advice, which is nearly "against my religion". Intended only as food for thought.
Best of luck.
I graduated from a small liberal arts school with a degree in Physics (and a minor in CS). I actually would have done Computer Science, but the university's program didn't teach the things I was interested in -- but let me be clear: computers were my primary passion.
I got a software engineering job offer after graduation, but I decided to go to grad school instead and I'm now finishing a masters in Computer Science. When I started, I was worried that not having a BS in Computer Science would handicap me compared to other students, but it didn't seem to (or at least grad school is hard enough for everyone that I didn't stand out).
My work and my interests are in Free Software, and what I'm finding out in applying for jobs is that companies (especially those that deal with Free Software) care very much about your contributions to Free Software. It's obviously easier to get a handle on someone's skills if their entire portfolio of work is available in public git repositories.
In working with different projects, I've also gotten to know developers who work on the teams that I'm applying for jobs on. I feel like this gives an extra advantage that's not easily available in other fields.
The summary of this is that the degree doesn't matter so much. What matters (at least in the world of Free Software) is what have you contributed and who have you worked with.
Another data point: a number of really good software developers at Red Hat have non-computer degrees or no degrees at all.
Owen Taylor (GNOME) - Physics
Jerome Glisse (AMD driver) - PhD in Biology
Matthew Garret (Kernel, power management) - PhD in Biology
Ben Skeggs (Nouveau driver) - no degree
If you learn C/C++ programming, you'll be able to get a job at an investment bank and won't have to worry about money. If that's something that attracts you, study (and write code) in a field where Monte Carlo simulations are used, like lattice gauge theory, which is a lot of fun and will help you understand QFTs. Here's some links to get started:
http://latticeguy.net/mypubs/pubs.html
Some C code:
http://thy.phy.bnl.gov/~creutz/z2/
If you want to do something like a web startup and learn Ruby on Rails, then Physics won't help you much. You'll just be on equal footing with CS guys, if you put in the time.
PS: Most physicist I know are absolutely terrible software engineers. If you're going to write larger programs, please read some books about how to write larger programs!
Being a physicist, you probably can't wax eloquently on the tradeoffs of functional v. object v. imperative programming styles. Or the subtle nuances between closures and Lisp and closures in Javascript. But that is Ok because you will use code to say something useful about the world around you.
Your physics training will help you do these things (and more) in the software world: identify patterns in large datasets; predict the evolution of a complex system; create models of real world processes; reason about how a black-box system might be working.
These skills are in demand. If you focus on these aspects from your physics training you should have no problem competing with the computer science majors.
BTW, I have a PhD in Physics. A little over 6 years ago I stopped doing physics and engineering full time and focused on what can best be described as computer science full time. I'm also an adjunct professor of Computer Science.
You do learn C, Mathematica, MatLab, etc, which means you will at least know what is going on when you look at code, but by itself this is not enough.
Something that has definitely helped me was taking a Microprocessors course, where you learn Assembly, which meant really understanding computational processes like memory, power, speed. I was lucky that we were able to create a standalone project that really helped solidify all the theoretical ideas. If If you can do a course like this, I highly recommend it.
Unless you spend as much time auditing CS courses as you do in Physics lectures (and really have the commitment to learn both), you will not leave with the same knowledge as a CS student, but if you put in the work, you can be competent.
I really have only one piece of advice: If you want to build applications once you graduate, start building now. It doesn't matter if they aren't brilliant or even good for that matter; build. It doesn't matter if they don't look incredible; build. It doesn't matter what languages or frameworks you learn; build. If you do this, with time, you will learn that you can learn most things relatively quickly and be competent in whatever it is you decide to do after graduating, because you spent time hammering away, grinding and really learning.
I have an econophysics degree, work in IT and can easily compete with CS graduates. Started my first job as a software developer and now I'm the head of my own development team and also responsible for hiring.
As a physicist you are a problem solver: You will learn how to learn, how to tackle complex challenges in a systematic way and analyze experiments. These skills are very useful. If your physics and math knowledge helps you later on depends on your future job. My own work does not involve physics, nor any non-trivial math.
The biggest hurdle will be getting your first job in IT: You have to show that you are as capable as a CS graduate. That's easier if you apply for jobs that don't focus on algorithms, for example systems programming. Though some companies will only hire CS graduates and miss the chance to get cross-domain knowledge...
So how to show the hiring manager that you are good at writing software? Write (open source) software, mention projects on your CV and also in your cover letter. I love to see links to github / bitbucket on a CV.
If you have passion for writing software, are willing to invest a huge amount of time and you know how to teach yourself then you can be become a great software developer.
Really tho--if you have a passion for CS, but studied Physics, you have the capacity to excel. I fell in love with the ordered-ness of computers and self-taught myself programming in my teens. I went to college and studied Physics knowing I would likely not continue as a career physicist. During college I found that between my basic programming knowledge and physics requirements I had covered a large portion of the CompSci major (except for the upper division classes). I tested out of some and then took the others to end up with CompSci + Physics degrees.
Since graduating, I've benefited from my CompSci degree in areas like data structures, runtime complexity and parsing--but the rest of my CompSci skills were self-taught before or afterwards ("the Internet" was not in my CompSci curriculum).
I believe I've benefited more from my Physics training. Specifically--the Socratic method of looking at root causes in a systematic and problem-simplifying manner. And I've never been daunted by a hard problem or one that needs theoretical analysis for an elegant solution.
Given all of the above, some of the best programmers I've met have no degrees--so passion and willingness to self-learn trump all.
I did a few CS papers but I was frustrated by what I considered low level practical and overly complex theoretcial skills I was learning. That's fine - University should focus on the theoretical - but it doesn't always result in employable skill. Heck, it's possible to get a CS degree without doing that much actual programming.
In my opinion, Physics gives you useful thought processes and solid math skills. A physicist has to relate the real world to theoretical models, something that a programmer has to do every day. Also, many of my physics lab experiments entailed computer analysis of the results. You had to take real-world data and get useful information by programming something - something that not all CS majors seem to have to deal with.
You will have to prove yourself - but if you've been working on open source projects or have a portfolio of high quality work, that will count more than a CS degree for many employers.
I don't know what you want to do in life, but if you know physics, a few languages, and have rock solid higher level math skills then the sky is the limit. David Pines spoke at my sister's graduation and he changed my outlook on life, hence my praise for the field.
I reccomend reading "Forunte's Formula" by poundstone, Complexity The emerging science at the edge of order and chaos by waldrop. My life as a quant by dermann. Oh and And Ploya's "How to solve it". If that doesn't give you an idea of how valuable a legitimate BS in physics is then I'm afraid you cannot be helped.
CS degree or not what matters at the end of the day are your own abilities.
By the way, your time at university and your degree will still be useful: use that time to make friends and work on projects with like-minded people, and generally have some fun. Use the degree to get past CV/resumé filters that screen for having a degree.
You'll have to do some extra work (hint: if you haven't already, start coding in your spare time now, and endeavor to learn version control and unit testing). But the short answer is: yes, you will be able to compete.
Ask yourself if you see programming, say, a web browser or a IMDb-like website an impossible feat. If so you will probably not enjoy it. If you see it as something that is eventually manageable (with a team and learning some new skills) then you will probably do very well.
I think physics provides all the analytical skills, it's just you don't want to have too much catching up to do before you are competative with other graduates.
If you decided to do programming - do programming. Consider yourself lucky to have it figured out while you are still in school.
Really?
Considering that the IT industry is wide open to people without CS degrees, it is exactly the other way around. Engineering, Medical or Law students don't have an "unfair advantage" to their respective profession - they've simply met the minimum requirement. Meanwhile, a CS major has given up several years to maybe have a better shot of getting an interview, never mind a job.
IT industry != Software Engineering industry. Event IT will favor Business, InfoSys, Accounting grads way above any other science disciplines.
In Software Engineering, fresh CS grads get a pretty unfair advantage. Do a Google/Facebook/Microsoft/Amazon interview and find out.
Having studied math extensively, like function theory and a lot of linear algebra and combinatorics, you will be able to pick up on CS algorithms very fast. You might already have studied some without knowing it.
Physics is a broad subject that permeates the students brain with scientific thinking and teaches you how to understand stuff.
Of the 10-15 companies or so I've spoken to, they would all hire an Engineering Physics student for a CS position, given that they have an interest in programming and can show relevant basic skills in the field.
Hell yes. It will mean that clueless recruitment agencies won't even bother contacting you or doing anything for you, because they don't see you as suitable for anything related to IT. Whether that's a good or bad thing is questionable. It does however mean that getting the foot in the door, i.e. getting into a position that requires a Bachelor in IT is a lot more difficult, in them not wanting to take any risks. The only thing you need to do is prove to them that there is no risk.
Between casual IT work (Sendmail, Exchange, Adobe, Linux/Mac OS, Windows Server and end-user support skills) next to my degree and my Physics degree, I was able to pick up enough skills to get a job. It helped that my Physics degree forced me to learn all of Assembly, C, LabVIEW, LaTeX, Mathematica, MATLAB, Python (Project Euler, actually, is the thing that started forcing me to really know Python) and to a lesser extent Bash and Scheme.
Being able to put ten languages on top of Perl, PHP, JavaScript and others I knew already or know outside of my degree, probably really helped in getting a position programming in a niche language. Given the ten programming languages you're likely to learn in a Physics degree (with a bit of interest) and considering that's likely to be more than you'll get from a Bachelor in IT or maybe even computer science, you're in luck :)
So, in a nutshell, and riffing of another comment here, learn version control and unit testing and know at least one programming language like Python or JavaScript inside out and you're pretty good. Brush up on your design skills and you're done - for now :)
"How should we make it attractive for them [young people] to spend 5,6,7 years in our field, be satisfied, learn about excitement, but finally be qualified to find other possibilities?" – H. Schopper
But you can also spend your student years working for others to be disposed of by policy and find that your most valuable young years were invested in something you will not be able to benefit from yourself.
As several folks have pointed out, the real answer is that it depends more on you (what skills you've cultivated, what projects you've been involved in) than the degree itself. I have met a number of folks with physics degrees who are amazing at CS stuff.
I myself did a BS in math & physics, a PhD in physics, and during all that time did lots of various sorts of computational data and modeling work. I now teach college level computer science.
If you just want to code, pick up a language, do it in your free time. CS majors will know a couple of more involved things; for example, many of them may have written a functioning, if minimal, compiler. If you want at least some familiarity with this, and if you can stand retro video clips with bad audio quality, you should watch the Abelson-Sussman lectures online: http://ocw.mit.edu/courses/electrical-engineering-and-comput...
I mention them in part because I think you might also like the ideas that Sussman brought back to his native engineering discipline; the above lectures are for a course called "The Structure and Interpretation of Computer Programs," but he later put out a book called "The Structure and Interpretation of Classical Mechanics," available here: http://mitpress.mit.edu/SICM/book-Z-H-4.html#%_toc_start
The point is that it doesn't have to be two divergent skill-sets. When I was at Cornell, they advertised their applied physics programme with the wonderful statement: "once you know the fundamentals, you're ready for everything." The simple habits you pick up as a physicist, like reasoning about the size of observable quantities or the cultivated habit of "whenever I hear a mathematical term I am going to look it up and read the definition until I understand what the hell they're saying" -- those can really become powerful when you start to write programs. Depending on what you're doing, it's maybe not as helpful as being fluent in the database language SQL, but SQL is much easier to learn and understand sometime later.
So yeah. I highly recommend learning CS while you can! CS is a field where your ability to code is much more important than pieces of paper.
the one concrete piece of advice i'd have for you is in line with what most of the comments are saying: build stuff in your spare time, make sure the stuff you build is front and center on your resume, and get good at algorithms.
If the former, you'll need to show a bunch of examples of your work. So do a lot of projects that you can show(+the source code).
If you are talking about YC...once again skill beats paper. I know Octopart both founders were physicists...which learned to code on their own