This seems a bit unfair to people who learned programming by way of web development and tinkering with scripting languages because it seems to assume the usual undergrad CS course load.
Why do you feel that's unfair? If you've only ever done Ruby on Rails, never wrote any algorithmic code and never done any algorithm course, you will indeed score low in the "Computer Science" section. Apparently you managed without those skills, but that doesn't mean that the assessment is not accurate.
Not what I meant. I'm familiar with several dozen languages and I try to get acquainted with at least one topic and programming language outside my comfort zone every six months. I've been keeping with this routine for about 3 years now and what I've realized is that almost all those things he mentions have absolutely nothing to do with being a good programmer. There are certain meta-cognitive patterns that are far more relevant for being a good programmer and it's hard to gauge these meta-cognitive abilities by just running through a grid of requirements.
But if you're filling a RoR web development position does it matter?
Yes, it most certainly does. In the long run, the developer with the better grasp of fundamentals (e.g., discrete maths, data structures, algorithms and so on) will produce better code. NB, I'm not saying that the "naive" web coder can't produce good code. Nor am I implying that CS education always makes you a better developer. On average, however, that's exactly the case.
The fact that people with a CS education are better coders does not imply that the CS education made them better coders. Without more evidence it's just as likely that people who are, or will become, good coders anyways tend to get CS educations. Do you have any evidence besides correlation that a CS education makes you a better web developer?
I guess you're either asking one of two questions, both which seem strange:
1) Do you receive magic fairy dust during college that makes you more productive and removes bugs from your code? No, I don't think so.
2) Will someone who knows the things taught in a typical 4-year undergraduate CS education be a better web developer? Obviously (?) yes; you can look at any of them and clearly see that they are good things to know. Will you point to some particular thing that you think is useless? Let me list some that seem reasonable for a lot of web development: non-trivial data structures, for understanding databases; experience with multiple languages; continuation-passing style; general system and network architecture (e.g. the OSI model) -- and so on.
I wasn't arguing that CS fundamentals wouldn't make you a better developer. I was just asking for better evidence than a mere assertion, which you provided by citing specific examples. So, thanks, that's informative.
You'd be surprised at how often a cleverly chosen data structure or algorithm can improve a web app. For instance, where I work our frontend code uses tries, heaps, and other data structures (and using these makes the user experience noticeably and measurably better than using slower data structures).
Just because a person "learned programming by way of web development" does not give them any excuse for not understanding fundamentals. Just because modern dynamic frameworks abstract away lots of "hard" stuff does not mean that your dreams wont come crashing down without any understanding of computational complexity theory etc.
> Just because modern dynamic frameworks abstract away lots of "hard" stuff does not mean that your dreams wont come crashing down without any understanding of computational complexity theory etc.
Your post is missing any supporting arguments for this claim.
I know a lot of 'Rails guys' and their dreams certainly aren't crashing down. If anything, they enjoy their lives more because their programming education has been focused on making things, before making things fast.
Conversely, there's a lot of guys with CS degrees who ended up jaded with the idea of making things and became Unix admins, mid-level managers, or PMs.
>Your post is missing any supporting arguments for this claim.
We all know rails has problems with scale, and that these problems can be overcome. The way to overcome these problems is through optimal and performant coding/data-storage patterns, and to practice these one requires knowledge of CS-type matters.
Now Rails or Rails-esque apps obviously will not encounter these issues until they reach a certain size. Therefore unless one has the requisite CS-style acumen, one's projects have a cap on their maximum success/popularity.
Assuming that when we say "dreams" we are referring to hackers' projects becoming big and successful and popular, (thats what everyone around here seems to dream about,) they will not be realized without someone around who knows their big O from their divide and conquer.
All languages have problems with scale, including C and Java, which most programmers don't know how to deal with either.
If you can make something (or likely many things, quickly) you can be lucky enough to get the point where scale is a problem. At which point you can pick up these skills where you need them - they're not difficult, especially if they directly apply to a problem domain you're working on rather than a arbitrary one.
The Rails guys I know who these issues typically end up with a quick move to JRuby and pick up what they need.
If you can't make something quickly, all the premature optimization won't help you with the problems you'll never have.
I'm afraid I might have misunderstood you, but you seem to believe that having a reasonable understanding of compsci counts as premature optimization, and is therefore somewhere between "a waste of time" and "actively harmful". Is that the case? Or are you playing devil's advocate? Or what?
I would rather hire someone who has made more apps than someone who has excellent knowledge of algorithms but has made no apps. Would you?
This is rather a false dichotomy, isn't it? Who can obtain "excellent" knowledge of algorithms without ever making anything? Very few people can learn so much without ever doing.
Nobody is suggesting that it's better to not make something than to make something. The real suggestion is that it's better to make something good that you won't have to throw out later than to make something substandard, born of ignorance. Having reasonable background knowledge about algorithms, data structures, and architecture makes it much easier to get it right than if you're solving those problems as you come to them.
Its not a false dichotomy at all. Don Knuth hasn't made a successful product, the original stated goal of TeX (see http://en.wikipedia.org/wiki/TeX) was never achieved and most folk who require typesetting neither use the product or know of its existence. Knuth's knowledge of algorithms is excellent, but try and submit a usability bug for TeX like it was a real product. Academics focus on very specific areas of computing, sometimes at the expense of broader knowledge. If I had a web app to make, I'd hire the rails guy that had made a successful app before I'd hire Knuth.
> Nobody is suggesting that it's better to not make something than to make something.
Certainly. But they do focus on optimization as the core of programming. It isn't - turning logical problems into code - aka, making programs - is.
I'll take your word for it with TeX; I use LaTeX and I know other people who have, but I don't know what professional authors or publishers use for typesetting.
However, I think your specific example doesn't reflect the argument I imagined you making. Your comparison is someone smart who doesn't know the tools (Ruby, Rails, Javascript) with someone who knows them well. If it were a short project, at least, I agree with you; I'd probably take the guy who knows the tools.
It's not even the tools, it's things like iterating quickly, having working code, good deployment tools, understanding of usability, etc. Nobody has an unlimited amount of time. And sometimes the people who kick ass at algorithms don't give a damn about anything else (and if they're academics that fine). The 'Rails guys' won't have their dreams crushed by performance issues. They'll learn what they need - in fact, since most web app performance is IO bound that's often the first thing they learn to optimise.