top | item 10144917

Why You Should Hire Computer Science Majors

72 points| brenns10 | 10 years ago |stephen-brennan.com | reply

67 comments

order
[+] myth_buster|10 years ago|reply
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.

[+] rbanffy|10 years ago|reply
> 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.

[+] SamReidHughes|10 years ago|reply
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.
[+] edgyswingset|10 years ago|reply
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.

[+] bdcravens|10 years ago|reply
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)
[+] robotjosh|10 years ago|reply
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.
[+] andrewstuart|10 years ago|reply
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.

[+] SamReidHughes|10 years ago|reply
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.

[+] Retra|10 years ago|reply
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.)

[+] dsilver|10 years ago|reply
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.

[+] Tomte|10 years ago|reply
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.

[+] brenns10|10 years ago|reply
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.
[+] PhilWright|10 years ago|reply
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.

[+] whiteboarder|10 years ago|reply
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!

[+] Volundr|10 years ago|reply
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.

[+] jpmoral|10 years ago|reply
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.

[+] gwright|10 years ago|reply
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.

[+] ranci|10 years ago|reply
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..............

[+] ZanyProgrammer|10 years ago|reply
'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.
[+] seiji|10 years ago|reply
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?

[+] TheCowboy|10 years ago|reply
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.

[+] Gigablah|10 years ago|reply
I see "thin glue layer" and laugh sadly.
[+] jasonjei|10 years ago|reply
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.

[+] MisterBastahrd|10 years ago|reply
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.
[+] arihant|10 years ago|reply
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.

[+] seiji|10 years ago|reply
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.

[+] orangeplus|10 years ago|reply
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.
[+] prostoalex|10 years ago|reply
The skills of computer scientist and computer programmer are largely orthogonal and are usually categorized by various government agencies as such.
[+] xxcode|10 years ago|reply
For me going to school and majoring in CS was a exceptionally enjoyable experience. I did not think about jobs. I didn't even think of being a programmer. I took a liberal arts view to computer science - it taught me how to think about complex problems. And school was so much fun, both MIT and UC Berkeley. I remember feeling that I was getting smarter every day.
[+] character|10 years ago|reply
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.

[+] studentrob|10 years ago|reply
> 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.

[+] littletimmy|10 years ago|reply
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.

[+] jstrom|10 years ago|reply
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.

[+] herge|10 years ago|reply
> 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.

[+] vikingcaffiene|10 years ago|reply
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.
[+] pixelp3|10 years ago|reply
A lot of startups only think in terms of "hey let's make a simple app/website and let AWS do all the work!".

They don't realize how deep computing and computer science truly are. Data Structures and Algorithms, Computer Architecture, Operating Systems, Machine Learning, Computer Graphics, Databases, Compilers and Languages, etc. etc. all require a deep knowledge of CS.

Pretty much anything you use or build on was developed because of years and years of CS study or PhDs. When you use something like Google Maps, Chrome, iOS, Linux, AWS, Facebook (yes even Facebook), etc. it is because of the work of CS grads and professors over a long period.

Do you want to have deep knowledge of various systems and truly solve problems or just want to hack out another webapp or mobile app? Maybe that defines the difference between a CS major and "just-another-dev"

[+] cyberpanther|10 years ago|reply
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.

[+] ZanyProgrammer|10 years ago|reply
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.