Physics grad student: how to build employability in programming & finance

by Stabilizer1 min read8th Jan 201451 comments


Personal Blog

I'm a theoretical physics (quantum computing) grad student. I really like what I do, and would like to continue doing it for a long time. 

But I'm aware that the job market in academia for freshly minted physics PhDs is not spectacular. For personal reasons, I may not be able to go through the post-doc treadmill and I might want to make good money. Thus: programming & finance. I currently lean towards programming.

I thought LW is a good place to ask for advice related to this.

Current skills: Good at math, definitely not "gifted". I know C++, and some Python; neither inside out. I don't know specific techniques to design good algorithms for problems. For example, I tried my hand a few times at programming contests (including those at small scales) and got my ass handed to me. I've only taken basic college courses in programming. 

I'm not very aware of the skills tested in quant interviews. I'm sure googling and talking to a few people will fix this, but please feel free to add your thoughts.

I have about a couple of years left till I graduate, so I can do this properly: What is the best way to make sure that when I graduate I can easily take a job in software or finance after the PhD? Looking for the most bang-for-the-buck (the buck here being time and money) way to do this.

Also, I may have blinders on. Are there other well-paying jobs out there for physics PhDs? I'm not an American citizen, so many of the government/government-funded lab jobs are out of the question. 

Thanks in advance.

Some resources I've identified:

1. USACO training gateway.

2. SICP. (How much is it worth going through this?)

3. Cracking the Coding Interview.

51 comments, sorted by Highlighting new comments since Today at 8:02 AM
New Comment

Good at math, definitely not "gifted".

Don't think like this. You are an expert at quantum computing. 99% of the population doesn't know what quantum computing IS. You are probably 3-4 sigmas above the mean, which basically qualifies you to do anything. If you don't think of yourself as particularly smart, it is probably just because you are in contact with people who are 5-6 sigmas above the mean.

This definitely needs to be stressed. I went through the same path as the OP: got my PhD in Theoretical Physics, then moved to quantitative finance. I definitely wasn't stunningly above average in my old filed, but now, modesty aside, I am significantly smarter than the people I do consulting work for. And still, quantitative finance attracts people who in general are above the average population. There is probably a bit of availability/selection bias going on here, so be careful to correct for it.

Now, to the OP. As for the original question, its quite possible that in the quant field you could already be hired without having specific financial kowledge. People have learned to know that former physicists are of high value, and are willing to invest some time teach you what you need to know. I honestly wouldn't suggest that you spend time into building some specific knowledge, as it may very well be unnecessary. If you have some spare time, you might want to learn some advanced statistics, even though simpling refreshing what you learned in college should be sufficient.

If you want some more specific advice, feel free to pm me. You say you aren't American, if you are Eurpean and would like to find a job here, I might be of some help.

This is qualitatively a good point, but quantitatively you should be careful. There are only ~7 people in the world who are 6 sigmas above the mean (using a normal distribution).

Knock one or two points off each interval, and the point stands. But in any case the IQ distribution is likely slightly thick-tailed; it's only Gaussian out to say 140 or so.

Also, humility is an academic social norm, esp. for jr. people (even v. smart). Probably a good one on net, imo.

Probably shouldn't say someone "probably" has an IQ between 145 and 160 unless you have pretty good evidence.

Well, according to this popular science article, the average physics Ph.D. has an I.Q. of 143+.

Physics PhD who just got a job in industry. While I can't tell you the exact thought processes of my interviewers, I got the impression they were impressed by my being the lead developer and architect of a library. You may not have the opportunity to build something that can be posted on the web, but if you see any such option you should grab it. Failing that, you could try to make some contributions to an open-source project (there are any number of them on GitHub), or to start building a small game. In short, try to build up a portfolio that you can publicly point at and say "I built that".

Additionally, there seems to be a somewhat standard set of algorithms and big-O analysis questions that interviewers return to; you could do a lot worse than just reviewing some basic comp-sci cheat sheets. This also means that practice makes perfect on interviews - it is not the case that each one is a unique gem of highly specific knowledge. So you could even just apply for some jobs right now, go to the interviews with no expectation or intention of being hired, and see what sort of thing you should learn.

[-][anonymous]7y 14

Write code. Lots of it. Becoming a good programmer is the same as becoming a good anything: it is mainly a matter of practice. You need to get those hours in now.

You also need to choose a field that you are interested in, so that you will be able to maintain the effort required to succeed. But I would recommend weighting your choices towards fields which give you an advantage towards employment given your situation. Machine learning, for example, would be an opportune choice, given the similarity of subject matter (statistical analysis), and the fact that there are large H1-B employers with demand for Ph.D grads with machine learning experience (e.g. Google).

