Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Physics Can a physics major get hired as a software engineer?

  1. Aug 3, 2011 #1
    I'm wondering if I'll be able to find a job once I graduate, if my grad school plans don't pan out. I'm graduating with a BA in physics from a University of California, to be able to take computer science classes on the side (enough for a minor). Am I qualified enough to get software engineering jobs? Will preference be given toward actual computer science majors? Will the fact that I have a BA instead of BS hurt me?
  2. jcsd
  3. Aug 4, 2011 #2


    User Avatar

    Probably not, but honestly we have no way of knowing. You will start out at a disadvantage compared to computer science people who have demonstrated programming ability, and it will be up to you to decide how best to show that you can bring something to the table that would make up for this deficiency (real or perceived).
  4. Aug 4, 2011 #3
    Probably not. If you just take a few computer science classes, that's likely not enough for you to get a programming position. If you became as obsessed about computers the same way some people are obsessed with football, then you've got a shot.

    Also, try to get an internship at a software company. It also helps if you do something useful. Taking classes is going to be less impressive than haven't an app on Android market or writing a driver for the linux kernel.

    Software engineering is something in which degrees and coursework don't matter much, but that can hurt you because if you have some computer science classes, but can't program it's not going to help you.

    Also, a lot depends on the general economy. When I entered the software in 1998, we were in the middle of the dot-com boom, so they were picking random people off the streets. The market is much tougher now, and who knows what it is going to be like in two years.
  5. Aug 4, 2011 #4
    That's strange. I've always heard from professors that physicists are usually the best programmers out there.

    Nevertheless, would any of you guys recommend software engineering as a short-term career (3-4 years) before getting back to grad school? How's the lifestyle?
  6. Aug 4, 2011 #5
    There are people with physics degrees that are world class programmers. There are also people with physics degrees that can't program worth a darn.

    Brian May is an astrophysicist that is a world class rock guitarist, but it would be bad to conclude from that astrophysicists make great rock guitarists.

    Also we can continue the analogy a bit. Being a rock guitarist and being a programmer is something for which formal credentials don't count for much. If I'm hiring a guitarist, I hand them a guitar and watch them play, and whether they have a music degree is pretty much irrelevant. Technical programming interviews work the same way.

    No. Once you leave it becomes extremely difficult to go back.
  7. Aug 4, 2011 #6


    User Avatar
    Science Advisor

    I can tell you from experience that programming is not something that you take a few classes in. You need to really breathe it, pretty much like anyone that wants to become good at it.

    The big thing is getting your hands dirty. There is no substitute for it, and for me personally I started in high school and it took me years to get even quarter decent enough so that I could just grab interrupt tables, and API's so that I could write something that was actually "useful" (i.e not 100 line programs of the hello world invariant).

    Now it might take you less time to get to that stage, but if you add in all the domain crap and the whole kit and kaboodle that they don't teach you in a few classes, it really does add up and it takes a lot of time to not only learn it all, but to put it into context.

    If you want to get an idea of what dev work is like, get a large platform of some sort (over 100,000 lines of code) and then try and understand it and make some minor modifications. If it takes you way to long to understand it, then that will be a good indicator of how you could measure how much effort you need to put in. It's not the be all and end all indicator, but it's a good metric to start off with.

    This is basically the kind of thing that is expected of you in a job. You might have the luxury later of having built up your expertise in a particular platform that your work involves, and as such, the amount of learning will most likely decrease (in terms of intensity), but that usually takes a long time because most software is pretty complex these days.
  8. Aug 6, 2011 #7
    It depends on your software engineering skills. People with all sorts of degrees end up in software engineering, although unsurprisingly many people with good programming skills will be drawn towards computer science degrees.
  9. Aug 6, 2011 #8
  10. Aug 14, 2011 #9
    It's kind of insulting how physics majors think learning physics and a bit of programming makes them qualified for a good programming job. If you majored in physics, do something with physics. Don't think you can just grab a job as a programmer to make more money than a physics teacher would.

    Software companies usually like people who are very good at and specialize in software engineering. Not people who think they can be hired and use their physics background as an excuse.
  11. Aug 14, 2011 #10


    User Avatar
    Gold Member

    I don't think that programmers being "insulted" is really a valid showstopper for someone who wants to be programmer. What is this? The caste system? :tongue:
  12. Aug 14, 2011 #11

    You're absolutely correct. Learning physics and doing a bit of programming is insufficient.

  13. Aug 14, 2011 #12


    User Avatar
    Gold Member

    Insufficient for what? Can he get a job? Absolutely!
  14. Aug 14, 2011 #13
    I program all the time as part of my astrophysics research. As such, the most call backs I've gotten for jobs involve lots and lots of coding. One such call back outright told me they don't like hiring "only computer scientists" because they "don't know the math as well" and "want diversity".

    It all depends on what exactly the job is, really. If you're talking about wanting to be a software engineer for some sort of gaming company, than no. If you're talking about doing software engineering that requires high level math/science skills, then yes.
  15. Aug 14, 2011 #14
  16. Aug 15, 2011 #15
    That HAS to be exaggeration. I fully agree with you that it shouldn't take much more than 30 seconds for writing up the solution to that problem, and I really doubt the majority of comp sci majors would fail in doing so. You don't even need to know modular math for this, you just need to know that "divisible by" means that when you divide by that number, the remainder is zero. That's lower year elementary school maths.
  17. Aug 15, 2011 #16
    I hope it's an exaggeration, but I have had *several* college students ask me to add. That is not an exaggeration, and I have asked for clarification every time. Every time the student is embarrassed, but reveals that they don't know how to put two numbers together without a calculator.
  18. Aug 15, 2011 #17

    What I meant was that it's a question of how much you actually know. Just being able to write a toy problem here and there shouldn't be enough to get a job. (Is this wrong?)

    Solution to proposed FizzBuzz in c:
    Code (Text):

    #include <stdio.h>

    int i;

                    printf("Fizz \n");
            else if(i%5==0)
                    printf("FizzBuzz \n");
                    printf("%i \n",i);

    :) :) :)
    Last edited: Aug 15, 2011
  19. Aug 15, 2011 #18

    Except that's wrong. You're supposed to print "Buzz" if i%5 == 0. and "FizzBuzz" in i%3==0 && i%5 == 0 else if statement. Finally, in the else statement there should be a printf(%i)
  20. Aug 15, 2011 #19


    User Avatar
    Gold Member

    My undergrad was in physics, my grad study is in computational neuroscience. A lot of my research training was in signal analysis processing, programming with Matlab (computational physics). I've also taken java classes and lately become interested in Python in my spare time.

    But here's the thing. I hate linux. I hate how much trouble I have to go through to install flash or install my wireless drivers (acer travelmates have a hardware button to enable the wireless, it's tough to find the drivers for this button, and when I do, they're not easy to implement.)

    On the other hand, I'm currently writing a matlab GUI for a biology group so they can analyze their data more intuitively and efficiently. I have to consider all the user slip-ups that can happen, while transforming their thoughts into actions.

    I kind of want to learn C++ now.

    So, all you pretentious computer scientists out there, what's a basic program challenge (or set of challenges) that's a good test of a programmer's ability?
  21. Aug 15, 2011 #20


    User Avatar
    Science Advisor

    I say this commonly to people that ask your question, and I will not deviate much from previous answers.

    If you want to develop your ability as a programmer in a multitude of ways and to develop the perspectives that help you understood each aspect, then pick a domain and an established platform and take it from there.

    The fact that you are already writing code means you know the basics of procedural (and as you have demonstrated, event based) programming.

    So given that you want to learn C++ and develop more as a programmer, its good to find a platform that is complex and complete, yet structurally intact so as to provide a good basis to learn from a good code repository.

    In terms of the language aspects of C++, I feel you will pick these up quickly since you have experience with procedural languages. The two main concepts in programming are state and flow control. When you realize the flow control that happens in C++ in a procedural way, everything should click for you and make sense. If you do work with say multiple threads or processes, then again you will have to revise your thinking about flow control and how that interacts with the state of the machine, but I think you will again have no trouble of doing so.

    So once you have a domain, then you can look for some repositories. If you don't find repositories that meet all your needs, then look for smaller ones and try and combine them together in a meaningful way that will help you do what you need to do. The ability to combine multiple libraries together is a very important skill because in terms of modern day development, this is what you do: people can't afford to reinvent the wheel and its a common egotistical attitude among young programmers to create everything from scratch: this doesn't go well when you need to develop something quick.

    In terms of linux, you don't need linux to be a developer. The windows platform offers a good API with a tonne of different functions for a wide variety of things and if you want to develop multi-platform software, then its easy to use compiler directives and some good interface design to abstract all the boring crap out to some platform API call (like for example opening files, starting threads, allocating memory, and so on).

    In terms of programming ability, I want to mention a few things.

    I think of two types of intelligence: there's generic intelligence and there is domain intelligence.

    Tonnes of programming requires a generic set of experience and knowledge that allows you to automatically solve a standard problem. For example things like searching, sorting, storing things for both speedy access and low memory requirements are generic problems that apply to many situations. Typically if you do a lot of development you come into situations where you are using these patterns routinely.

    The other is domain intelligence. Domain intelligence has to do with the area and the specifics of that area in relation to development work. For example someone working on an operating system would probably know about bin-packing techniques for memory allocation schemes, but someone spending their time doing high level database work probably won't. This is the knowledge that you will get by working with and extending code in your domain. It might consist of knowing some intricate detail about math libraries, or GUI code for doing specific UI functionality, or otherwise.

    On top of that you have the other things like not only writing good code yourself, but the ability to read other people's code (which can be a nightmare). Documentation is a big thing as well.

    If you want to know more, it's probably going to be easier for you to get your hands dirty. In terms of a book on C++ Bruce Eckel's book comes to mind:


    It's free and its comprehensive. There's plenty of resources out there that address specific issues but none the less, I used this back in the day ;)

    I know I haven't given you a "specific" challenge, but I think the exercise of picking a domain, getting some good solid code that has been in development for an extended amount of time, and getting your hands dirty will provide you a challenge in every single area (including the ones I mentioned above), and there is no substitute for that. You will learn and you will learn very quickly.

    God speed my friend.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook