69 comments

[ 3.9 ms ] story [ 141 ms ] thread
This article is a counter argument to some guy who says you should not hire computer science majors.

Choosing to hire or not hire based on whether or not someone did or did not major in computer science is just a pre-judgement about an individual's ability as a computer programmer. It makes alot more sense to treat people as individuals rather than pre-judging against some broad criteria that classifies individuals into types.

It's often non programmers who make broad pre-judgements like this because they don't understand software development well enough to work out what strengths and weaknesses an individual programmer actually has.

Another word for pre-judgement is prejudice.

Not all prejudice is illegal. Saying that "all people who fit into category X or category Y are not suitable for employment with this company" is entirely legal but foolish prejudice, presuming of course those categories are not defined as illegally discriminatory in the country that you live in.

Not all judgements are unfairly prejudicial, and if your category X involves conditions that directly cause poor decision making, then it is a perfectly valid prejudice, whether it is legal or not.

For instance, I might not want to hire bullies or bigots. Or maybe I don't want to hire someone whose beliefs directly contradict the goals of the company. (Like a doctor who doesn't believe in treating patients. Or an AI researcher who believes in souls.)

I didn't say you should not have selection criteria.
You're not using the top-line definition of prejudice, which is when your opinion is formed without reason.

You can only spend a finite amount of effort on hiring, and you have to phone-screen some people before you phone-screen others, so you've gotta create expectations of people based on imprecise information like their major, GPA, former employers, etc.

I don't agree that the criteria you mention are effective ways to work out if an individual is a good computer programmer. They are just more pre-judgements.

For example I can't see any way in which working at a particular company defines whether or not someone is a good programmer. Can you quantify in detail why working at company X means someone cannot be a good programmer? A detailed explanation?

Can you explain to me precisely how you can measure someone's capability as a computer programmer via their GPA? And I mean in a really quantified way, not just hand waving.

Even what someone majored in.... can you say exactly in detailed terms how this defines whether or not someone is a good computer programmer?

Pre-judgements like this are just voodoo recruiting.

It's how to recruit when you really have no idea how to work out if someone is a good computer programmer or not.

It is possible to operate on information without rounding beliefs to either 100% certain or 100% certainly not, and without collapsing imprecisely specified heuristics to simple If X then 100%-certain-of-Y conditionals.

You didn't respond to the blog post. You responded to a version of it that has been rounded off in this manner. Likewise, you haven't made a response to my comment: I never claimed these criteria were effective ways to work out if an individual is a good computer programmer. You've rounded the idea that some people are more likely worth interviewing to a different meaning, and responded to that.

Likewise, using the word "prejudice" under one definition to pick up the negative connotations of one of its other definitions seems like the same kind of thing -- a similar obliteration of nuance.

Well, I guess I'll have to respond to these extensive edits you've made.

> For example I can't see any way in which working at a particular company defines whether or not someone is a good programmer.

Some companies have stricter hiring standards than others. Thus the probability that a candidate is worth hiring is higher, because they already passed that company's tests. Plus, they'll have experience working on whatever the company's working on -- you can expect somebody to be a better foo developer if they've done foo before.

> Can you explain to me precisely how you can measure someone's capability as a computer programmer via their GPA?

I never claimed you precisely measure that, did I?

But obviously, somebody with a 3.5 GPA is much more likely to be a good programmer than somebody with a 2.0 GPA. If you have a 2.0 GPA, you're most likely stupid, and even with four years of mitigating circumstances there's a huge set of people that could not get such a low number even if they had a policy of not caring about their grades at all except to show up for exams.

> Even what someone majored in.... can you say exactly in detailed terms how this defines whether or not someone is a good computer programmer?

For example at my alma mater the CS major was filled with gamedev-wannabes, and programming-inclined EE students were far better on average.

Also, all your new questions in your post's edit are still putting everything in terms of If X then 100%-Y. Why?

