Ask HN: Coder at heart, PhD in pocket. Job advice please
I'm feeling a bit lost. Advice appreciated. Posting under a new account but long-time HNer.
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'm not a 10xer. I probably code 30-50% of my time at work. I'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'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.
I've been at my last employer for the last 4 years. Very serious about changing my job and getting out of research. I'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.
I'm in a place where my confidence is shattered. I have recruiters setting me up interviews as a senior dev. My wife isn'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).
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've written code in each of them. But I've messed up programming interviews because of minor slips - one time I didn't get passed the phone screen because I couldn'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.
I'm looking for honest feedback.
[+] [-] oppositelock|11 years ago|reply
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|11 years ago|reply
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|11 years ago|reply
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.
[+] [-] honorious|11 years ago|reply
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|11 years ago|reply
[+] [-] jaguar86|11 years ago|reply
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...
For just the index page, http://elementsofprogramminginterviews.com/pdf/epi-toc.pdf.
Good luck!
[+] [-] dinkumthinkum|11 years ago|reply
[+] [-] gus_massa|11 years ago|reply
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|11 years ago|reply
[+] [-] brianjester|11 years ago|reply
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|11 years ago|reply
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|11 years ago|reply
And if you can not implement singleton under pressure, there is possibly some underlying reason. Concentrate on that reason.
[+] [-] lingua_franca|11 years ago|reply
[+] [-] lostphd|11 years ago|reply
[+] [-] iblaine|11 years ago|reply
[+] [-] lostphd|11 years ago|reply
[+] [-] trcollinson|11 years ago|reply
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|11 years ago|reply
Good luck.