Earlier quoted context omitted.
Conjecture: the majority (by far, probably on the order of 75%-80% or more) of programming and engineering problems to be solved in a typical company or typical application will not see significant differences in performance by selecting a naive implementation. For example, in your string concatenation example, the naive solution is good enough except in situations where large numbers of strings are to be concatenate…
Sure. But at the scale of e.g. Google, Amazon, etc. how often do you think they are performing these lower level computations? From my experience: very frequently. So it's useful at these corporations for all engineers to have this understanding, I think.
Why I Don’t Talk to Google Recruiters
561–570 of 674 posts
Re: Why I Don’t Talk to Google Recruiters
#562There is no point in giving me binary-tree-traversing questions; I don't know those answers and will never be interested in learning them. Let's presume this is out of preference and not ability. It's a pretty basic concept. If your preference stops you from learning something as basic as this as a programmer, then it doesn't seem likely that you will be motivated to keep up with even more abstruse concepts. Nearly e…
I agree. Personally, I'm a bit horrified at the idea that someone who wants to be an "expert at object oriented design" would turn up their noses at "binary-tree-traversing questions". It sounds like a formula for aspiring Architecture Astronauts. It's also not realistic, given the wheat-to-chaff ratio out there, for a manager to interview all the candidates directly without an elaborate screening process, although t…
As you say at Intel: SE -> Senior SE -> Staff SE -> Senior Staff SE -> Principal Engineer
IBM has: Engineer -> Staff -> Advisory -> Senior -> Senior Member of Technical Staff -> Distinguished Engineer.
I'm sure other companies have different ranks too.
Unless you dig into the technical ladder of each company, its hard to say that Staff SE is the same everywhere.
Re: Why I Don’t Talk to Google Recruiters
#563Re: Why I Don’t Talk to Google Recruiters
#564Earlier quoted context omitted.
>Let's presume this is out of preference and not ability. It's a pretty basic concept. If your preference stops you from learning something as basic as this as a programmer, then it doesn't seem likely that you will be motivated to keep up with even more abstruse concepts. This same exact argument could be used to require every interview candidate to know assembly. >and the person who likes to think about such things…
> This same exact argument could be used to require every interview candidate to know assembly. Yes, and that argument could be used to require every interview candidate to know quantum physics. At some point you draw a line, and Google/Amazon/Microsoft/etc. have very clear pictures of where their respective lines should be. It seems to work well for them.
There is no proof that they are actually preventing bad engineers with this process or that they couldn't get much better engineers and fewer flops by fixing it.
People want to work there in spite of these irritating hiring processes. I frequently travel via plane but that doesn't mean I think the TSA process is good.
Re: Why I Don’t Talk to Google Recruiters
#565Earlier quoted context omitted.
>Let's presume this is out of preference and not ability. It's a pretty basic concept. If your preference stops you from learning something as basic as this as a programmer, then it doesn't seem likely that you will be motivated to keep up with even more abstruse concepts. This same exact argument could be used to require every interview candidate to know assembly. >and the person who likes to think about such things…
> This same exact argument could be used to require every interview candidate to know assembly. ...because knowing assembly is actually useful to a high level developer? If it were, then yes, I'd say they should know assembly too. But I know assembly; I've written entire published games in assembly language. And yet I don't believe knowing it is actively useful any more. Knowing the basic concepts like how strings, i…
It's about as relevant as implementing quicksort.
>My guess? They've accidentally used an O(n^3) algorithm where they delete one character at a time and copy the entire message, re-concatenating it every time.
Or it's actually a javascript event handler that is doing something else expensive per char delete. It's more important to know to profile rather than try to memorize every algorithm used by a system and guess which one is causing the problem. Once you identify where the bottleneck is, you can search for "efficient algorithms to do X".
People who profile and fix bottlenecks are much more valuable than people who think they have implemented the most efficient algorithm for every operation in their program.
Re: Why I Don’t Talk to Google Recruiters
#566My personal experience with the interview process at a couple of these companies is that even if you CAN solve the problems, you will usually run out of time - Unless you practised that specific problem recently.
Also, they tend to favor engineers who can come up with solutions quickly as opposed to engineers who can come up with optimal solutions.
They could look at stuff like open source projects you created/worked on, past successful companies you've worked at, etc... But no, they don't care about that; instead they prefer to have this random selection process which favors experts in specific algorithms or thinking styles which often have nothing to do with the company's core business.
Re: Why I Don’t Talk to Google Recruiters
#567Earlier quoted context omitted.
Paraphrase: you have to compromise due to market realities. Isn't that an indictment of the poor state of training in our field?
Yes and no. I think that the lead or "surgeon" (to quote The Mythical Man Month) in charge of any app or service development project should be well trained. Anyone who brings in a junior developer (anyone without a CS degree or equivalent, or less than 5 years of professional experience) to lead a project is asking for trouble. But I think that average developers don't need the full training any more than a nurse nee…
A nurse needs to have enough 1st Principles knowledge plus specific training to keep from making egregious mistakes. In fact, where X is a profession, an X needs to have enough 1st Principles knowledge plus specific training to keep from making egregious mistakes.
The fact that our "field" keeps producing X without that minimum level means something is broken. It would be like the nursing field producing nurses who didn't know how to spot a Tension Pneumothorax, because most nurses don't have to deal with that 99% of the time.
So yes, I'm arguing for certifications despite the fact that I view certifications as useless. If we had good certifications, maybe we could help establish a better way to distinguish developer skills.
The fact that you entertain this thought is an indication that something is not quite right with our field.
Re: Why I Don’t Talk to Google Recruiters
#568Earlier quoted context omitted.
You must mean "some software projects" and not "frequently." In the 2000's and prior, it was common knowledge that the majority of software projects failed. Even if they succeeded on paper and shipped, they weren't actually used. By some estimates, it was something like 75% of software projects. If you look at the contents of "ecosystems" like Steam and the the various app stores, you'll see much the same. Most of th…
You really think that the majority of failures on Steam and app stores are due to lack of basic algorithm performance knowledge? A project can die a thousand deaths before performance becomes its death knell.
Re: Why I Don’t Talk to Google Recruiters
#569Earlier quoted context omitted.
Other people have cited numbers, but in my opinion, most software project (greater than 75%) end up: * Over budget in dollars or time or both * Fragile * Insecure (sometimes profoundly so) * Having major UI issues * Missing major obvious features * Hard to extend * Full of bugs, both subtle and obvious Pick any five of the above at least. Keep in mind that most software projects are internal to large companies, or ar…
So if the developers knew to traverse a binary tree, how many of the 75% succeed? There is something I've mutated to my own liking called the 80/20 rule. In software, you will spend 20% of your time making the application 80% of it's maximum potential performance. You can then spend the remaining 80% of your time gaining the extra 20%. If that is cost effective to your company, then by all means do it. If it isn't 80…
I would say it's necessary but not sufficient. There is no perfect interview strategy. But for projects that are entirely developed by people who can't traverse a binary tree, I'd say the odds of failure are very, very high.
Sure, a strong developer can hit that 80% of performance quickly (in probably less than 20% of the time), but a weak developer who doesn't know how to optimize probably won't even make 5% of "maximum potential performance."
I had to work with a tool once that had a "process" function that would take 2-3 minutes to do its work. It was used by level designers, and it was seriously impeding their workflow. The tool was developed by an game developer with something like 10 years of professional development experience (he was my manager at the time), and he thought it was as fast as it could go -- that he'd reached that maximum potential performance, with maybe a few percentage points here or there, but not worth the effort to improve. He didn't want to spend another 80% of his time trying to optimize it for a minor improvement either, so he left it alone.
I looked at what it was doing, figured out how it was inefficient, and in less than an hour rewrote a couple of key parts, adding a new algorithm to speed things up. Bang, it went from minutes to 200ms. No, I'm not exaggerating. Yes, I had a CS background, and no, the experienced developer didn't.
If you end up with accidental n^3 algorithms baked into your architecture, 5% performance in development can be 0.1% performance in the real world, or worse as your N gets large enough. And yes, that's even if you index your data correctly in your database.
And that's when your site falls down the moment you have any load, and you end up trying to patch things without understanding what you're doing wrong. In my example above I improved the speed by nearly a factor of a thousand. In an hour. That can easily mean the difference between holding up under load and falling over entirely, or the difference between being profitable (running 4 servers that can handle all of your traffic) and hemorrhaging money (running 4000 servers and the infrastructure to scale dynamically).
Which is why you need a strong developer to run the project to begin with. Maybe you're that strong developer; I'm not really speaking to you in particular. But I know a lot of developers who just don't have the right background to be put in charge of any projects and expect that they'll succeed.
Re: Why I Don’t Talk to Google Recruiters
#570Earlier quoted context omitted.
Why do they try to "recruit" him in the first place, then, and "waste" recruiter time and phone-screen time on him and people like him? Remember: this isn't people applying to Google out of the blue: this is people Google has actively courted to apply . I did a couple rounds of their interviews a while back just to see if they really were as bad as people said they were (yup!). And that was in response to a very pers…
Here's the thing, nothing personal about you but a true fact about Google. Nobody at Google could possibly care less about your opinions on "application and database architecture" because Google does not have application and database architecture that even slightly resembles anything you have ever seen outside of the company. In fact the less you think you know about architecture the better it would be for all involv…
What distinction are you making between "expertise", "knowledge", and "outside experiences?" The outside experiences are the basis of the expertise and knowledge. If you understood, used, and contributed to other existing build systems, you are then in a good position to understand, use, and contribute to Google's in-house build system, because you have useful knowledge about the problem domain of building software. And so on.