As a Computer Science major, and programmer, and soon to be college graduate, I don't like the fact that people can go to a "coder bootcamp" and after they "graduate" from it, they expect to get the jobs that CS grads get. I don't think these people should be paid in to the same level as college graduates with CS degrees. A CS degree is the best investment to make at this time if you're not already part of a well connected network of family that can get you into old money, or work for a family member.
There should be a pathway for people to move into programming (not all of which requires a CS degree) as a second career. I'm lucky, I had the Post 9/11 Gi Bill to help me with that. Though I still think that boot camps, unless supplemented with serious personal projects and learning, seem to be slightly scammy feeling.
Are you more valuable to the company hiring CS grads than the bootcamp attendee? If not, why?

I can only speak for myself, but I think that I've made a decent little career out of being more valuable across a wide array of functional roles than somebody who has a freshly minted flavor-of-the-month certificate. But I've made a point of being able to do more than that in ways that employers want--I'm rarely, if ever, the best at any particular thing, but I'm good at lot of different things, and that's both valuable and hard to substitute with inferior (from an economic perspective) services. Which is to say, there's a markup for my services, but my marginal value stays fairly high even after a given problem is solved. And my CS degree helps out with that a great deal, but the degree itself is meaningless--it's what I can do for a client or an employer that matters.

As an engineer in the industry for going on 6 years with no CS degree, I don't like the fact that people can go to "college" and after they "graduate" from it, they expect to get the jobs that people with half a decade of on-the-job experience get. I don't think these people should be paid in to the same level as experienced engineers with proven track records. Working in the industry is the best investment to make at this time if you're not already part of a well-connected network of college graduates that can get you into old money, or work for a family member.

(The above tongue-in-cheek should NOT be read as a defense of coding "bootcamps", as I think they're leading to a glut of barely-competent programmers flooding the market, but should be read as a criticism of degree entitlement. I know my algos, can calculate time and space complexity easily and correctly, have designed several mission-critical systems that have withstood the test of time, all without the college degree. At the very least a bootcamp'd developer will have some hands-on exposure to the tools being used in the industry today.

A degree does not a competent engineer make.)

Since you are judging people by credentials rather than abilities let my offer you an counter argument. I think computer science majors should be disqualified from any programming jobs because all they have accomplished, if they can actually program, is that they had to be taught at great expense. Somebody who doesn't have a compsci degree but can program well has proven to potential employers that they can learn and adapt to the quickly changing development job market.
As someone who has hired a ton of developers, including many straight out of college, let me offer a bit of a perspective of what you've bought.

Your programming abilities are extremely likely to be shit. Unless you've been programming since you were 12, the programming you've done for your CS degree has not prepared you to write code in the industry and, in fact, has probably given you a ton of bad habits that will need to be broken when you get your first job. Just an example, but I find that fresh college grads don't commit/push their work nearly as often as they need to. I find that school encourages a mentality of spending all the time you have making it as good as you can make it when it's far more valuable in the industry to share your work with coworkers as early in the process as possible. I have to watch our new-grad hires like a hawk or they'll hold their story until code freeze and commit at the last minute and make QA's job harder.

The good news is that you've been taught a framework for thinking about how computer programs perform as the size of data gets huge. The bad news is that jobs where you're writing the kind of code that deals with huge data are few and far between. Sure, we've got more data than ever these days, but we're using libraries and products that have already handled much of the CS work.

To echo another poster, between a CS grad, a bootcamp grad and someone with a year of professional experience, I'll take the professional experience every time.

The bootcamp grad has gaping holes in his skill set...I interviewed 8 of these at a hiring event and while each of them could talk intelligently about the 4 technologies they'd been taught, not one of them had even heard the term "load balancer" or could even guess what it might be used for.

The CS grad has useful knowledge, but I can teach the small portion of a CS curriculum that's applicable to the jobs I hire for. Big-O notation is a pretty simple concept and it takes two seconds to look it up for the data structures we use. And has been said elsewhere, in the real world, n is usually pretty small and the constants matter. And yes, I realize the irony of saying that because of Google, a product that required a ton of CS knowledge to create, a formal CS background is less important.

