Career Advice

Don't have 100 hours, or answered your question yourself? Ask for help and post your answers here!
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Career Advice

Post by SMP »

So I am currently working toward a PhD in physics at a top university. However, I have come to realize that I don't like physics or research as much nearly as much as I thought I did. My favorite aspect of the work I've been doing is programming. I like programming a lot more than the rest of what I do. So I am seriously considering dropping out with just a masters, and trying to become a software engineer.

My question is, how hard will this be? I don't have a degree in CS or engineering, and I have only taken a couple of programming courses, and I have no experience in large-scale software development. I feel like my graduate work in physics at a top 5 university should demonstrate that I am pretty smart, and hopefully that will count for something. But I am worried that my limited experience will make it hard to find employment.

Is this a foolish thing to do? If it is possible for me, is there a minimum amount a preparation I need before I will be considered a candidate for software engineering jobs?

Hopefully someone on this board will have information that can help me.

Thanks.
thebigcheese
Someone's Favorite
Posts: 998
Joined: Wed Apr 14, 2010 9:08 am
Location: Provo, UT

Re: Career Advice

Post by thebigcheese »

Hmm...I'm not a programmer myself, but I work with lots of programmers, so maybe I can help just a tad.

Most employers probably won't care about your degree. They just care about your skills. Learn the basics and get yourself an internship, do some freelance work, or find a willing employer. Also, start teaching yourself as much as you possibly can -- as a programmer, it is vital that you keep up with the latest developments in your field, and that will require a lot of self-teaching and self-motivation. If you learn how to do that early on, you'll be much better off in the long run.
User avatar
Digit
Posts: 1321
Joined: Tue Mar 15, 2011 2:16 pm
Contact:

Re: Career Advice

Post by Digit »

Try going to a site like odesk.com and seeing if you can successfully get one person to hire you for a one-off freelance programming job for something. If you can't do that, of course that doesn't mean you couldn't get a real job in software, but it's a low-level practice in being given an assignment and doing real work for real money.
Quod gratis asseritur, gratis negatur.
NerdGirl
President of the Lutheran Sisterhood Gun Club
Posts: 1810
Joined: Tue Jul 01, 2008 6:41 am
Location: Calgary

Re: Career Advice

Post by NerdGirl »

How close are you to finishing, SMP? I kind of went through the same thing where I decided about half-way through my PhD in astronomy that I didn't like astronomy or research as much as thought I did and that I would rather go to med school. I wanted to quit then, and I still wanted to quit even after my defense was over and I was working on revisions. But now that I'm actually done my perspective has changed a bit and I'm really glad I finished. Unless you've just barely started, I would really encourage you to finish. I know a couple of people who quit part-way through PhDs in physics or astronomy, and they got jobs right away doing the kind of stuff you're interested in, but then they lost them during the recession and if they had finished their PhDs it might have opened a few doors for them when the economy got bad. Now that I'm done, I still don't want to do research or astronomy for the rest of my life, but I feel like I at least have this as an option if my other plans don't work out right away or ever. If you can make programming and software engineering a big part of your dissertation for the next however many years it takes, then you can put all of that on your resume. There are actually a couple of PhD students in my department right now who want to get into software engineering, and that's what they're doing. They're designing their projects so that they'll get a lot of experience that will help them get those kinds of jobs when they're done.
Waldorf and Sauron
Posts: 275
Joined: Thu Jan 22, 2009 3:37 pm

Re: Career Advice

Post by Waldorf and Sauron »

SMP - my advice would be similar to NerdGirl's. Though your program may not be really what you want to do, you can use your status as an enrolled university student as an opportunity to do what you want to do. Think of it as "dating the ugly sister to get at the pretty one." Use your grad student status as a way to take programming classes in other departments. Use summers to take those classes if offered (or look to community colleges for those classes during the summer). Adjust your dissertation project to something that requires you to do extensive programming. That way, when you graduate with your PhD, you not only have some contribution to physics, but you have a project you can show employers illustrating your practical programming skills.

There can also a kind of "the grass is greener" syndrome in grad school. I know I keep thinking "I could do that" about lots of other jobs I see. But I think something has to be a pretty significant hobby for a while before you should think about changing your career. No matter what you do, if you start doing it all day every day, it's going to lose its sparkle sometimes and other things are going to seem more appealing.
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