Pick a sub-field, and learn it inside and out. And code, code, code.

Source: I'm was undergraduate physics student that went on to write code at NASA and now does full-time bitcoin consulting.

Machine learning seems like an excellent thing for the OP to look at, yes. It's (1) potentially useful for a career in software, (2) potentially useful for a career in quantitative finance, (3) potentially useful in scientific research. And also (4) currently trendy, which might be either a good or a bad thing.

Comp sci maths should be piss-easy for a Ph.D physicist. Being able to sling this stuff about in your head will definitely give you a leg up. Find a textbook to swallow. (SICP, as recommended below, is a good one.)

Some generic advice.

Imagine yourself in the role of your potential employer (e.g. a hedge fund manager). Which uncommon skills would you be looking for in applicants?

Re programming -- have a project. Have multiple projects. Throw code onto GitHub. Demonstrate your ability to construct and debug a working piece of software that does something useful. If you want to be employed as a coder, the first question will be "Show me what you did".

Re finance -- acquire experience with real financial markets (as in, not models from academic literature). Pick an area, learn it. Paper trade or even better, live trade with whatever amount of money you can afford to lose. Figure out market frictions, figure out risk management. Get acquainted with all the ways in which real markets are different from theoretical ones. Get your hands dirty.

I'm also a physics grad student (experimental high energy) who is considering industry jobs in addition to postdocs. I've attended several career panels in the past few years. Most recently, a panel was held at Fermilab. One of the panelists started a blog, Science Jobs Headquarters, where you can read about that panel and get other good advice.

A few of my takeaways from the panel: 1) Python is really useful and everyone should learn it. (I need to work on taking this advice. I mostly develop in C++, and my Python is patchy.) 2) Some companies want to hire people with very specific skills and experience, but other companies are just looking for smart people who can learn on the job. The important point here is that few skills are absolutely essential to get a job in data science/private research/consulting/etc. Even if you're not a Python whiz, there are still people looking to hire you. 3) The website Glassdoor was recommended for investigating companies at which you might want to work.

Biophysics grad student dropout/work at startup now; I personally was sort of sick of mathematical modelling, so I decided not to go the machine learning route. But as I was based in Boston, there were machine learning jobs everywhere. I enjoyed working through SICP, and its functional style been pretty useful in quickly understanding new concepts (Javascript callbacks and promises, for example) in programming.

I got my programming start in a website for a tournament that I ran - it taught me my way around a large framework (Django) and as django was what people call a 'highly opinionated and bloated' framework, it taught me one version of how experts think a large-scale project 'should' be organized.

If you read one book on the computer science side, read this: All of computer science is in this book. Not a simple book at all.

I will commit CS heresy and call Structure and Interpretation of Computer Programs overrated. The major ideas I recall learning from SICP were tail recursion, static vs. dynamic scope, functions as data, and what people mean by "closure". Those are somewhat important ideas in computer science, but not, I would say, among the 20 most important ideas is computer science.

This is a fun game you propose. Here are what I think the important ideas in CS are (no particular order):

(a) turing universality,

(b) distinction of p vs np,

(c) dynamic programming/memoization,

(d) styles: declarative/functional/imperative/oo,

(e) metaprogramming (including algs as data),

(f) the Pareto principle (both in optimization and development),

(g) what/how distinction (abstraction),

(h) undecidability (can't tell what a general function does by looking at it).

Might add more as I think of them. I don't remember my SICP so well anymore, but it talks about (c), (d), (e), and (g). (f) is a general engineering principle, not specific to CS, (a), (b) and (h) are on the theory of computation side.

Some big ideas that occur to me, from a systems point of view:

  • The notion of hiding implementation behind interfaces.

  • The notion of functional layering -- that if the system offers some limited set of features, you can implement other features purely in terms of those lower-level features. This is a key idea behind modern networks.

  • The notion of building reliable systems out of unreliable parts, using redundancy and retries. This is the key technique in such varied systems as RAID, TCP/IP and MapReduce.

  • The notion of enforcing safety properties in a programming language. The big insight of programming language design is that you can make it impossible for some mistakes to arise in a given language.

I never actually read SICP so I can't comment on which of those ideas are in the book.

In my mind the first two bullet points are under (g) (I may have been too abstract in my description of (g), but what I had in mind would include both of these).

[-][anonymous]7y 6

Sounds like you approached SICP once it was already beneath your level. The main thing to take away from SICP is that programming is the construction of processes - hierarchical descriptions of what the computer is tasked to do, with no detail left out. This and the implications of it were probably already obvious to you by the time you approached the book.

In my experience, most comp sci or programming textbooks are like grammar, vocab, and style guide to language, whereas SICP delves into the very nature of language itself, it's purpose, what we use it for, and overviews of why and how we study it. You can drill the grammar and vocab later.

The book is good for theoretical comp sci, awful for business programming. It's like telling a business freshman to learn calculus from Rudin or Spivak instead of Stewart.

There is only one kind of programming :).