Only the one with experience isn't starting from near-zero. And that's alright...I'm firmly in the camp that believes that college shouldn't be a trade school. It has value in and of itself and shouldn't be expected to teach the skills that are needed on the job. But that also means that it doesn't give you that leg up that you seem to be expecting it to. Your degree will get you in the door, but mostly because our industry is starved for talent right now, but you'll only be valuable once you've gotten real-world experience.

Interestingly, the CEO's LinkedIn shows him graduating with a BA in music from Yale. Granted, any Ivy League degree gives you a heads up that a graduate of Chico State with a CS degree doesn't have, but it does provide some interesting background.
Great rebuttal to an originally insane WSJ anti-thought piece.

Some awkward points from the original WSJ article:

University computer science departments are in miserable shape: 10 years behind in a field that changes every 10 minutes.

When did the WSJ author have time to sample the 4-year curriculum from every CS department?

The author complains about "no iOS development" in universities. There's always a balance to strike between being a trade school and a knowledge institution. It's not the place for a university to pre-train your employees exactly to your specifications. You probably don't need the pumping lemma to develop Angry Angry Badgers XXV, but you still need exposure to how and why everything can even work the way it does.

The rebuttal post makes a great point about how, if iOS development is so important, universities should have been teaching Flash development extensively up until about five years ago. That would have worked out well for everybody.

Computer science departments prepare their students for academic or research careers and spurn jobs that actually pay money.

Unsubstantiated fuff. Computer Science departments are the only departments expected to churn out semi-productive workers by their second semester of study. Not many pre-med majors are getting hired as junior doctor interns their 6th month into study.

They teach students how to design an operating system, but not how to work with a real, live development team.

Operating system design courses focus heavily on practical data structures and the reality of programming physical hardware. But, counter argument, it's all invalid in the cloud!

As for "real, live development team," that's one of the benefits of going to a school. You get to work in different project groups over the course of a few years to figure out how things work, how other people work in a group, and how you yourself respond to group dynamics.

Mr. Gelernter is the CEO of the tech startup Dittach.

Based on his rant, I'm assuming Dittach is just a thin glue layer on top of a dozen open source libraries with no actual development involved?

I see "thin glue layer" and laugh sadly.
I think there's a balance to be struck. People shouldn't limit their search to people with the correct credentials, and people shouldn't discount education. Hiring is hard, and likely will continue to be hard.

A computer science degree tends to be about 2 full semesters worth of college credits, or one year of education. Calling a 4-year degree a "computer science degree" is the first misnomer. It is still a liberal arts degree with a major in computer science. Of course one shouldn't expect a fresh grad to have all of the needed skills for commercial software development if they stuck only to their coursework. Internships help, but the intern is at the mercy of the company when it comes to what they get out of it.

Even self-taught people can't learn everything in a single year, and have to specialize if they want to find employment, limiting their job opportunities and appeal to employers. Specialization can also increase their expiration date if they picked the wrong stack, but can increase their appeal if they know the right technology at the right time.

People also don't differentiate between self-taught programmers who already have a liberal arts degree, and those who do not. What percentage of coding bootcamp graduates have no college education, and what results do they see?

If companies want people who have all the skills and experience your company demands, then pay more for senior developers instead of expecting people fresh out of college to fit that role.

'The teaching is "10 years behind in a field that changes every 10 minutes.'-which is a good reason to not overemphasize practical stuff like mobile app dev. But really, even to do something like mobile app dev at a professional level, you need a solid programming background-you learn the fundamentals, which can be pretty dry and staid (like data structures) in order to be able to successfully do stuff like mobile dev.
I would like to hear their opinion once they graduate and get some years of experience in the field.

Software engineering is predominantly problem solving and the important traits are analytical and logical thinking. 4 years of education doesn't govern these. Some people have natural pre-disposition to these skills and filtering out people based on majors will reduce your pool significantly.

I've seen a lot many good engineers coming from the Philosophy, Physics and Mathematics majors. And I think this could be true for other majors too.

In short, smart people will easily catch up with what is taught in 4 years and hence given an average employment period of ~30yrs it's ridiculous to decide employment based on a major.

(comment deleted)
And let's not forget it's not 4 years of CS they need to catch up on. Students spend a bunch of time taking classes in other subjects, and of CS, really what they need to catch up on are a handful of important classes.
Some of my personal experience with non-CS majors can be summed up with three words:

Hardware Ex Machina.

Perhaps I'm biased, but I suspect a smart person from a CS degree background will probably think about performance more than a smart person who never learned about "irrelevant" things (to quote the author this post is addressing) like Operating Systems.

Someone without a CS degree can learn about how to write code which is memory and CPU-efficient and scales well. But if it's never a problem they have to come across, they may never even think about it. CS students are forced to think about things like that in their degree.

I've worked as a developer for 10 years. My anecdotal experience is that 4 years of undergraduate Computer Science does not impart any special skills regarding performance. I found myself routinely refactoring code written by CS-degreed programmers who would do silly things like put a database query inside 2 nested for-loops.

I even had one case where a degreed dev looked at perfectly fine code and said "Oh there's a faster way to do this..." then proceeded to implement a solution that was literally 500x slower, but checked it in anyway, not bothering with any before/after performance benchmarks, just assumed his stuff was magically faster. The culprit: His solution was very greedy with network traffic (but was arguably more computationally efficient). Didn't matter tho, it was slow as dog.

Undergraduate Computer science will teach you how to measure how much arbitrary work it takes to complete something but AFIAK it does not seen to teach you a very good job of how to actually look at a specific problem and optimize the work, memory, or external latency-intensive resources... that must be learned by critical analysis of actual code.

It's probably prefixed with "good CS" and also filtering candidates. I've interviewed several folks, some with masters in comp sci, and they were utterly oblivious to even basic algorithms.
> that must be learned by critical analysis of actual code

I agree fully, and won't ever deny that many students simply either never do this or never do it effectively.

There are courses which teach this however (such as OS), and many of them are required for a degree. I feel that the likelihood that someone with a CS degree has had these good practices ingrained in them is higher than someone with no background in CS. In other words, it's a safer bet.

I concur. Courses like Operating Systems, Computer Organization, Automata and the like may not seem immediately applicable, but I've had a ton of moments where I've been so happy to have had a formal CS education. Even if you're never going to work on an Operating System, knowing how Operating Systems work can help you design your software to work better--especially with respect to using API calls responsibly.
> Software engineering is predominantly problem solving and the important traits are analytical and logical thinking. 4 years of education doesn't govern these.

I remember one thing I always told my students. I always told them that my classes would not turn them into great programmers any more than swimming classes couldn't turn them into fish. If they had it, they'd be good ones. If they hadn't, I promised them they'd be able to, at least, fend for themselves.

That's probably not a good thing to tell students. A belief in fixed abilities ("either I have this skill or I don't") causes students to try less and encourages people to believe that people that are superficially similar to them posses the same fixed abilities they do.
I don't think many of them actually believed me (context is important), but many felt challenged. The encouragement, the promise I'd make them able to fend for themselves, was what made most of them take the effort to learn. When you see something as your "gift", it's easier to help others to succeed - this had a nice side effect of motivating the really gifted ones to teach their colleagues outside the classroom.

I also directed questions to the class and threw sweets to those who answered. It was fun to watch adults jumping competing for candies.