Thanks for the advice. Allow me to elaborate a little more on my situation.

I am at the end of third year of grad school, but I have only been doing research with my current group for a year now. I haven't even begun a thesis project yet. It will take, at a bare minimum, three more years to finish my PhD. But that is only if things go perfectly. A more realistic estimate would be 4-5 years, based on how long it normally takes students in this area to finish.

It is true that having the PhD will open some doors. However, I feel fairly confident that I will not want to enter those doors. So my question is, does having a PhD as a opposed to a masters in physics give me any advantage in finding a job in a non-research position? If there is an advantage, will I be better off four years from now with a PhD and no real world work experience than I will with just a masters but four years of experience in the industry?
Yellow
Posts: 276
Joined: Mon Apr 09, 2007 3:21 pm

Re: Career Advice

Post by Yellow »

I can't give you advice on whether you should stay in grad school or not. But if you do decide to jump into software development, let me give you a peek at what you'll be facing.

I work full time as a software developer. We recently hired a developer who had just graduated from BYU with a physics major. He'd done a fair bit of programming while doing research, and had taken a few CS classes as well. He's had it rough.

He's figuring things out, and he's a lot better than he used to be. But I sometimes cringed at the questions he'd ask (in a very loud voice) shortly after being hired. Things like "What does it mean to subclass something?" That would be a bit like hiring someone to work in a professional physics research lab, and hearing them say "What do you mean when you say this particle has more energy than that one? Is it, like, moving faster?" At the time, we were in pretty dire need of another developer, so we were willing to take on someone who would need a fair bit of on-the-job training. But he didn't have a super impressive interview, and for a while I worried we'd made a mistake in taking him on.

The kind of programming you do in physics research is dramatically different from the kind of programming you do when developing commercial software. In research, you're usually doing mathematical calculations, figuring out how to crunch numbers and combine data in a way that will give meaningful results. You probably use a lot of Matlab, Fortran, and maybe C. This is great, and is very useful within its context. But it's very different from commercial software. In that context, there's a little bit of number crunching, and a whole lot of thinking about performance, stability, memory usage, usability, maintainability, interface coherency, etc. You'll likely use C++, Ruby, Objective-C, C#, or Python, depending on what you're working on. In research, if someone runs your program with the wrong input, you tell them they're an idiot and make them start over. In commercial software, if someone clicks a button when you're not expecting it, your program better handle it gracefully or you'll generate support calls and negative reviews online. You'll do a whole lot more thinking about event handling than you will about number crunching.

This isn't to say that your programming experience isn't applicable. It certainly is. But there's a lot of stuff you probably haven't needed up until now that you'll need to understand. Learn about object-oriented programming, and the difference between a class and an object. Learn about threading and synchronization, and what a critical section is. Learn how to use a debugger. (I can't emphasize that last statement enough.)

That's a lot of stuff to learn. Some of it you could learn in university courses as others have suggested. But some of it you just have to learn on your own. You've got a bit of a chicken-and-egg problem; your research programming experience is probably not sufficient to open up many job opportunities, but you'll never get more unless you learn more. The best way to learn to program is to find a hobby project and start exploring. As a counterpoint to my earlier anectode, Laser Jock is a physics student whose primary employment is writing software. He'd done a fair amount of research programming, but my understanding is that his first significant "real-world" project was actually Board 5.0. All of the 5.0 development was done on a volunteer basis, so we were willing to accept any help we could get. At first, he didn't contribute much, but as things progressed, he became quite helpful. He used the Board as a "hobby project" to figure things out, and he now gets paid to do web development using the same framework we use on the Board.

So basically, the point of all this rambling is that if you want to transition into a software development career path, it's possible. But you'll need to take some time to learn things on your own; don't assume that your research experience alone will be sufficient. I'd be happy to answer any questions you've got.
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

Thanks for the advice, Yellow. I fully aware that there is a lot I will have to learn to become a software engineer, and that there are large differences between the programs I might write in the course of my research and the programming that software engineers must write. I have actually already started on a project of my own, writing application for iPad. From this, I have come to understand a little better the sort of the problems software engineers have to deal with. And I know there are things that still have to learn, like version control. Also, since I am working on this pretty much by myself, I don't really know how to collaboratively work on software.

