Hacker News new | ask | show | jobs
by kenjackson 5825 days ago
I'm not sure I'd want to work for someone who didn't understand the difference between computer science and programming.

It really is like the difference between a degree in physics and being a car mechanic. You can be a great car mechanic without a degree in physics, but the intent of the physics degree isn't to create great car mechanics.

I was probably a better C programmer at age 15 than most professional programmers I've run across in my career. With that said I didn't know about the Halting problem nor the Chomsky Hierarchy nor even things like amortized cost nor really any asymptotic complexity analysis. Do any of those things help me at my day job... maybe a little, but not much. Certainly I'd be better served reading the .NET Fx docs or Java docs or some JQuery books. But that's not why I got a degree in CS.

3 comments

> I'm not sure I'd want to work for someone who didn't understand the difference between computer science and programming.

It's not a misunderstanding. You just can't get a degree in programming. 90% [1] of students in CS departments are there to be industry coders.

[1] True bogus fact.

In Canada at least, you can get a degree in Software Engineering which is aims to teach you the skills you'll need to develop software (not just programming though).
In most European countries too. You can get a Computer Engineering degree, equivalent to an US MSc in Engineering, with a Software, Hardware, Networking or some other topic focus. Mine was Telecommunications :)

These degrees are a mix of various proportions of traditional Computer Science, Electrical Engineering and software craft, depending upon your focus.

Computer Engineering and Software Engineering are two completely different things. SE is "testing, version control, design patterns", but CE is electrical engineering with a few programming classes. (I was a CE major.)
It really is like the difference between a degree in physics and being a car mechanic. You can be a great car mechanic without a degree in physics, but the intent of the physics degree isn't to create great car mechanics.

But in the case of programming, it's the opposite. Computer Science is a subset of what you need to know to be a programmer.

I'm missing your point. Physics is also a subset of what you need to know to be a mechanic.
Do you need to understand what a metric tensor is in order to be a mechanic?
Frankly I don't think either of them have taken CS, and have no idea what the word subset means.

Though I think pwim may have been pointing that out. There are elements of each discipline that overlap, but you don't need to know any of the physics/mechanics pieces that overlap to get a degree in one, and the same is true of CS/programming.

In fact, you can be an excellent programmer and know no CS, be an excellent mechanic and know no physics, and even be an excellent computer scientist and know nothing that would serve you in a modern programming job. (Obviously you could probably figure it out, but a code monkey would do just as well as some computer scientists.)

But fundamentally they serve different purposes. It's almost conceivable someone could prove P=NP without writing a line of code. Though decreasingly so as computers become so ubiquitous.

Interestingly, one of the most brilliant theoretical computer scientists I know only recently wrote his first computer program. Another very well-known,although now deceased, theoretical computer scientist didn't even use a computer. He would have his secretary print his emails and he would handwrite replies and give them to his secretary. Not sure how he wrote his papers, as he was prolific in his prime... maybe the typewriter?
Not really. You don't need to know about electromagnetism to fix a car.

But you do need to know about data structures, algorithms, computational complexity, and so on, to write software. You also have to know a lot more -- languages, frameworks, libraries, APIs, and good taste.

(I refuse to use the expression "design patterns", because all design patterns are what people with good taste naturally do without thinking. So have taste and you can skip reading about Flyweight Factory Facades.)

I would say there is a part of CS that you need to know to be a programmer. CS is not a proper subset of being a programmer. There is a lot in CS that most programming jobs will never require.
Neither is a proper subset of each other. Computer Science is a huge field, and programmers are rarely competent with more than one or two of those fields:

http://en.wikipedia.org/wiki/Computer_science

As a non-programmer I really like your comment but you leave me wanting more. I understand that programming and computer science are different animals, but I guess in terms of your example I don't understand why someone pursuing a profession in programming would want or need the CS background?

Are you getting at the pursuit of higher understanding angle i.e. separating the pragmatic pursuit of workplace advancement from the more selfless or idealistic pursuit of knowledge?

I'm not sure I'd say it is more selfless or idealistic, but I do think that college, at least as I see it, serves a very unique purpose.

It's goal is to take great ideas over time and teach those ideas to new students of the field. And computer science as a field is more about the science of computing, than it is about programming. Generally programming is taught as a way to understand different manifestations of computing.

To answer your first question, pursuing a profession in programming doesn't require a CS degree. And it's probably only marginally beneficial to improving the quality of your work in _most_ programming jobs. I do think we can view programming as more of a vocational skill. There will be some jobs that require CS backgrounds, but for the most part it's a lot closer to writing in that there is a suitable job for almost every level of skill.

I would say that learning for the sake of learning is a far more selfish choice than moving into the work force and being a productive member of society. But that isn't going to stop me from choosing learning and maybe putting it into use in the far less selfish application of research. (I do biotechnology)