I've been a professional developer since 1999, but didn't even have any degree when I started my career. While I suspect if I was writing device drivers or doing systems development I'd be lacking, but for web and database-driven development, I've rarely been incompetent due to lack of CS degree. (Biggest example being concurrency issues, but I suspect I've learned more in the past 16 years than 4 years would have taught me; a degree would have just given me a head start)
The same people with a life long interest in computer science are very likely going to major in computer science or computer engineering. Its not that the programs are great its that the people who would be good at it anyway end up going thru those programs.
A CS degree obviously is not meant to give people 100% of the skills they need to work in the real world. It builds a foundation of core knowledge about the field that does not usually come from a hacker bootcamp or independent web dev study.

Having a few friends from the school of "who needs college?! I taught myself everything I need to know about coding and I'm on the cutting edge of the field and I have a great job!", I sometimes see a lack of understanding of general principles. Sure, people who really love computing often dive deep enough to learn this stuff themselves, but there are a lot of people who love development that just don't even know what they don't know about it. Most development jobs don't require this knowledge, but you'll sure miss it if you're in a position that does.

An important thing that articles like these miss when talking about the "fundamentals of computer science" is that a CS degree doesn't actually teach you of lot of the necessary fundamentals that people use in the real world.

For example, what about the fundamental of building a website, or building an app?

I'm not arguing that "colleges should teach students rails or X technology that will be outdated in 2 year".

I'm saying that colleges do not teach you a lot fundamental computer science concepts, such as "How do I design a scaleable rest API/website". Or "how do I use a MVC framework (regardless of which MVC framework it is)", or "What design decisions do I need to make when building a mobile app".

These are all very important concepts, that I use in my day to day job, and they have NOTHING to do with "learning hip technology X". These are problem solving fundamentals that colleges don't teach!

The concepts you mention are fundamental and important to web and mobile programming, but a lot less fundamental to CS.

Programming != CS, and that's fine. We need CS to push the boundaries of what we know and can do, and we need programming for the day-to-day work. The trick is knowing what the overlap is for the position you need filled.

> Programming != CS, and that's fine

Can't agree more.

When I took my first job after graduating with a CS degree, I often complained that my degree hadn't taught me really anything useful about how to program with real teams, building real things to real timescales.

Some years later my opinion changed. Of course my CS degree didn't teach me these things, but nor should it have. It was partly a foundation in the principles behind programming, partly an education in how to think about problem solving on a fundamental, quite abstract level.

The things I gained from it provided a great base from which to learn how to write software in industry, and whether I realise it consciously or not, everything I have learned and continue to learn is augmented with the knowledge of the fundamentals behind it, which is really, really valuable.

My opinion, and I'm more than willing to be challenged on this by anyone with counter-examples, is that learning to write software in industry, with teams, huge-scale systems, bosses, and deadlines, can only be done on the job. It's not something that can be simulated in a university, and indeed one actually never stops learning even once in industry.

Things that are helpful on the job can only really be learned the hard way, by doing the job, failing, and seeing that a better way exists for next time, in a similar situation. There's never such a thing as 'the right way', only 'the right way for this situation' - and there are too many permutations and edge cases on what that could mean to be taught in a structured way in a degree. Therefore I don't think universities should be in the business of even trying to accomplish this. They should be in the business of producing graduates who are able to learn professional programming with a broad and deep knowledge of the fundamentals as a base, which is a very valuable thing.

I think what the GP is describing is more like an apprenticeship than a degree, and who knows, maybe that (combined with at least some study of the most directly-related fundamentals) could be one future path for learning programming as a young school-leaver, in lieu of going to university. Perhaps a four-year apprentice would be quicker out of the blocks in their first 'real job' than a 4-year CS degree grad, and perhaps that's a much better, more economically viable way to train new programmers for standard, forms over data style web development or application development work.

My point is teaching to the job is a completely separate thing from learning the mathematical and logical underpinnings of CS from nearly first-principles, and should be approached as such. Let a CS degree be a CS degree, don't try to morph it into a programming apprenticeship.

What if I told you the fundamentals to building a website, a mobile app, and a desktop app were all the same? Because frankly, from my perspective, there's not much that's different. The same general techniques that work in any of the above will help you in any other.

I'd hate to see a class like "MVC Frameworks" replace Databases or Operating Systems. I've never had anyone struggle to pick up MVC design in less than a few weeks, but writing an effective non-trivial database query? Definitely. Especially if it involves designing indexes to support it. A class like databases that covers the internals of how a database does it's job goes a long way in this regard. Classes like Distributed Systems and Parallel Programming give you the fundamentals on how to build a scalable system, be it a website or a large scale physics simulation. Frankly, the main piece I think they fall down on, testing, isn't even on your list, and some universities are working on that.

I'm certainly not saying that a CS degree is the only path to being a developer. Heck, one of our devs is an Economics major hired as an analyst who just too sufficient interest in what we do to join the team. It seems like so many of the "fundamentals" being brought up here are "how to solve computing problems that are essentially the same as mine" instead of "how to solve computing problems".

Maybe I'm just spoiled by the local university, but I've never had even an intern unable to make a meaningful contribution to our iOS app in the first couple weeks, having never seen Objective-C or iOS development before, so I don't think their lack of exposure is hurting them.

Your comment, and many others, seem to make an unstated assumption that CS programs are all alike.

To your point that a "CS degree doesn't actually teach you... [about] building a website, or building an app", I can only say that any number of classes that were part of my 1987 degree (Rochester Institute of Technology) are directly applicable: -- fundamentals of computer graphics -- data management (btrees, isam files...) -- networking and client/server programming -- analysis of algorithms (performance and optimization) -- discrete math (boolean logic, binary math, octal/decimal number systems)

My degree gave me the tools to understand computing concepts and that has served me quite well even though most of the tools, languages, and hardware that I use today didn't even exist when I was in college.

Reason #1 you should hire computer science majors:

The author is one.

I disagreed with the article mentioned by Stephen too. Computer Science is not about learning to code, it is a degree in problem solving. It teaches one how to think about problems. In that, it's almost liberal arts. It's a science of process. It is not a degree in coding. Too many people can code.

Yes, it is entirely possible to learn the fundamentals of problem solving in an alternate field. But if not, computer science degree is a damn good way to get there. Long term love of coding is no substitute for it.

There are a lot of great ideas in Computer Science that are very hard to learn all on our own in a short amount of time. One cannot just hire a long-term user of telescopes as an Astronomer.

Besides, even if the position disregards the importance of problem solving skills, CS teaches a lot of underlying stuff that almost none of the self taught programmers I know have yet learned. That might not be important, but is incredibly valuable when shit hits the fan. Maybe there should be simpler resources to learn computer systems on our own. Knowledge of what's going on is not very common.

CS teaches a lot of underlying stuff that almost none of the self taught programmers I know have yet learned

There seems to be two approaches to knowledge acquisition: school method vs. self-taught method.

School method: learn everything you can, then learn to ignore what doesn't matter since you probably know a lot of things now.

Self-taught method: know nothing, only learn exactly what you need. (e.g. try to do something. learn what you don't know. make one thing work. now you have a very narrow knowledge. repeat process until your goal is obtained.)

The self-taught method still produces capable people, but sometimes their capabilities and experiences are more narrow than others who have been through purpose-designed curricula.

The self-taught method is also a favorite of YC. Who needs business school when you can learn it as you go and pay people to understand parts you don't comprehend? You probably won't hire a YC self-taught-CEO to run Bank of America or JPMorgan, but they can competently bounce around startups for the next 20 years with no problems.

I agree on self-taught method, don't get me wrong. Which is why I said I wish there were better resources.

But what is missed from the argument is that any good CS program includes a lot of self-teaching. You're expected to write an OS, large torrent softwares, networking protocols, parallel systems that run on supercomputers, distributed databases like Hadoop, web apps like Twitter. And that is just the top of my head. And most of these extended projects don't have any top end requirements. They only have minimum requirements which is pretty high. And people usually try to one up everyone else.

Not to miss that self-taught method almost completely neglects theory method, a lot of the times. Ask a self-taught programmer if his algorithm could be made better, then wait a couple years till he learns huge amount of discrete math, complexities, and proving optimality before his answer can be trusted without everyone else looking.

Again, not everyone values these skills. And that's OK. The article was written in reponse to a guy who said he won't hire CS graduates.

I tend to agree with most points. I always credit my undergraduate CS education with teaching me about how to think about a variety of computational problems using a variety of languages as lenses. I actually think that is why I've been able to succeed in a number of different development roles (Web Developer, Mobile Developer, Reverse Engineer). If I had had multiple semesters of learning only language/framework-X features, I think I would have been worse off for it.

That being said, it did take me a while to appreciate that this was what my education gave me and obviously, no approach works for everyone.

Google and Facebook, which Gelernter says the very best people go to, have interview processes that filter out people who don't have a good command of fundamental topics taught in formal computer science college programs. Presumably the people who get into Google or Facebook are also passionate and self-motivated, most likely from an early age.

That implies to me that the self-taught+formally-trained people are in high demand and paid accordingly. Thus, Gelernter gets to choose among the people who are only self-taught or only formally-trained, and his sweeping viewpoints are based on his experiences with a subset of the workforce.

From what I've read, Google & Facebook focus too much on algorithm & data structures minutiae.

Not to say this isn't an important topic. But my CS degree involved some areas that I would argue that are at least as important for the kind of work these companies do, like process algebras for distributed systems or static program analysis.

I don't think the article is an argument that as a hard rule CS majors are predetermined to be great job candidates. In fact, the author draws a line between students who take on side projects and are passionate about the material and students who are doing it for the supposed payout.

Recruiting software engineers is about finding the passionate engineers who are proven problem solvers regardless of programming language or given tools. Those people might be computer science majors, and they might be non-majors (or non-students) who have a passion and skill for problem solving.

I've worked with and learned from great engineers who did not formally study engineering and those who have devoted their life to it. It's ultimately about having the drive to pursue (software) engineering. Those people tend to self identify by enriching their education with their own side projects.

Ultimately, Computer Science education is (and should be) exactly what it says. The science of computing. It doesn't require a computer, and it isn't software engineering. By studying great algorithms, data structures, design techniques, etc, you are well on your way to skill set of a successful software engineer, not because you know about splay trees or automata, but because you have practiced advanced problem solving, which is at the core of any engineering.

This is a very good summary of my intent in writing the article. I didn't mean to say that CS majors are inherently superior, but I wasn't pleased that the original article seemed to imply the opposite. I believe that computer science education the way I described it gives you a better chance, but doesn't necessarily make you better.
Am I the only one who always feels that the search for "passionate engineers" really means "cheap, doesn't know his value, works for rent and pizza"?

What about competent? Professional? Experienced?

Nobody looks for a "passionate lawyer", that would even be a red flag, indicating that he can't evaluate a legal situation objectively.

Nobody looks for a "passionate basketball player". As long as he shoots those three pointers, who cares whether his secret passion is really boardgaming.

Mr. Gelernter doesn't look for computer science majors, because schools don't teach them what he values in a developer. The teaching is "10 years behind in a field that changes every 10 minutes."

--Web dev changes a lot, but some things like Java were used 10 years ago and are still used today.

"The courses focus on things he considers irrelevant (like operating system design) without providing experience with working on real development teams."

--Really? I'm going to be taking 2 capstone software engineering courses that focus on building real world applications in teams.

"There are few courses on practical skills like mobile app development."

--Took a class on iOS development already, taking another class for android development this fall. I have literally no clue what this guy is talking about. Maybe its your idea of what computer science students are learning that isn't changing. And why would it, when you don't hire any..............

Oddly enough, the most of the good programmers I know are CS faculty dropouts.
I think having a computer science degree is not a good indicator if you love coding. However, there are most certainly lots of people who love coding and have a CS degree.

However, if you find someone good at coding and they got there because they were self taught, then it is probably a better indication that they love coding because otherwise they would have not taught themselves the skill and got good at it.

So I think it is definitely easier for our mind to stereotype people and just look for the higher probability of success method. But you then cut out a huge portion of potential candidates.

So spend a little extra mental energy to judge the individual based on more than just a binary criteria. I'm sure your hiring process will greatly benefit from it.

I've hired both CS folks and non CS folks for, predominately, web development in Java, PHP, Python with accompanying skills in devops and sql. In my experience, I haven't seen it as a positive or a negative, I've had both CS and non-CS fall on their faces and seen both excel. These days the things I am looking for are experience and a well used GitHub account.
The skills of computer scientist and computer programmer are largely orthogonal and are usually categorized by various government agencies as such.
> As I go through college, I'm starting to learn to distinguish who else is infected by this "coding love", and who is here because they thought they could get a good job with a degree in CS.

That's a bit simplistic. There are some people, myself included, who at that time knew they were interested in CS but had not yet come across the right project, language or instructor to help them discover their passion. I was a late bloomer as a developer. I did not keep at it just because I knew I could land a job.

At the last place I worked, we were looking for an entry-level developer and routinely turned down computer science graduates. They knew their theory, big-o, algorithm names, and such, but could not code at all in any medium. (And we weren't looking for any specific language--just enough background that they could learn our internal test scripts.)

There is a sharp difference between "Computer Science" and "Computer Engineering" though colleges often conflate the two. The article's author sounds like the latter, and with his personal background in programming, I would expect him to do fine in the position we were trying to fill. But many other graduates with CS on their diploma will have written just enough Java to pass their one programming course and have no interest in learning any more.

You don't need to know everything about the field, but you do need the ability to learn the practice. "Computer Science" on a resume (without some sign of personal projects) is too often a flag that the person lacks that ability.

> There is a sharp difference between "Computer Science" and "Computer Engineering" though colleges often conflate the two.

Whenever I've seen "Computer Engineering", it's in reference to the engineering domain of building computers, chips, etc. Software Engineering is the "practical" version of Computer Science you are probably referring to.

Don't you just hate those selfish Universities that won't churn out enough people with exactly the skills needed by start-ups so the start-ups can then pay them below the going rate they could have achieved otherwise.

Anyone would think it was the students paying for the education. An education that allowed them to maximum their income over a career than spans a decades. Instead the students should be paying to get the skills needed to help start-ups make their founders rich.

I'm a late comer to coding as a professional and it keeps me humble and always seeking: 1) to work with people smarter and more experienced than I am 2) with open hands, to always accept any critical feedback that helps me understand what I don't know or what I could understand that would help me face the world of problems in-front of me better.

That's been enough for me to surpass many of my peers of assorted educational background etc.

The way I like to think about it is this: a student that goes to baking or cooking school isn't going to be a better candidate if he/she doesn't bake on his/her own time. I would probably hire a self-taught baker that bakes on his/her own time over a formally-trained student of baking who doesn't bake on his/her own time. However, a baker that is formally trained and bakes on his/her own time is going to be quite formidable to the self-taught baker.

That's the same way I view developer candidates with respect to those with and without a CS background. The weakest candidates don't hack on their own time.

Bad analogy. The school-taught baker will almost always stomp the crap out of a self-taught baker. There are things you just can't learn at home, and how to bake at volume is one of them.
OK, how about self-taught cook? I've seen a number of restaurants opened by those without a formal cooking school background, but the common thread is working from restaurant to restaurant. I have a friend who was picked up by Alice Waters and is a sous chef at Nopa having cooked at Chez Panisse for years despite the lack of a formal cooking school background.
Then it invalidates your previous example. There's a difference between someone who gets vocational training on the job and someone who just decides they can cook well at home so they deserve to be a chef. Learning at home can't replicate scale or timeliness. There's no substitute for a live kitchen, and all cooking / baking students spend PLENTY of time in live kitchens before they graduate.
I'm sorry my initial analogy wasn't clear. When I meant self-taught, I met on the job vocational training as well as personal time devoted to pet projects. Hopefully, with the clarity added, you will find my analogy better.
So we're just comfortable with the idea that the purpose of a college is to train you for a job? Have we without question chucked out the main objectives of a liberal education - creating educated thinkers who have the capacity to learn?

Of course! The purpose of college is to produce tradesmen who come pre-trained to... uh... work at startups that help people "find attachments easily". That's what education is about.

What farce.

A Computer Science degree taught you to write a counter-argument blog post that says nothing original or compelling, because you read one you disagreed with.

Way to illustrate the point.

I'm self taught and have been a working developer for almost a decade now and a degree in computer science has nothing to do with anything from what I've seen. I've worked with guys with MASTERS degrees in computer science that couldn't understand how to get a "hello world" come up on the screen much less design a proper back end. I've also worked with brilliant guys who have CS degrees but also guys who are self taught like myself that are incredibly talented. The true difference (which is a point this article does make) is the love of coding. You have to love it to be good at it and you are going to figure it out one way or another if you do. In my opinion, its about getting out there and getting your hands dirty. There is more freely available resources out there than I can mention. Its a bit overwhelming but it sure beats throwing $50k (at least) in the hole.