"Theoretical comp. sci." is Sipser, etc. I suppose this is "conceptual comp. sci." That is far from a bad thing, though.

SICP is comparable to Early Transcendentals because it is used for freshman comp. sci. courses (but is in fact far deeper than this might imply).

There is only one kind of programming :).

Not sure what you mean by this.

"Theoretical comp. sci." is Sipser, etc. I suppose this is "conceptual comp. sci." That is far from a bad thing, though.

Right, "conceptual" is a far better term. Theoretical comp sci is a different beast entirely.

I agree that SICP is accessible to a freshman programmer, but I doubt that it's the best book for them. Something like Code Complete would be far more useful.

I think we will have to agree to disagree on what the best first book ought to be for a programmer.

Not sure what you mean by this.

It was a joke with a grain of a joke. That is, I believe all programming activity, regardless of application area, has a unifying conceptual core. Because of this, statistical programmers, and business programmers, and web developers, and operating system programmers are participating in the same activity, much like algebraists, topologists, logicians, and analysts.

If you want to get into math you first study what it is mathematicians do, what a formal argument is, styles of proof, subject areas, abstraction, etc. If you want to get into programming you first study what it is programmers do, processes, styles of programming, abstraction, etc.

I guess my position is that when going into a new field, study domain-independent concepts first. That is, study the part of the field that does not decay with time.

OK, thanks for clarifying. As for the "best first book", it's probably highly individual. In my field (physics), students are taught easy basics first (F=ma etc.), long before they learn Lagrangian mechanics and relativity. Whether this is due to insufficient math or because the bottom-up approach is more suitable on average, I am not sure.

[-][anonymous]7y 0

Yes, but the first chapter of the first book a student uses to learn physics contains a detailed description of what physics is: that it is the study of the nature, properties, and evolution of matter and energy, that it involves collection of experimental evidence and building mathematical, predictive theories from that evidence, etc.

SICP is that "first chapter" for computer science & programming. In terms of theoretical analysis it is actually rather poor - I wouldn't compare it to Lagrangian mechanics or relativity at all. What it does is set the stage and provide a framework for thinking about computer programming in general, in such a way that keeps you from making common and avoidable mistakes in the future.

