Oh and the always responsive HR or whoever is in charge. Getting back to you after 6 months. Thanks but no thanks. I would rather make more money in a stupid corporate job than working on more aggressive ways of making people to click on ads.
Could you name a few "stupid corporate jobs" that pay better than Google or Facebook (200k - 300k for a senior engineer) ?
http://www.businessinsider.com/how-expensive-is-san-francisc...
You're already at 91,000 for basic expenses.
That puts 200k right around the mark for a livable wage and 300k pretty comfortable (and also at the high end of a senior dev wage by a fair margin).
To begin with, when discussing wages most people are assuming for a single person taking care of his or herself. The wage needed to support a fully family including enough for a stay-at-home parent would be significantly higher.
Even with all of that a family of 4 with only a single adult working is estimated a living wage in SF area is deemed to be 70k.[1] Not 200k. I'm assuming you're meaning "livable wage" to be different than "living wage".
Even if we were to going with the businessinsider data, which says 90k for expenses for a family, you're claiming that a family would need to spend almost 10k in discretionary spending every month for a "livable wage"? Remember all required expenses have been paid for, this would just be for discretionary. If you've already paid for "housing, food, childcare, transportation, healthcare, taxes and other necessities, and taxes" and are still going through an additional 10k/month, you're beyond a "livable wage".
Looking at the sources of these various numbers, the $91k number in the busnessinsider article comes from http://www.epi.org/resources/budget/ which breaks down the annual costs as follows, annually, for the SF metro area:
* Housing: $23k (seems fairly low for a family of 4 in the Bay Area, but I guess it depends on how far out you live)
* Food: $9384 (quite reasonable)
* Child Care: $10815 (seems unrealistically low for 2 kids if both parents work; hard to tell if only one works, since I would expect that to be near-0 for a bare minimum).
* Transportation: $7300
* Health care: $12,453 (might be high depending on your employer)
* Other necessities: $15689
* Taxes: $12490
I assume that tax number is based in the actually cited $91k income, so to figure out how much more income we need for discretionary spending and savings we need to look at marginal tax rates. Looks like CA state income tax is 8 or 9.3% in the relevant income range (60k-500k for couples). Federal rates are 25-28% (75k-233k taxable income). Medicare is 1.45% until we get to 250k. Social Security is 6.2% until we hit the cap. So a marginal rate of 35% to 39% not counting Social Security.
Retirement savings should be ~15k here (15% of income is the common recommendation), and can often be done "pre-tax" (so only taxed by Social Security and Medicare); let's call this 16k gross income.
Are you saving for college for those two kids? Any other savings (e.g. for a house)? Any discretionary income at all? Multiply all those numbers by 1.6 or so to account for the taxes involved. Realistically I would expect this to come to another 20-30k easily for anything resembling a "middle class" lifestyle.
Looking at the numbers from your link, they have a much lower healthcare estimate (~6k/year), a somewhat higher housing estimate, correctly estimate childcare costs if only one parent works, but still have what look like ludicrously low numbers if both parents work. The "2 adults, both working, 2 children" number from your link is $83k and the difference between that and the $91k from the businessinsider article is all down to the health care number.
Anyway, the correct conclusion here is that in the Bay Area for a family of 4 you need an income in the 70-90k range (mostly depending on how much you pay for health insurance and whether you both work) just to barely scrape by, with no savings and no discretionary spending of any sort. At 150k you can probably do ok in terms of being able to save for retirement, college, maybe take some vacations every so often, etc. 200k should be reasonably comfortable if you have no pretensions to more than 2 bedrooms (notice that housing for 2 kids is claimed to cost the same as for one kid) and aren't trying to get into good school districts.
If you want good schools or more living space than a small 2-bedroom place way far from anywhere, the housing numbers cited above are almost certainly way too low...
A family a 4, with only a single parent choosing to work, with fully funded retirement savings, while also saving for college, and possibly even saving for a house. Using the estimate above, that came to 150-200k.
So now, 65%+ of households have both parents working.[1] A single parent household is a luxury (without any judgement or whether it should or shouldn't be that way, it is). Assuming dual incomes in the above situation we would half our salary range. Taking the upper end, we'd get 100k as the required livable wage to match this household income.
Even more notably it's a calculation for a household income for a family a 4. Not a livable wage for a single-person which would be the other default expectation besides two parents working. Using the same two sources as previously we can see that the income required for a 1 Adult household is roughly 50% that of a family of 4 single breadwinner household. Take our 150-200k estimate multiple by this roughly ~50% factor, take the more generous end and again we end up with the salary in the range of 100k.
From this the most reasonable number for a livable wage would be ~100k.
1. https://www.washingtonpost.com/news/wonk/wp/2016/12/22/the-d...
Unfortunately, not quite. If both parents make 100k, your tax burden is higher than if one of them makes 200k and one 0 (because of the social security cap). More importantly, your child care expenses are much higher. So are your food expenses, typically; this part is correctly reflected in the data table you linked to.
In practice, I would expect a two-earner household, both earning 100k, to have 10-30k/year more in expenses than a one-earner household; the range mostly depends on how much child care costs.
100k for a single person is certainly pretty comfortable, even in San Francisco. Much more comfortable than 200k for a family of 4, I suspect, because housing is so much simpler.
Ok, so 105k-115k / yr. I think we're reaching the point (in economic terms) where the marginal cost of corrections or adjustment exceeds the marginal value they provide.
The summary though is that 105-115k is not near the 200k originally mentioned and absurdly far from the 300k.
Now if you want a big house, then most of the cities that Google is in are terrible for that. But there's more to life than having a big house, and the expensive metros have their own pros. It's pretty hard to beat Silicon Valley weather, and for what amounts to a giant suburb the restaurant scene is quite good (especially for Asian food).
It does take a lot of preparation for big-company clueless interviewing processes though. Next we'll see guides for how to ace your kid's application to the top-tier coding preschool.
All this sucking up to big companies with questionable morals and procedures, for the money, is so... 80s. So yuppie, so Reagan-era. Reachin' for the top! Go for it! Eye of the tiger! Pressure, pushing down on you, pushing down on me, no man ask for.
Edit: The question is based on this article I read a few months ago: http://blog.interviewing.io/lessons-from-3000-technical-inte... The bar chart in that page is very interesting. HN discussion here: https://news.ycombinator.com/item?id=13272840
How would one go about getting your foot in the door at such companies (I've had similar experiences with both Microsoft & Facebook as well) ?
Often employees will be open to referring you even if you don't know them well. Use social media, Facebook groups, Quora, etc. Recruiters want to be found.
Have an active github.
Make yourself Google-able. Have a website where you list projects. Screenshots help make things feel more "real", especially if it's a recruiter/sourcer who might not understand some of the technical details.
Hackathons and conferences also. They're swarming with recruiters.
Having been on the recruited and recruiting side for one of the big 5, I'd add an extra advice: Don't panic if you don't have any of the things mentioned above, especially when still young in College.
I didn't have an active github, nor a website, nor screenshots of my side projects. If you're genuinely passionate when you talk about it (no matter how small you think this is), the recruiter will notice this.
One of the most important advice that was given in this article for me is: "Show initiative even at the risk of failure"
-> You did X in a class project : It won't matter so much because you had to do it to pass your class. If it's a group project it will matter even less because there's no way for the recruiter to know if you did 90%/50%/5% of the job.
-> You did a small Android app or a personal command line tool for you, but you didn't publish it at all on github, and it's a private thing (a tool to help your grandma do X remotely), it's fine, but like the Amazon interviewee who started her game company: Mention this on your resume and to the recruiter!!
I've also seen people downplay achievements because they thought it looked lame compared to what is produced by Google/Amazon/FB/Microsoft ... but those products have dozens if not hundreds of engineers behind them, PM, UX teams etc. Of course your project will be lame compared to it. Still put it on your resume.
If you're going at a top CS school, having all of these doesn't matter as much, the recruiters usually know that the projects/classes you took are not trivial (via Alumni giving feedback on those), if you go to an average one, you need to show your passion in one way or another, working on a small side project you genuinely enjoy is a great way of showing this.
Finally, if you have very little time for side projects because you're busy working multiple side jobs to be able to pay your tuition and rent, mention it somehow when talking with a recruiter. You certainly don't want the recruiter to perceive you as what the authors describe "mentally lazy" when in fact the reason you're not doing that much in the side-project side is because you're working your ass off to simply be able to graduate. You can also use some of those side jobs experiences to show the recruiter you have some applied leadership/teamwork skills.
So if your goal is to get the interview, go through referrals. Don't expect anything from side projects.
I've seen some companies decide "well, whiteboard interviews are flawed" and just scrap the whole thing and replace it with something else... that's much more flawed. They're really not being honest with themselves about what the flaws exactly were in whiteboard interviews and if those are fixable, or what the flaws are in their new process.
There's a lot that can be done to make whiteboard coding/algorithms interviews less flawed. - Be clear with candidates and interviewers about expectations. What knowledge is okay to assume? What knowledge is not? - Clear guidelines on what makes a good question. A lot of companies ask very simple or well-known questions but think they're emulating what Google does. They are not. - Good interview training. Most companies don't have interview training, beyond maybe basic legal stuff. Even the companies that do have training typically have crappy training. - Interviewers should candidates with certain things that might not be obvious. For example, writing examples of input and output on the whiteboard is helpful. Don't rush into coding.
There is A LOT that can be done to make whiteboard interviews more effective.
You can also replace them with some other things, but understand that those will come with their own flaws. Scrapping whiteboard interviews is not going to deliver you some perfect system.
(Context: In chess, a queen can move along a row, column, or diagonal to attack. The N Queens problem is to place N queens on an NxN chessboard such that no two queens can attack each other.)
No one does poorly here because they are "bad at chess algorithms." They might do poorly because they think they're bad at chess algorithms. But this is not a "chess algorithm." It's an algorithm, with a chess skin.
But, sure, if you're bad at chess algorithms, I'll give you this problem: Given an N by N boolean matrix (all falses), set N cells to true such that no two rows, columns, or diagonals have two trues.
Same question, but with a boolean skin. Now will you be able to tackle it?
So, advice: Don't assume you're bad at __ type of algorithm question. For the most part, this isn't true. At most, there's a tiny bit of knowledge to tackle it (so you're not bad at it; you just don't know something). Nearly every time I hear someone say they're bad at some type of question, it's actually just an insecurity. They aren't even missing any knowledge.
The only partial exception here is recursion/dynamic programming, which does have its own little approach.
At a higher level: Can you ask for a new question if you're bad at that type?
You could, but it's risky. If I ask you a question that really involves pointers and you don't understand them, then okay. But realize that this might be a deal breaker for me. I might need that knowledge, or I might be concerned about the tendency to give up.
You're probably better off just voicing something like: "To be honest, I haven't worked much with pointers. I'm happy to give it a shot though, unless you want to move onto a different question."
Someone who's never come in contact with backtracking won't be able to solve n queens "in time", unless they pull a mathematics stunt, but those who do know backtracking won't struggle much.
On a higher level - how much of an "already seen the algorithm" crapshot are tech interviews?
And given the fact that a lot of the problems in your book are trivial in higher level languages (reversing a string is only hard if you somehow don't know how to do pointers) - what's your opinion on trying to use Java on a whiteboard in 2017? Has python officially become synonymous with pseudocode?
Back to leetcode I guess.
I'd say it is mostly that. Just do thirty to fifty leetcode medium problems (some of them on pen and paper), and you're good to go.
>will never be able to practice enough to do well on a well-conducted interview
Or in other words a true scotsman interview.
It sounds like you can't bring yourself to write "on an average interview at Google" because you wish they wouldn't pick common interview problems - but they do.
Based on what you just wrote, I'd certainly work through books of "interview questions". Because your phrasing just proved it works, even though ideologically that is not what candidates "should" do.
Taking a step back: If preparation can give a bad candidate a good shot at passing the interview, then that interview process is broken.
If you have a company with a bad implementation of whiteboard coding interviews (for example, who just pull questions out of Cracking the Coding Interview), then it's absolutely true that a bad candidate could pass this process.
This doesn't mean that whiteboard interviews are broken. It means that this company's implementation of whiteboard interviews is broken. There is a difference.
For Google specifically, their implementation is decent, but not ideal. A bad candidate would have low odds of passing an average interview at Google, but those odds are not as low as I'd like.
>> On a higher level - how much of an "already seen the algorithm" crapshot are tech interviews?
>I'd say it is mostly that. Just do thirty to fifty leetcode medium problems (some of them on pen and paper), and you're good to go.
Nobody in this thread cares if the reason this advice actually (in actual practice) often works is that the interview process is broken.
nobody cares if the reason we get the job is because we exploited a flaw, and we "shouldn't have" done it that way. Basically, where you just wrote,
>Taking a step back: If preparation can give a bad candidate a good shot at passing the interview, then that interview process is broken.
you should have written:
>Taking a step back: If preparation can give a bad candidate a good shot at passing the interview, then I have to admit, if you strictly want to increase your chances of getting a job, then you can do so by preparing -- but I grit my teeth while saying that, because that interview process is broken.
that would have been honest and matches the reason others had for the above thread! anyway, thanks for the responses.
I didn't get through at Google. However, I only asked for 3 weeks to prepare, and I have outside obligations (kids, coaching, that sort of thing). I can easily traverse a binary tree, print all permutations of a set, do DFS and BFS. But I'm not super sharp, especially at a whiteboard.
My review was "not bad, good analysis, but didn't make enough coding progress".
Maybe they were being nice. As I said in another comment, I'm not allowed to know what my scores or reviews were.
FTR, I was a math major, though I did take basic CS algorithms and data structures. So I have a background, but probably further to go than a typical CS major.
I know it will vary by individual, but how many hours, over what period of time, would you say counts as "enough practice" where you might start considering that you probably aren't going to be able to practice enough to do this. Could you ballpark it?
I'd prefer to avoid "unintelligent", but you know, a point at which you'd say, this probably isn't for you, might be time to get some new goals?
A properly conducted technical interview will not be about having seen the algorithm before. Some companies screw it up though. But then, these same companies also screw up other parts of the interview process.
I disagree that using certain languages makes a lot of problems trivial. Maybe it makes certain problem trivial, but those tend to be easier ones anyway. They're already trivial. And even if your language has a function that performs the exact thing being asked, the interviewer can easily ask you to go implement that thing.
Java is fine for a whiteboard. So is python. So are most languages.
No, python has not become synonymous with pseudocode. I'm not sure what you mean by that.
The more difficult ones feel like you absolutely have to have seen the problem before because there is complex relationship between the sub problems that are used to solve by induction/bottom up. How is someone supposed to solve these? Throwing out tons of guesses at the start feels like it'll still end up with me getting shown out before lunch time.
Recursion and memoization is easy but dynamic programming doesn't really feel as natural. Ways to get better? Just do more?
Once you have the recursive solution, the DP solution should be fairly easy. Draw out the recursion tree for an example (or do it more generally), convert it to a DAG by combining redundant nodes, and then do a topological sort. That topological sort is the order in which you need to solve the subproblems to get a DP solution.
If you want to flip a memoization problem into bottom-up dynamic programming: 1. Make sure you really understand the memoization approach 2. Look at the base cases. What are the very last things the recursive approach does? 3. Build up the next case from the base case. 4. Repeat
Generally, no. Not unless you want to look like a whiny stick-in-the-mud.
Does your book have more anecdotes of candidate "fails"?
Would you be willing to share some more stories?
Does CtCI publish those times for its problems? How would I know I'm too slow to solve a kind of problem before interviewing?