
Ask HN: Coder at heart, PhD in pocket. Job advice please - lostphd
Hi,<p>I&#x27;m feeling a bit lost. Advice appreciated. Posting under a new account but long-time HNer.<p>I have a CS PhD from a top-10 University. In my mid-30s. Recently married and trying for kids. I love to code - while I am decent at it, I&#x27;m not a 10xer. I probably code 30-50% of my time at work. I&#x27;m pretty broad in my interests and, since I currently work in research, I move from one area to another. In the last 3 years, I&#x27;ve professionally written code in Java, Python and Go. That said, I have the same skills as someone who did a University course in any of these languages.<p>I&#x27;ve been at my last employer for the last 4 years. Very serious about changing my job and getting out of research. I&#x27;ve gotten interviews lined up at the heavy hitters but I am extremely nervous. Previously, I failed to get offers from some major league software firms (Google, Facebook, Twitter, Apple, Amazon, LinkedIn, NetApp). I also interviewed at some small, exciting startups and failed to past their dev interviews.<p>I&#x27;m in a place where my confidence is shattered. I have recruiters setting me up interviews as a senior dev. My wife isn&#x27;t in tech and she is being supportive. Says I should be confident since I have so much experience and am a pretty strong technical person. When I look at myself, I see lots of breadth but no depth (oh and no management experience to speak of).<p>A related issue. I have a weak memory. As a regular person, my memory is probably average. As a developer, it is weak indeed. I have 5 languages listed on my resume - I&#x27;ve written code in each of them. But I&#x27;ve messed up programming interviews because of minor slips - one time I didn&#x27;t get passed the phone screen because I couldn&#x27;t implement a Singleton in Java and Python. The large set of languages I work with compounds the problem. My resume should say half as*ed coder with Go, C, C++, Java, Ruby, Python, Elixir.<p>I&#x27;m looking for honest feedback.
======
oppositelock
Your credentials are great, but it sounds like you need to work on your
interview skills, and not necessarily the technical side of things.

I've worked at three of the major league firms you list, and interviewed
several hundred engineering candidates between them.

If I was to give one bit of advice, it would be to focus less on getting the
perfect solution to their questions, but instead, talk through your thought
process and explain why you're doing certain things and not others.

The most difficult interviews to evaluate are those where the candidate goes
all quiet at the whiteboard, and then panics when they assess their own
performance as poor.

I've recommended hiring plenty of people who were excellent communicators and
logical thinkers, even though they didn't successfully answer the interview
question, but they walked me through their thought process, and I could see
that they're just getting tripped up on something.

Think about a handful of the coolest problems or bugs you've ever worked on
and be able to explain why they're cool. Have a good understanding of common
data structures (trees, tries, lists, hash maps, etc), and their big-O
complexity. You've got to be pretty excited about something to get a PHd in
it, so let that excitement come through in the interview.

Your communication and energy level, especially excitement about your chosen
field, are as important as the technical questions.

------
MalcolmDiggs
Interviewing sucks; for everybody, not just you. But it gets better as you get
more practiced at it.

My advice would be to line up 10-20 interviews that you absolutely don't want.
Jobs that are too junior for you, jobs that are a terrible fit culturally or
ethically. Companies you wouldn't be caught dead working for. Then just march
in there and get practiced at interviewing. There's no pressure, you don't
actually want the job; you're just there to get really good at doing exactly
that. Spend a few weeks doing this, have a job interview every evening after
work, or every day on your lunch break.

Later on, apply to the jobs you really want and it'll feel like a walk in the
park. You'll be a pro at it.

I personally still do this to this day; a decade into my career. I'm on the
job hunt right now actually. I had 3 interviews yesterday and only one of them
was real. These days I like to mix it up, and have at least one warm-up
interview the same day before any big interview for a position I really want.
Practice makes perfect.

~~~
scmoore
I think this is good advice, but I worry about wasting the interviewing
companys' time. Of course in my experience they rarely worry about wasting my
time, but I guess I'd be concerned about becoming known as someone whose
interest in a position isn't trusted.

I suspect that this is my inner Cinderella -- be humble, scrub the floors, and
one day my hiring manager will come. I feel like that princess is really
hurting my bank account.

~~~
MalcolmDiggs
I think these are valid concerns. It's definitely a selfish thing to do; but
in this particular case, I'm okay with it for some reason. I guess it's a
"ends justify the means" kind of thing. I draw the line at lying about my
intentions. If they ask me, I'll definitely tell the truth about how seriously
I'm taking them. Regarding reputation, who knows. I think many hiring-
managers' hubris gets in the way of them thinking they're a warm-up company.

------
honorious
I interviewed many candidates with PhDs for one of those major software firms,
and I was not long ago one of those candidates myself.

My advice is to spend some time and practice interview questions: go from the
problem, to the idea of the solution, AND WRITE DOWN THE IMPLEMENTATION in a
piece of paper (or screen).

The last step is the key. Many people I interviewed knew how to solve the
problem, but then had no clue on where to start when writing down a concrete
solution to it. This is not a matter of being not technical, it's really a
matter of practice.

Also, in those large firms, nobody cares that you already know a bunch of
languages. It's better being able to demonstrate that you know one of those
well. Part of the assumption is that if you know one well, you can learn the
others if needed.

~~~
sjg007
This. Also pick a single language to do it in: I would recommend Java.

------
jaguar86
Not so long ago, I was pretty much in your situation, except that I didn't
have a PhD. I was moving into a software engineering role from a DevOps role.
I was initially flunking a number of interviews at pretty much the same
companies you have mentioned. My advice as most, Practice and Patience while
solving problems. Practice talking through a problem in particular. The
interviewer is waiting with a hint in hand, which you can always use to get a
direction in which to solve the problem. Getting this hint 100% of the time
from the interviewer is 100% fine.

