For those who are wondering why algorithms are so prominent, I'd answer that at Amazon, algorithms are prominent. With the service oriented architecture, it is not uncommon for a team to own a service that is basically a context-specialized implementation of an algorthm, with a little bit of ceremony to serve it up.
The code ninjas program has been around for a long time, and it was probably named by an HR goon, so you'll have to forgive the cliche.
When I interviewed at Amazon most of the teams I spoke to revolved around billing and logistics--which of course do require some algorithmics, but are also fantastically boring. Has the situation improved?
To each their own. I think logistics are awesome, and to describe them as requiring 'some algorithmics' is sort of dismissive; this is a field where formulating a 1% improvement over a previous system translates into literally millions of dollars saved annually -- it's hard for me to imagine a field that is as 'pure' as that while still having enormous financial impact (besides maybe HFT?)
(Disclaimer: I work for Amazon, but on the Kindle side of things.)
Amazonian here that works on a logistics team. I would say we actually make up a small portion of Amazon. Amazon has grown tremendously in the past few years and has many diverse (and cool) teams. That being said, I personally think transportation and logistics at Amazon has some really cool problems to tackle.
Every team is different, and not all teams are going to be doing optimization or machine learning (where algorithm knowledge is very important). I happen to work with a bunch that do work in those areas.
If I recall from my years at amazon, the term "ninja" is quite popular for various groups/people that make (usually internal) improvements for advanced users.
India, India, India, India, India, India, India, Germany, India, India, India...
There is, without doubt a great pool of talents available in India, but this kind of result make me suspect that it's maybe just a result of India' schools focus on algorithms. Not on real problem solving, creation, design...
This is India specific challenge. Also schools in India do not really focus on algorithms. In almost all competitive programming competitions and places like TopCoder, India is far behind Chinese, Russians etc. (just count the number of TC Red coders in each country and let me tell you India is equal or even more in quantity) This can partially be attributed to the early age at which kids in other countries are exposed to programming but other than that it is just that Indian schools apart from say top 15 provide crappy CS education.
And while we are at it, in interviews at top CS product companies of which I know about Amazon and Microsoft, lately I have seen same set of questions repeated again and again and people getting through without much of problem solving skills by just mugging up solutions to common problems from sites like GeeksforGeeks, CareerCup etc. Throw them a real problem or a problem for which they have not seen a solution already and they would give a blank stare. Note that I am not saying you cannot find super talented people at these places. But when I have to take a few interviews apart from my regular work, I would head to same sites for interview questions.
I do not know anything about India, but I spent some time one day looking at the geographic distribution of various Google queries. India dominated for anything algorithmic related. I know you cannot draw much from that as it is absolute numbers, so in some sense it is a measure of population, but that same dominance did not hold with non algorithmic, but programming based queries.
Are algorithmic questions asked in web development interviews (Rails, Django, JavaScript frameworks, etc) or usually only more complicated programming roles?
This is on the india.amazon.com site. I can't immediately find it on non-Indian sites. It appears this is aimed at recruiting Indian programmers. It is not surprising most of the people on the leaderboard are Indian.
It might not so much be that is appeals, just that it doesn't make them feel as silly as it would some over here. I get called a code ninja but only as a joke as I tend to wear black[1] coloured everything at work[2].
In my experience with Indian companies and people of Indian heritage over here, titles seem more important to them generally than to other people I've interacted with. Perhaps due to differences in exposure to certain cultural references "ninja" sounds to them like an exotic title rather than, as it sounds to may of us, a silly one. Having said that, I know people who would appreciate "ninja" in their job title so this is subjective at a more local level too.
[1] Yep, I know there is no evidence a ninja ever wore black, in fact their outfits may have been very colourful: the black stereotype we have comes from how stealth actions were portrayed in stage plays.
[2] I'd prefer a Cash reference but you can't really chose your own nick-names, maybe nipping to Rino and shooting a man would help...
Of course it might not appeal to programmers in India any more than it does to you - it could just be that is appeals to PHBs in India!
Oh god. Don't they realize that "ninjas" was replaced by "badasses" around 2011, officially supplanting "rockstars" (which first appeared in 2009).
There is no indication of what language is expected, but presumably it's java, because companies that do this shit, are entirely java.
I feel the urge to click on the button, but I've been doing Dan Grossman's Programming Language MOOC (https://www.coursera.org/course/proglang) lately, so I'm all about functional programming languages, which I suspect this particular programming test does not grok.. and the button looks like it's entirely about product managers and their conception of what programmers do. Which rhymes with "fuck you."
Wow, it's not that cool to just be a hater and see yourself as a 'sick' engineer that doesn't have time for PM's bull... This is actually a pretty cool exercise, and for someone like me, coming out of school and practicing algorithm interview questions (which are questionable, but hey), this is helpful and fun.
Anyways, if all you want to do is say that you are cool because you're learning a functional language and are completely above java, do it in your head.
In real job interviews are these skills more valued than real experience with real technologies? I mean worked with different languages and frameworks on different problems? or as a graduate having good algorithmic skills is far more important than those?
As a student who will soon graduate this is a real dilemma. Do i learn and practice more algorithmic problems to get better at that side, or learn and work with as many technologies I can to get some 'real world' experience.
From the interviews I've done so far, the algorithm questions are more important. From our perspective, it's much easier for someone good with algorithms to learn a few technologies than for someone with a few technologies to learn algorithms. Plus, you're going to need to take some time to familiarize yourself with our software system anyway. It doesn't matter too much to us if you take two months to ramp up or 3.
This just seems like a better way to evaluate candidates even though we rarely have difficult algorithmic problem in our daily work.
So to make my chances in the future better, it would be better for to spend time on sites like topcoder honing on my algorithmic skills rather than say, experimenting with nodejs. Or does this depend on the company/job I am applying to?
Yes, time spent on TopCoder is more likely to help you in coding interviews in general than picking up new technologies.
I say this with some specificity to Amazon (I did ~200 interviews while I was there), but it would apply equally well to every other tech interview I've done.
Top Coder will change the way you think about problems (in terms of what primitives you'll bring to bear against them). I would say the same for mastering another framework that has a different model than those you've used before, but that both takes a lot more time and is nearly impossible for an interviewer to evaluate unless they've achieved the same mastery.
Algorithms are in some sense a least common denominator proxy metric for "can this person solve problems?" Usually this is followed by "can this person string three lines of code together and perhaps use a for loop?"
When these interviews go well it's usually a pretty accurate indicator that the candidate is technically capable of doing the job. The contrapositive is not always the case -- when the interview goes badly you're sometimes left with a nagging sensation that because you did a crappy interview you're going to miss out on a good candidate. That's just the way (many) hiring systems are biased, though -- it's better to say no to a good candidate than say yes to a bad one.
It's interesting, but your chances of getting a job are very dependent on how well you perform during the 30 minutes they throw small algorithmic questions at you. This isn't to say that alone will get you a job, but if you bomb that part of the interview, it's basically over.
A graduate with good algorithmic skills will have a better chance of getting a job at amazon, google, or microsoft than one with real world experience with various technologies.
The belief is it is easier to train a computer scientist to be an engineer than the other way around.
... but ultimately each candidate is weighed against the other candidates, so if it comes down to a recent college grad with good grasp of algorithms vs. another candidate with 5 years of work experience and a rusty working knowledge of algorithms as needed, usually the more experienced candidate will get the job. Algorithms are part of the screening process, but really the candidate with the most hands-on experience building using these same tools will be preferred. Each business has an immediate need to get work done, and so is only willing to invest so much in on-the-job training for new hires, which means the candidate needing the least training, and can also provide new insights based on experience, usually gets the job. Other factors weigh in too, such as college grads are cheaper and work harder then the salty old pros, so there's a trade off between experience vs. cost.
That's not quite true, at least in some companies. New college grads are typically applying for different roles than candidates with 5 (or more) years of experience.
Additionally, in fast-growing companies (such as Amazon and Google), it's usually the case that candidates are measured against a hiring bar and, if they exceed, they are presented with an offer, independent of other candidates. That is, there are more openings than can be easily filled, so any candidate who meets the bar can be hired, rather than being explicitly in competition with each other.
> Additionally, in fast-growing companies (such as Amazon and Google), it's usually the case that candidates are measured against a hiring bar and, if they exceed, they are presented with an offer, independent of other candidates.
We'll said. I think this is an important thing to note for any new grads looking to interview at these companies.
YMMV, because some people value technologies & frameworks, and some people value actual things that last (yeah, cheap shot).
I prefer the candidate who can comfortably talk about algorithms, data structures, algorithmic analysis, theories of programming language, and theory of computation, and then discuss how they implemented the areas of interest to them.
I have no need for someone who can't write code to implement the theory they know.
Part of this focus is my belief that software engineering is not teachable in college; the projects are too small and the social dynamics don't carry over to the work environment. I am fine bringing an intern or new grad along and teaching them configuration management, practice & theory of testing, code reviews, etc. These things can be taught to someone of reasonable social capability who has already learned coding and algorithms, something I am not really willing to teach new grads.
"Do i learn and practice more algorithmic problems to get better at that side, or learn and work with as many technologies I can to get some 'real world' experience." It's the same question I had for myself when I was in school pursuing my CS degree. What I noted at that time(it may be WRONG now) was that if you wanted to work for companies as big as Amazon, Apple, Google, Microsoft...(it does go on) you should be good at tackling algorithmic problems and attend an university with decent reputation in CS. Otherwise, you would never get called for an interview to begin with. Knowing someone in the company also helped too. Those companies believed that a candidate with strong CS background would be worth their time spending on training him or her. On the other hand, most start-up companies were only interested in ones with strong technical background since they expected you to begin contributing to their code base by the time you join their team. I know it's difficult to pursue your passion and feed yourself at the same time. Good luck with your job hunting.
For technical roles, hiring managers look for prior experience using directly related technologies. For recent college grads with no prior work experience you can still look through actual job postings in your field of interest, pay special attention to the tools and technologies listed in the required experience section, then go try build something with those same tools, and put that project on your resume. It's perfectly valid to list side projects on your resume, it still counts as hands-on experience. Technical hiring managers will want to talk about the project, how did you think of it, how well did it work, etc, they're not going to care as much that no one was paying you to do it, in fact more power to you for showing the creativity and ambition for building it yourself without being instructed to do so.
Algorithms only come up in job interviews just to check basic understanding of computer science, but most of the discussion should be on what tools, protocols, and services are you hands-on experienced with, and it doesn't matter if you were paid for it.
I said more about this below, but algorithms are an easy proxy metric for comparing candidates. This is especially true of students; many of them lack any practical experience outside of class and capstone projects.
Definitely not a requirement for working at Amazon, though I can't say whether this particular thing is only for Seattle positions. I work for Amazon Music in downtown San Francisco and we are hiring.
I currently see positions listed for Seattle, Massachusetts, California, and international positions on the first page of Software Development listings.
(Note: I work for Amazon as a Web Development Engineer.)
It beats fizzbuzz, but "write an implementation of Warshall's and Euclid's algorithms" isn't exactly l33t Ninja skillz. I'd be much more impressed by a candidate who could figure out for themselves which algorithm a problem required.
And here I ask candidates to code a simple problem like "traverse a binary tree in-order" and they treat it like it is a major stumper I'm asking them.
The code ninjas program has been around for a long time, and it was probably named by an HR goon, so you'll have to forgive the cliche.