(There's a reason SICP is/was the first class for incoming comp sci freshman at MIT for so many years.)

(There's a reason SICP is/was the first class for incoming comp sci freshman at MIT for so many years.)

Berkeley also.

The youth is wasted on the young, and CS61A is wasted on freshmen. Only years later did I truly appreciate what CS61A was trying to teach me.

He did say "computer science", not "programming".

Yes, but the OP is concerned with

I might want to make good money. Thus: programming & finance. I currently lean towards programming.

which has little to do with comp sci.

which has little to do with comp sci.

Strongly disagree w/ this. $$$ creates vast distortions and crappy norms.

One needs to understand what one is doing.

[-][anonymous]7y 8

But $$$ are the very reason the OP is considering programming in the first place, otherwise they'd presumably stick to physics.

[-][anonymous]7y 8

What IlyaShpitser is saying, I think, is counter-intuitive, seemingly irrational, but generally true: if you make every decision based on $$$ concerns, you lose perspective, a willingness to take risks, the desire to perform creative exploration, and incentive to learn the fundamentals which enable the above. This will make you a mediocre programmer with only moderate $$$ potential, whereas if you focused instead on really becoming a master of your art, $$$ can follow in large quantities.

[-][anonymous]7y 0

What is one trying to do?

Here I am just talking about myself in OP's situation, not about OP. Obviously OP may have different priorities. $$$/effort is not very good in technical fields in general. Given that one wants $$$ and be a techie, I imagine there is some sort of tradeoff involved where one wants "interesting work (given a techie predilection)" but also make a decent living. Given this, the best bet seems to me to just become technically good at what one does (which would involve studying that pesky underlying computer science). Why even bother with a technical field for $$$ otherwise if you are in the kind of percentile that can study quantum physics?

[This comment is no longer endorsed by its author]Reply

which has little to do with comp sci

That rather depends. You certainly don't need comp sci background to write ten pages of spaghetti in VB for Excel. But if the OP wants to actually be a good programmer, a foundation of comp sci will help.

Hacker School is totally free (with living expenses paid if you're a woman). I believe five rationalists including myself have done it. Unlike most bootcamps it has basically no official structure--you and all the other hackers/aspiring hackers think of cool stuff to do and then do it. They will help you become a better programmer and find a job. The community is great.

I don't know specific techniques to design good algorithms for problems.

I would suggest reading an introductory book on algorithms and data structures. There are a number of good ones, and none of them is strictly better than the rest, but for your case I would recommend Steve Skiena's Algorithm Design Manual, which can probably be found in your university library. It's very readable, discusses how to go about solving algorithmic problems, and has a lot of breadth.

This is some of the higher bang-for-the-buck knowledge in CS, and surprisingly relevant to the Real World.

[-][anonymous]7y 2

I've found Sedgewick's "Algorithms in " to be a great introductory and comprehensive textbook for this stuff.

My recommendation for mathsy people is two very different books: Skiena, recommended above, and "Introduction to algorithms" by Cormen, Leiserson, Rivest, and Stein. Skiena is informal, discursive, and strategic. CLRS is formal, mathematical, and tactical. They complement each other nicely.

[EDITED to add: CLRS and Sedgewick are quite similar in style and content. I find CLRS more rigorous and analytical, which is good in a complement to Skiena. Personally I'd prefer CLRS even without Skiena, but I can see why others might not. I should also say that I haven't seen the latest edition of either book, and that I have a copy of CLRS but not of Sedgewick, which I therefore don't know as well and may be being unfair to.]

Seconded; that's the book I learned from, and would have been my runner-up recommendation. In particular, its pictures are excellent, and there are loads of them.

[-][anonymous]7y 2

For anyone with a visual thinking process, the diagrams are invaluable. Seeing the nodes layed out spatially makes it really easy to understand how the algorithms work any why they achieve the performance they do.

Artificial Intelligence: A Modern Approach, in addition be being a smashing good book on AI, include many projects small enough for novice programmers to complete, yet compelling enough to feel proud of completing.

My reply for building up a broad programming competence from the last time this was asked. I'm a professional C++ programmer, but don't know as much about the business side of software business as I probably should, so if your terminal value is a strong career trajectory instead of a good programming competency, there are probably ways to optimize the list.

I'm in a very similar position to the poster (same field of study, same time line) and am very interested in the answer, just posting to signal that (at least) two people are looking for this advice.

[-][anonymous]7y 4

Find a python program that does almost what you want and hack it to do what you want in a way that's maintainable, and then contribute that back. Do that often enough with enough projects that you have a portfolio of both small bugfixes and projects that you're moderately involved in.

Once you have a good portfolio, I'd try getting an internship at a software company. Most internships either come with job offers or are near-perfectly correlated with job offers, so treat this seriously.

I'd focus more on real-world coding than working through CS textbooks. Not a lot of academic computer science is really relevant to a career in the software industry. Most of SICP definitely isn't. SICP is a great book, but it's very academic.

See also:

Here's a list of coding bootcamps.

I went to App Academy. Before going to App Academy, I had taken two college classes in comp-sci/programming and tried to teach myself some web programming. I think the autodidact route has a major draw-back which is that it's easy to get really stuck, and that can be very discouraging.

Not only is App Academy really good for learning, but you don't have to pay them unless you get a tech job afterwards.

Also, there are quite a few other LWers who've gone to app academy.

Good luck!

Is room and board included? Alternatively, how expensive is it to house yourself while attending one of these events?

App Academy is live-work in San Francisco: meaning lots of people bring air mattresses and stay in the office and get a gym membership to shower. My understanding is that they are working on making the NYC office live-work as well.

[-][anonymous]7y 0

No room and board as far as I know, and since app academy is in SF and NYC, expect the most expensive housing requirements anywhere in the united states...

It's hard to beat free though.

You could also supplement your learning by doing a couple of standard industry certifications related to security, although I do not know how relevant something like CISSP would be in quant finance environments, it would give you a little bit of background, especially if you haven't been interested previously. This and other similar courses also give you a considerable foot in the door at certain environments requiring security clearances.

I agree with the rest of the comments that a github profile (even contributing to interesting projects you didn't create yourself) outclasses a CV, I'll post a video by Continuum Analytics about why python is getting so strong in science in analytics, but can't seem to find right search criteria, right now.

[-][anonymous]7y 4

You could also supplement your learning by doing a couple of standard industry certifications ...

Honestly I think this actually does more harm than good unless you actually need it for your job.