I am actually hoping that this project will end up being profitable, not just educational. I recruited my brother, an ISYS major at BYU to help me out with the back end component of my project. As he does he thing, I will observe and learn. This has been a lot of fun, and I find myself sometimes staying up all night working on the project, trying to get something to work correctly. Even though it is frustrating, I am drawn into it and can't quit until I have figured it out. The thing is, I haven't felt like that about anything in physics for a long time. That is part of why I think maybe I have been studying the wrong thing all along. Back in the day, physics, EE, and CS were the fields I was considering, and to be honest, my decision to do physics wasn't based on any really good reason. It pretty much came down to the fact that I am good at physics, physics seems cool, and I enjoyed introductory physics.

So I am pretty much 99% sure that I am going to leave physics. It's simply a matter of when. I have actually felt this way for a while, but my plan has been to stick it out anyway, finish the PhD, and then figure out what to do. But now I am really starting to think that I would be happier and better off (even in the long run) if I started making the transition now. If I stick with it, but take some CS courses and work on some projects in the mean time, then four years from now or so I will have PhD in a field that I don't wan to continue studying, and no employment experience in software engineering. If I can find a programming job now (even a very low paying one), I can start learning the parts of software engineering that I still lack, and also gain employment experience. Then, four years from now, not only will I have more experience and probably be more employable, but I will have actually been gainfully employed for the previous four years, and presumably will have money saved up.

OK, I don't really know why I wrote all that just now. I am not really sure what sort of advice I am expecting to get. I guess I just wanted to express to someone what I am thinking. Thanks for listening.
User avatar
Dragon Lady
Posts: 2332
Joined: Tue Aug 21, 2007 12:07 pm
Location: Riverton, UT

Re: Career Advice

Post by Dragon Lady »

Just something to think about, and I don't know how much it actually applies in the CS field, but having a PhD will typically start you in a higher pay bracket. No matter what that PhD is in. I worked in Family History and when I officially got my degree in Ancient Near Eastern Studies I got a significant pay raise. Not for anything I did in my current field of employment, but simply because it was a bigger degree than the Associates I had previously.
Yarjka
Posts: 666
Joined: Sun Apr 22, 2007 12:03 am
Location: Provo, UT
Contact:

Re: Career Advice

Post by Yarjka »

Dragon Lady wrote:Just something to think about, and I don't know how much it actually applies in the CS field, but having a PhD will typically start you in a higher pay bracket. No matter what that PhD is in. I worked in Family History and when I officially got my degree in Ancient Near Eastern Studies I got a significant pay raise. Not for anything I did in my current field of employment, but simply because it was a bigger degree than the Associates I had previously.
But couldn't a Ph.D. also make you overqualified, especially for some of the beginning CS jobs needed to gain experience in the field?
User avatar
Whistler
Posts: 2221
Joined: Tue Apr 10, 2007 5:17 pm
Contact:

Re: Career Advice

Post by Whistler »

I think you should get out with a Masters! At least you'll have something to show on your resume for the work you have done, and then you can quit being miserable sooner. I hear that just surviving at Cal is a feat in itself.
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

Yeah, if I were actually miserable, then this would be an easy decision. The thing is I am not exactly miserable yet. I just feel like I'm wasting my time, I am not really developing any useful skills, I enjoy programming much more than working in the lab, and I really don't care about the subject, as in, I don't find any of my coursework interesting, and I can't stand to read the academic papers written in my field. But some of the stuff that will be coming up does indeed sound miserable. Writing a paper to publish our results, preparing for and taking quals, writing my thesis. All of that just sounds awful. And I know some of that is awful for everyone, and that it's just something you have to get through, and things should be better afterward. But some of it, liking reading and writing academic papers, will always be part of physics research.
Anyway, I am pretty sure I will be getting out of physics pretty soon. I will start trying to make the transition, but will not jump ship quite yet. I have already started looking for jobs. If I can find a job that will provide stepping stone into the world of software engineering, I will probably take it.
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

So I have a phone interview scheduled for Tuesday with a software company. They told me the interview will last about an hour, and may involve technical and logic questions. I want to prepare for this, but I was wondering if anyone who has been through this could give me some advice on what I should study.