As for study, I highly recommend the index page of this book, Elements of
Programming Interviews, as a reference. It contains a catalogue of questions,
whose complexity exceeds that of CTCI or PIE. Here are the links.

For the entire book, [http://www.amazon.com/Elements-Programming-Interviews-
Inside...](http://www.amazon.com/Elements-Programming-Interviews-Insiders-
Guide/dp/1479274836)

For just the index page, [http://elementsofprogramminginterviews.com/pdf/epi-
toc.pdf](http://elementsofprogramminginterviews.com/pdf/epi-toc.pdf).

Good luck!

------
dinkumthinkum
What feedback have you gotten from interviewers? I'm surprised you are having
so much difficulty at those companies with a PhD, they routinely hire people
with far less experience or knowledge. I don't think you should sell yourself
so short as to try to compete for the kinds of jobs people get after 6 months
of a code bootcamp or something like that. That would be an enormous waste of
your talent.

------
gus_massa
I'm sorry I can't give any useful advice, only a nitpick.

Please change the "pls" in the title to "please" while you can edit it. If you
are asking people for help, at least show that you value their time and write
"please" and "thank you" with all the letters. (I think that "CS" and "PhD"
are fine.)

~~~
lostphd
Done :)

------
brianjester
LostPhD,

Consider cultivating your programming side by working on an open source
project, by helping to maintain code, implement fixes etc., in a language that
you like, and don't quit your day job until you have something you want lined
up. In the meanwhile, keep improving in whatever area you do research in even
if it's not programming. You're memory I'm sure is not weak, but you're rusty
with the specifics of that interview question, that is not a poor reflection
on your character. Hang in there and work on incremental improvements in the
different areas you care about.

Brian

------
lostphd
Some more data:

I study pretty much all my free time (time not spent with my wife). 2 hours a
day reading papers, books, etc. I don't think studying more will help.

I can't post on github. Employment agreement says all the code I write belongs
to my employer and can't be opensourced without jumping through some hoops.
Won't make this mistake the next job I end up at.

I think I can move laterally without too much grief. I.e. get another research
job. I have experience in systems and clouds. Lots of research groups would
want someone like me.

------
jkot
I would say you should not go to interviews, where you have to prove generic
coding skills. Stick with one narrow area/library and keep subject on that.

And if you can not implement singleton under pressure, there is possibly some
underlying reason. Concentrate on that reason.

------
lingua_franca
It's nothing to do w/ memory but practice. Only keep one or two hot languages
like python or Node.js on resume; go to websites like www.geeksforgeeks.org
and finish every f*king question. try to write fast and bug-free code, u will
land a job very soon.

~~~
lostphd
Thanks. I haven't seen that site before. I got cracking the coding interview
(which seems too easy) and Elements of Programming Interviews (picked that up
a few days ago and that book has some hand in shattering my confidence. Is
that the bar for devs? If true, I freely admit I'm not at that level).

~~~
lingua_franca
just practice, keep thinking and coding. in a few months u won't give a damn
thing abt such coding questions.

------
iblaine
On the top of my resume I include only languages that I'm current on. Then in
the job descriptions I may go into more detail. Usually you'll be asked to
code in your favorite language anyhow.

~~~
lostphd
This is a great idea. Now that I think about it, it seems silly boasting how
I've coded in so many languages. The reason I had them on my resume was to
indicate that I have experience writing code in them. I like your idea of
listing something under "Currently used" and listing the others under
projects. That way, there is less chance for ambiguity.

------
trcollinson
In all honesty, take a deep breath, relax, it's going to be ok.

Now that you have done that, here is a bit of feedback. You seem a little
scattered in your thinking. This isn't the biggest problem in the world. You
need to just hide it a bit and look less scattered to your potential
employers. Here are a few ideas:

First, you have a PhD. This tells a potential employer very important details
about you. As an interviewer I care very little about your thesis, about your
advisor, and about which papers you are current researching. I DO care that
you spent a significant amount of time solving problems. You found a problem,
you stuck with it, and you solved the problem. Again, I have my own problems,
I don't care at all about the problem you solved to get your PhD, just that
you did! You have a HUGE ability to stick with things, this is an asset.
Practice getting this out during your interviews. Make sure they know this is
a skill they need within their organization and that regardless of the
challenge, you will conquer it.

Second, you have a lot of languages. There is nothing wrong with that, but
tune your resume and your interview towards the one this potential employer
needs. You mention that you study a lot. Spend that time studying the needs of
the person you are interviewing with. Know a lot about their product, about
their environment, and about their history. Be ready to talk to them about all
of these things. Defend your "mini thesis" about this organization every time
you walk into an interview with them.

Third, practice confidence. I know this is easier said than done. I am not
always confident in myself nor in my abilities. But I practiced and I show
confidence when I walk into an interview. This helps a lot. Control the
interview by asking questions, talking about what they need, knowing what to
say when you get stuck, and showing your skills even when you feel nervous or
scared that things aren't going well. Over the years some of my best jobs came
from interviews that I was SURE I bombed miserably. Use your study time to
practice these skills for a while. Never call yourself half as*ed again. Ever.

Finally, practice interview questions! Google "interview code questions" and
practice one a day. Practice them in different languages. Really understand
why you use some of the techniques that you use. You have an AMAZING ability
to study, learn, reason, and defend your ideas. Use these skills to your
advantage. You will do well!

Final Note: interviewing is a numbers game. You have to interview with a lot
of companies to get where you want. You are already playing it well. Keep
interviewing because you only have to pass that one best interview to get that
one best job that you have been looking for. You can do it!

------
rjammala
Read Steve Yegge's: how to get that job at Google and try to do a lot of
practice before you go for interviews.

Good luck.

