But if you can't code common data structures on your own, you'll probably have trouble coding the more advanced data structure that you found a paper on describing (possibly described in part by replacing parts of a more common data structure) with some code, but not in your language of choice, that would be, from its description, far better than the common data structure for your problem, for which there is not a debugged library for your platform of choice.
This is a learning task that might take a competent developer all of 2-3 days. If you're rationalizing not figuring out how to write a heap or a hash table, consider asking yourself whether you actually want to be a developer. You might feel OK about what you're doing now, but a career spent redesigning unit test suites and coming up with ever- more- elaborate HTML templating schemes is unlikely to be fulfilling.
It's very possible to make a positive programming contribution in a professional context (and in a wide variety of fields) without having ever implemented a hash table (I had not, before just now). Obviously it's more important in some contexts than others, and that's fine, but the suggestion that programmers who don't have that experience are not programmers or that they're incompetent programmers is nonsensical--the context in which they work makes the difference.
Now obviously, it's been a bit embarrassing making essentially this same post multiple times recently, so I just implemented a hash table and read a few sources for heaps and binary trees--yay! But this isn't rocket science--if I ever encounter data which doesn't conveniently fit in the basic structures available in my environment, I go find out what works (so, for example, I'm working on a project where I need to find the closest points in a data set according to Euclidian distance, and discovered that VP trees fit the bill).
It is entirely possible that the ability to synthesize a simple data structure is a valuable signal of programmer competence for people with a formal computer science education (because they were presumably taught and tested against that knowledge multiple times, and if they can't reproduce it afterwards they might be bad at learning) but my suspicion is that the implementation of domain-specific algorithms is more often limited by a lack of domain knowledge than a lack of CS knowledge.
Well, do they? Being able to code simple data structures is not a pre-requisite to being paid to write code.
I can't base this statement on cold hard numbers, but I feel comfortable stating that the majority of dev positions in the world today do not require this particular skill set.
Thus : no, they (programmers) don't need to be able to understand or be able to code simple data structures.
If the inverse were true - namely, that a large percentage or majority of dev work required knowledge of and the ability to implement basic data structures - then you would be quite correct.
> You might feel OK about what you're doing now, but a career spent redesigning unit test suites and coming up with ever- more- elaborate HTML templating schemes is unlikely to be fulfilling.
That's a bit dismissive. Also, are you speaking generally or referring to me as an individual?
The realities are more stark in our breach-infested world. Sloppily implemented systems put companies in the headlines.
Examples abound, not only with data structures, but also with algorithms. Someone who has written a compiler is far less likely, in my estimation, to try to "parse" a URL with a regular expression, with negative consequences. Someone who has written a hash table is less likely to be surprised when the insertion behavior ends up being n squared.
Are programmers better off having a deep working knowledge of data structures, algorithms, compiler & OS design? Sure.
Do they need to, in order to be (paid, professional) programmers? No.
It's the edge cases that separate a good engineer from an average engineer. When that good engineer runs into that problem, he/she will solve it quickly and move on. An average engineer will spend days or weeks struggling with the solution -- costing lots of money and potentially delaying schedules.
Above is also the reason good (not great or rockstars) developers are in high demand and almost never on the open market. Once you work with people and vet yourself with other good developers, new jobs are usually just a phone call away.
Every job I have ever landed, I've had to go through the full HR rigamarole, from finding the posting through multiple rounds of interviews. I've never quite been able to make a friend--or even acquaintance--that has subsequently been able to backchannel me into a job. I've had several interviewers say directly that I appear to be one of the most technically qualified candidates they have, but after I walk out the door, I never hear another word from them again, not even to say they picked someone else.
The hiring system is broken. And the damage is at least in a load-bearing member, if not the foundation itself. There is no financial pressure for anyone capable of fixing it to actually do so. And so we suffer as entities with far more political experience glide smoothly among the sharks, depressing our wages today, and tomorrow, they quietly dismantle the dreams of young people passionate about our field.
It sickens me to the point that I feel like there are no good employers left in the U.S., in any field. I have no reason whatsoever to buy a house, befriend my neighbors, and invest in my local community, because at any moment my gracious employer (or their new owners) could decide to fire everyone and move out. That would leave me again in the position where I have to also move, just to find a job not quite as good as the one I just had.
And now that I am in one of the few locales recognized as a "tech center" in the U.S., I find that most of the jobs here are military-industrial complex tax-leeching jobs, where industry best practices are routinely ignored, because the primary goal of the contractor is to produce billable hours instead of permanent solutions, and the overseer-boss got his job via military good-ol'boy networking rather than having one inkling of competence.
What's the solution? I don't know. But making me retype my entire resume into your stupid web forms to better facilitate its automatic rejection for lack of required hidden keywords is completely antipodal to it.
If you don't know what Ruby Gems or Active Record are, you've likely not touched any web technology in depth.
If I were to poll all my SE colleagues, present and former, and ask them when they last manually coded a linked list or b-tree - I can assure you the answer would not be "on a product we shipped".
I live in Hamilton (which is Canada's Pittsburgh). We've got a great STEM-oriented school here, and Waterloo (RIM's home) is only an hour away... it took a long time to find a job that didn't involve suffering through a two-hour commute in some of the most miserable traffic on the continent (Ontario's corporate tech-hub is Mississauga).
Ontario is rough. Most job offers are in the range of 65-75k for 10+ years of experience and highly-specialized skills. The cost of housing and living in Toronto and surrounding regions has sky-rocketed in the last 10 years. And the traffic is terrible.
All of the STEM grads get shipped off to SF or the Valley. There are American recruiting agencies on the campus' of every major STEM-focused university in Canada and are at every job fair. The choice for these grads is pretty easy: stay here and make Wordpress themes for a social media marketing agency and get paid 35-45k or go work at Google/Twitter/Whatever and work with the best-of-breed tech, get paid 90k to start and be making 120-130k within a few years.
We could do better up here. The visa situation is much more permissive here and there are a plethora of grants and tax benefits for tech companies available. VCs are even finally starting to warm up a bit too.
Beyond the lump of labor fallacy: http://en.wikipedia.org/wiki/Lump_of_labour_fallacy , did you consider that those people have every right to do their best in this world as anyone else, no matter where they happen to be born? That might mean coming to the US or Germany or whatever. If that's easier for them, fine by me.
Nobody's proposing any anti-"doing-your-best" legislation, nor blaming the cheap Indian labor, who is often exploited terribly.
Say you're born in someplace really bad like the Congo, as an extreme example. No matter how you try, you are not going to do your best there.
Well they don't want to brag, but an online community where you can be anonymous if you want seems like a good place to reach out for help if you're in trouble.
[1] http://money.usnews.com/careers/best-jobs/computer-programme...
[1] http://money.usnews.com/careers/best-jobs/software-developer
[1] http://money.usnews.com/careers/best-jobs/computer-programme...