The job requirements list:
strong grasp of programming principles - both the how's and why's
preferably fluent in java
knowledge of Unix, SQL, JavaScript, CSS, Flash, source control, and mobile device development is a plus

responsibilities:
build the back-end wiring, application logic, and UI that drives the site
you’ll be involved in all aspects of the development process – including design, coding, testing, debugging, and tuning
in addition to working with your fellow engineers, you’ll work directly with other teams to help improve their efficiency and to understand the needs of the customers whom they support

Anyway, since this is a phone interview, it seems like they wouldn't ask me to code for them on the spot (or would they), and they said I will not need to be at a computer for the interview. So I am just wondering what sort of technical questions they might ask. Are there some fundamental CS/Software development concepts that I need to familiarize myself with before the interview?

Any advice would be greatly appreciated.
Yellow
Posts: 276
Joined: Mon Apr 09, 2007 3:21 pm

Re: Career Advice

Post by Yellow »

I wouldn't expect them to ask you to code over the phone, unless they're really masochistic. That just sounds like torture on both sides of the interview. They'll probably ask you some general questions to gauge your programming experience.

It sounds like it's a position to work on a largely web-based application. I'm not a web developer, but if I were giving the interview I'd probably ask questions like these:

General questions:
  • What experience do you have with programming?
  • Why do you want this position?
  • Why should we hire you? (I'd usually ask this at the end of the interview.)
  • You are given a programming task that you don't know how to complete. How would you go about learning what you need to know?
General programming questions:
  • What is the difference between a class and an object (or an instance)?
  • What is a compiler?
  • What is a linked list?
  • What is a thread?
  • What is Big-Oh notation?
Java language questions: (if you have Java experience)
  • What is an interface in Java? When might you use one?
  • What does 'static' mean in Java? When might you use it?
Debugging questions:
  • Your program is producing incorrect output but not crashing. How would you go about tracking down the bug?
  • Your program is running really slowly when given certain input. How would you go about fixing the problem?
  • Tell me about a difficult or tricky bug you've tracked down in the past. (This question has produced some pretty fun stories in the past, btw.)
You likely won't have time for all of these, and probably won't have time for even half of these. But that's a sample of the kinds of questions you might get.

In a phone interview, I'm usually looking for two main things:
  1. How well can the candidate communicate with others about technical issues?
  2. Does the candidate demonstrate enough technical skill that it's worth bringing them in for a face-to-face interview?
I don't know just what experience you have, so I can't tell you exactly how to prepare, but hopefully this gives you some idea of what to expect.
NerdGirl
President of the Lutheran Sisterhood Gun Club
Posts: 1810
Joined: Tue Jul 01, 2008 6:41 am
Location: Calgary

Re: Career Advice

Post by NerdGirl »

I have no useful advice for you, but good luck!! :D
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

Thanks yellow, that's very helpful.
Yellow
Posts: 276
Joined: Mon Apr 09, 2007 3:21 pm

Re: Career Advice

Post by Yellow »

So how did it go?
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

It went pretty well. The question were not too difficult. They gave me some scenarios and asked what sort of data structure I would use and how I would implement it. They also asked a couple of logic questions that weren't too difficult.

They emailed me a homework assignment this morning. A couple of coding problems that I need to write up solutions to and send in. So I guess that means I passed the interview. I'll have to brush up on my java a bit, but they don't seem too difficult.

There was one question from the interview that stumped me. I'm curious if anyone here knows the solution.

Given an array of size N in which every number is between 1 and N, determine if there are any duplicates in it. I gave some solutions, but then he asked if I could come up with a solution that takes time O(N) and extra storage O(1). I thought out loud about that one for a few minutes, and he said it seemed like I was almost there, but I couldn't it out. He gave that hint that each value in the array can map to an index in the array.
User avatar
Digit
Posts: 1321
Joined: Tue Mar 15, 2011 2:16 pm
Contact:

Re: Career Advice

Post by Digit »

If you sort it first any duplicates will be next to each other so you'd only have to remember the last one as you're going through.
Quod gratis asseritur, gratis negatur.
User avatar
SMP
Posts: 71
Joined: Thu Jan 20, 2011 11:12 pm

Re: Career Advice

Post by SMP »

Yeah that is a solution that I gave to the original question, but the sort will use either O(N log N) time or O(N) memory (if we use a bucket sort or something like that).
Post Reply