Author Topic: Coding Horror: Why Can't Programmers Program?  (Read 12702 times)

0 Members and 1 Guest are viewing this topic.

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: Coding Horror: Why Can't Programmers Program?
theres also a reason its called computer science. computers have so many layers of abstraction between the programming language and the machine code, and if you didnt design the whole system from the ground up youself (and even if you did), the only way to know if an optimization is optimal is to generate empirical data to compare against. things like using memory can slow you down a lot more than doing math. many int maths can be done in a single cycle, and its possible that your computer can crunch all 3 mods in a single cycle. you can do things like check the time before and after a function call to see if changes in the call really do speed things up. also not every scrap of code needs to be optimal. init code for example is best left easy to read so that somone looking at the program gets a picture of all the stuff that needs to be done before a subsystem can operate.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline Spicious

  • Master Chief John-158
  • 210
Re: Coding Horror: Why Can't Programmers Program?
Not really. They just have a better understanding of what's going to happen than the writers of the article.
That seems like quite the logical leap given that the authors of that article and those linked seem to not infrequently be people doing the interviews. Low level optimisations would only be important for a fairly niche job sector.

its possible that your computer can crunch all 3 mods in a single cycle.
Is that a reference to Itanium?

 

Offline karajorma

  • King Louie - Jungle VIP
  • Administrator
  • 214
    • Karajorma's Freespace FAQ
Re: Coding Horror: Why Can't Programmers Program?
Not really. They just have a better understanding of what's going to happen than the writers of the article.
That seems like quite the logical leap given that the authors of that article and those linked seem to not infrequently be people doing the interviews. Low level optimisations would only be important for a fairly niche job sector.

I think you've missed my point. I wasn't in favour of low-level optimisation. In fact every single post I've made has been against it.

The point of the article was that many people going for coding jobs can't code and therefore a test is needed. I doubt anyone on this board didn't get that point.

My point was that in an interview situation everyone is going to try to come up with a brilliant solution to that test rather than simply slapping one together that works. They're in an interview after all. Making a solution that has a bug in it is going to count against them (in their minds at least), making a solution that is both brilliant and easily readable is going to get them the job since it will impress the interviewers (or so they think). So it's silly to expect people not to try. They will. I'd be surprised if anyone here didn't check to see if they could improve on the examples given here.

The important thing though is to realise that although you might come up with more optimal solutions the one Nuke gave is probably what you should actually hand in if the interviewer is competent. The authors didn't mention this fact though and that's what I mean when I said people on this board had a better understanding. They should have warned the people setting the tests that they shouldn't try to examine the code too carefully as the code from the very best coders is going to look very similar to the code from those who are beginners.
Karajorma's Freespace FAQ. It's almost like asking me yourself.

[ Diaspora ] - [ Seeds Of Rebellion ] - [ Mind Games ]

 

Offline The E

  • He's Ebeneezer Goode
  • Global Moderator
  • 213
  • Nothing personal, just tech support.
    • Steam
    • Twitter
Re: Coding Horror: Why Can't Programmers Program?
Yeah, the test isn't about the quality of the code (not much, anyway), it's about whether or not the applicant actually HAS coding ability at all.
The examples posted here are things we can come up with when we have ample time to think about it. In an interview situation, the simple solution is probably what the majority of coders will come up with.
The main purpose of this test is to separate the people who have at least some training from those who think that programming is something where you can fake your way through an Interview and learn the stuff later. DailyWTF's Tales from the Interview section has several examples for why tests like these, as trivial as they may seem, are a really good idea.
Let there be light
Let there be moon
Let there be stars and let there be you
Let there be monsters and let there be pain
Let us begin to feel again
--Devin Townsend, Genesis

 

Offline Sushi

  • Art Critic
  • 211
Re: Coding Horror: Why Can't Programmers Program?
I call BS on the article. If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up. If we're going to be throwing around anecdotal evidence, then I'll stick with my own over theirs (which says that the vast majority of people who make it through 4+ years of CS education actually do know something about programming).

But yes, as an interviewer, if you expect someone to write code and don't verify that they know how before you hire them, then you suck at your job and deserve what you get.

 

Offline The E

  • He's Ebeneezer Goode
  • Global Moderator
  • 213
  • Nothing personal, just tech support.
    • Steam
    • Twitter
Re: Coding Horror: Why Can't Programmers Program?
Well, during the initial dot-com hype it was not unusual for companies to hire people whose sole qualification for development was there ability to use keyboards.

If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up.

No, not really. There are a LOT of misconceptions about how IT development works floating around, more so than in almost any other profession I know. Granted, this was more of a problem a few years back, during the initial dot-com boom, but the fact remains that there are still people around who think that programming is actually quite easy.
Let there be light
Let there be moon
Let there be stars and let there be you
Let there be monsters and let there be pain
Let us begin to feel again
--Devin Townsend, Genesis

 

Offline Iss Mneur

  • 210
  • TODO:
Re: Coding Horror: Why Can't Programmers Program?
Well, during the initial dot-com hype it was not unusual for companies to hire people whose sole qualification for development was there ability to use keyboards.

If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up.

No, not really. There are a LOT of misconceptions about how IT development works floating around, more so than in almost any other profession I know. Granted, this was more of a problem a few years back, during the initial dot-com boom, but the fact remains that there are still people around who think that programming is actually quite easy.

I agree, there are a large number of people that claim to be programmers, and maybe even have been employed as a "programmer" at some point, when in reality the "programming" they were doing amounted to data entry or some such. 

Also, in particular during the dot com boom, being able to mark up text with HTML and copy and paste entire php or VB scripts on a web server is consider by some to be "programming".  Now, not to deride any actual web developers (because this is how I got the "programming" bug (HTML and Javascript, in particular)), but slapping stuff together by following specific instructions is not programming.  This is programming by only knowing how to use the keyboard.

Personally (I know this is anecdotal evidence but whatever), during my time attending College for my Bachelor (I am currently finishing my non-CS stuff now), I have met a number of people that could not pass the Introduction to Computer Science course, which amounted to the instructor giving (at the start of the course) click by click instructions on how to do the lab in a Java IDE (NetBeans, I think it was) to by the end of the course, "implement this data structure that we talked about in class". The class included a printed copy of the instructors slides that had the pseudo code for the data structure in it (sometimes even Java snippets of the important parts of the data structure).  If I was not clear, I mean the instructor basically gave the students the lab assignments to the students in class as copy and paste building blocks to assemble, not write, the lab (thankfully the rest of the courses after that were not handed on a silver platter like that, or I would have gone insane).

That being said, even 1 out of the 10 (of the 40 that started) that passed the first course, still could not figure out basic programmer things like how to debug and reading syntax error messages, even though they understood the data structures from a theoretical standpoint, they could not put it into code.  This was made worse when in the second year we went to C++ and x86 ASM using MASM.
"I love deadlines. I like the whooshing sound they make as they fly by." -Douglas Adams
wxLauncher 0.9.4 public beta (now with no config file editing for FRED) | wxLauncher 2.0 Request for Comments

 

Offline Spicious

  • Master Chief John-158
  • 210
Re: Coding Horror: Why Can't Programmers Program?
I call BS on the article. If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up. If we're going to be throwing around anecdotal evidence, then I'll stick with my own over theirs (which says that the vast majority of people who make it through 4+ years of CS education actually do know something about programming).
While you may be right (though 3 years is an option here), the article works from a more plausible premise of some small set (with or without an education in CS) who can't code bouncing between interviews.

That being said, even 1 out of the 10 (of the 40 that started) that passed the first course, still could not figure out basic programmer things like how to debug and reading syntax error messages
Can anyone read C++ template errors?

 

Offline Mika

  • 28
Re: Coding Horror: Why Can't Programmers Program?
The article seems to reflect some of the feelings I have got from programming. First thing is that programming is not easy, despite a lot of CS students thinking so when they start. This, like many other trades, is something you need to have an internal desire to do. Getting paid good money is not a good motivator if it is the sole motivation of studies.

Second thing is that I have found out that lots of Physicists are better programmers than Computer Science students in the dirty low to mid level stuff. But there are some catches, Physcists do have it easier to understand low level functions and what physically happens in the motherboard. However, abstration layers, classes, polymorphisms or inheritances are not mentioned that much in the lessons. In the end I find that I can actually program subroutines using Assembly, or vanilla C (Pelles C has been wonderful!), but for some reasons I have an inherent dislike for C++. And especially I hate writing GUIs. But, then again MATLAB has been wonderful!

Bottom line is, every person is different and like different things in programming. I hate Object Oriented programming, cannot stand writing GUI event handlers, but give me anything that needs Maths and I'll be happy! But then again, I write mainly mathematical programs or libraries in the rare case I need them. The whole application development; I'll leave that to somebody else - I don't find it that interesting. So, some people like Table Oriented Programming, some like Procedural and some Object Oriented. Give the person something what they are fluent with and that's where they are most efficient.

As a sidenote, I always found Assembly to be an incredibly useful course of explaining what computer actually does! And C fits in wonderfully to continue on that track. And the pointers are quite clear after that.

Besides, I'm not sure what to think of the replies to that article - even I can spot some of the errors in them. And the same seems to continue here, suddenly everyone has a need to write one as if to prove they are on the good programmers' side. Whatever the reason, be sure to take a look at the dailywtf for the isValidInteger() function... written in Java. How many errors can you spot?

Perhaps I should put up the simple dynamic vector library here for code review - anyone interested?
Relaxed movement is always more effective than forced movement.

 

Offline Mika

  • 28
Re: Coding Horror: Why Can't Programmers Program?
Sorry for not remembering the correct name for the function.

You can find the original article here:
http://thedailywtf.com/Articles/isValidNumber().aspx
Relaxed movement is always more effective than forced movement.

 

Offline The E

  • He's Ebeneezer Goode
  • Global Moderator
  • 213
  • Nothing personal, just tech support.
    • Steam
    • Twitter
Re: Coding Horror: Why Can't Programmers Program?
There isn't that much wrong with it. It does its job. In fact, it's the sort of code one tends to write to appease management.

That being said, this function is about as useless as it gets. It accepts only integers as parameters, and since this is Java, the JVM will scream at you for trying to put something that is not an int in there. Meaning that this function will only fail under one condition: if the parameter passed is NULL. Under other circumstances, it will either fail before it is even executed (or at the very least generate warnings), or return true. Note that it will return true even if the parameter passed is a single, non-numeric char, since those are converted implicitly by Java.

How wrong am I?

Let there be light
Let there be moon
Let there be stars and let there be you
Let there be monsters and let there be pain
Let us begin to feel again
--Devin Townsend, Genesis

 

Offline Iss Mneur

  • 210
  • TODO:
Re: Coding Horror: Why Can't Programmers Program?
I call BS on the article. If a couple of places were getting hordes of unqualified applicants, it's because they screwed something up. If we're going to be throwing around anecdotal evidence, then I'll stick with my own over theirs (which says that the vast majority of people who make it through 4+ years of CS education actually do know something about programming).
While you may be right (though 3 years is an option here), the article works from a more plausible premise of some small set (with or without an education in CS) who can't code bouncing between interviews.
Yes, I found the long explanation of what you are describing from Joel's post on the topic.
Quote from: Joel on Software
Now, when you get those 200 resumes, and hire the best person from the top 200, does that mean you're hiring the top 0.5%?

"Maybe."

No. You're not. Think about what happens to the other 199 that you didn't hire.

They go look for another job.

That means, in this horribly simplified universe, that the entire world could consist of 1,000,000 programmers, of whom the worst 199 keep applying for every job and never getting them, but the best 999,801 always get jobs as soon as they apply for one. So every time a job is listed the 199 losers apply, as usual, and one guy from the pool of 999,801 applies, and he gets the job, of course, because he's the best, and now, in this contrived example, every employer thinks they're getting the top 0.5% when they're actually getting the top 99.9801%.

Obviously, a very contrived example as he points out in the rest of his post but the premise remains.

That being said, even 1 out of the 10 (of the 40 that started) that passed the first course, still could not figure out basic programmer things like how to debug and reading syntax error messages
Can anyone read C++ template errors?
Yes, either a lot of practice, being good a pattern matching or a long time to reformat the error to be a legible one and not a long line of nested angle brackets.

The article seems to reflect some of the feelings I have got from programming. First thing is that programming is not easy, despite a lot of CS students thinking so when they start. This, like many other trades, is something you need to have an internal desire to do. Getting paid good money is not a good motivator if it is the sole motivation of studies.
Agreed, it depends on what you are trying to do by programming, just get it done, or make it the most elegant and well designed program or library out there.
Second thing is that I have found out that lots of Physicists are better programmers than Computer Science students in the dirty low to mid level stuff. But there are some catches, Physcists do have it easier to understand low level functions and what physically happens in the motherboard. However, abstration layers, classes, polymorphisms or inheritances are not mentioned that much in the lessons. In the end I find that I can actually program subroutines using Assembly, or vanilla C (Pelles C has been wonderful!), but for some reasons I have an inherent dislike for C++. And especially I hate writing GUIs. But, then again MATLAB has been wonderful!
Two things:
1. no programmer really likes doing GUIs, they are best left to the interface designers to layout and implement if the designer is capable, or have the layout and the programmer implement.
2. Unless the physicist also understands electrical engineering, more specifically electronics engineering, they would likely only understand electrical properties of the computer, which really only has a minor effect on understanding what the computer is really doing and how fundamental computer operations are implemented such as dereferencing pointers, virtual memory, or page tables.  That being said, the type of thought process that physics would require (namely the need to be very analytical of everything) is also very helpful as a programmer.

Bottom line is, every person is different and like different things in programming. I hate Object Oriented programming, cannot stand writing GUI event handlers, but give me anything that needs Maths and I'll be happy! But then again, I write mainly mathematical programs or libraries in the rare case I need them. The whole application development; I'll leave that to somebody else - I don't find it that interesting. So, some people like Table Oriented Programming, some like Procedural and some Object Oriented. Give the person something what they are fluent with and that's where they are most efficient.
Programming paradigms has little to do with the original FizzBuzz problem.  The most important part of the FizzBuzz problem is can you implement in code (of any kind) the algorithm that was outlined.  Implementing the algorithm is programming.  Generating the algorithm is Computer Science.  Most programmers that can do both are quite often called "Software Engineers" (much to the annoyance of the rest of the engineers), or "Software developers", and because both get rolled into one a lot they also just get called "Programmers" (mostly because to the layman algorithms are useless and Computer Science and programming (along with most anything computer or technology related) are the same thing, magic).

As a sidenote, I always found Assembly to be an incredibly useful course of explaining what computer actually does! And C fits in wonderfully to continue on that track. And the pointers are quite clear after that.
Defiantly, and if you want to know why a computer does what it does, in the way that it does it, you need to look at a (integrated) circuits course.

Besides, I'm not sure what to think of the replies to that article - even I can spot some of the errors in them. And the same seems to continue here, suddenly everyone has a need to write one as if to prove they are on the good programmers' side. Whatever the reason, be sure to take a look at the dailywtf for the isValidInteger() function... written in Java. How many errors can you spot?
I agree that, it why I refrained from posting my own, though remember that by the fact that we are even here discussing this idea, is a very good indication that we in fact are not one of the 199 that Joel (see quote near the top of this post) and Jeff are talking about.

Perhaps I should put up the simple dynamic vector library here for code review - anyone interested?
Code review is always useful, even though I have no idea what the "simple dynamic vector library" is used for (I can guess) or its relevance to this discussion.

[snip]

How wrong am I?
You are 100% correct the function adds no value as its inputs will always be integers or coerced into being integers.
"I love deadlines. I like the whooshing sound they make as they fly by." -Douglas Adams
wxLauncher 0.9.4 public beta (now with no config file editing for FRED) | wxLauncher 2.0 Request for Comments

 
Re: Coding Horror: Why Can't Programmers Program?
Sorry for not remembering the correct name for the function.

You can find the original article here:
http://thedailywtf.com/Articles/isValidNumber().aspx

OMG after seeing that java can have null ints, this whole things sucks LOL

I also like how they comment about getting a NumberFormatException then proceed to catch Exception instead LOL
That's cool and ....disturbing at the same time o_o  - Vasudan Admiral

"Don't play games with me. You just killed someone I like, that is not a safe place to stand. I'm the Doctor. And you're in the biggest library in the universe. Look me up."

"Quick everyone out of the universe now!"

 

Offline chief1983

  • Still lacks a custom title
  • 212
  • ⬇️⬆️⬅️⬅️🅰➡️⬇️
    • Minecraft
    • Skype
    • Steam
    • Twitter
    • Fate of the Galaxy
Re: Coding Horror: Why Can't Programmers Program?
You can get a CS degree without writing a lot of code.  Computer Science is too broad of a discipline, and that's a problem.  There's also not an enforced accreditation test like for an engineering degree, so any old place can give out something they feel like calling a Computer Science degree.  It's just a B.S. involving computers :P

Somewhere in all this I found a link to a book about Professional Software Development, and it's something I've been talking about since I got close to graduating.  There needs to be a split in the field, for those interested in theory (who really don't even write a lot of code) and those who want to do nothing but utilize existing principles to design and create a quality product (if only there was a term for people who do that...).  And don't even get me started on most IST majors.  At my uni they were the CS washouts.  A lot of CS programs don't have a backup program like IST so they just push through their comp scis.

Both 'efficient' and 'high maintainability' programs have their purposes, and one or the other might not be discernable in certain programming languages.  Swapping two variables, for example.  Many people point out the XOR as the _correct_ solution, as if it's always right.  These people would get a boot out the door.  You can bring it up of course, but make sure to clarify when it's useful and when you'd have to use other means like a temp var.  Also, throwing something out like python's a, b = b, a can be dangerous as well.  Unless you're intimately familiar with the backend of the language you could very well be creating _two_ extra memory allocations instead of just one temp var for that operation.  Or, the language may not be smart enough to figure out you're doing a swap, and perform the operations in an order that leads to an undesired result (a == b always for instance).  Pointing out that kind of knowledge would not be a bad idea, but if there are that many pitfalls with those methods, you should probably be sticking with a reliable one and explaining why the other ones _aren't_ the best idea.  Too many programmers get stuck on one language and forget that there's more than one way to skin a cat, depending on the type of knife you use (or axe, or flamethrower, or...).

I'm not surprised that many applicants can't create a program from scratch, especially if they haven't been doing that a lot at a previous job.  It's easy to get rusty in certain areas especially if you've been working a repetitive job that doesn't fully exercise your skill set.  But the comment that the place must be doing something wrong to get so many of those coders in the door is probably correct too, to a point.  They may just highly publicize their openings and get mostly responses from those coders who couldn't get a referral from a previous employer, contractor, coworker, etc.  Once you're 'in' in this industry, it shouldn't be too hard to find followup jobs unless you're a complete social failure.  Getting that first one out of college can be tough though, and interviewing college grads can be a pain in the arse, especially with the turmoil in the CS education field.
Fate of the Galaxy - Now Hiring!  Apply within | Diaspora | SCP Home | Collada Importer for PCS2
Karajorma's 'How to report bugs' | Mantis
#freespace | #scp-swc | #diaspora | #SCP | #hard-light on EsperNet

"You may not sell or otherwise commercially exploit the source or things you created based on the source." -- Excerpt from FSO license, for reference

Nuclear1:  Jesus Christ zack you're a little too hamyurger for HLP right now...
iamzack:  i dont have hamynerge i just want ptatoc hips D:
redsniper:  Platonic hips?!
iamzack:  lays

 

Offline castor

  • 29
    • http://www.ffighters.co.uk./home/
Re: Coding Horror: Why Can't Programmers Program?
One of the failures within CS etc programs is that students are often given assignments like: write a program that does X. What they should be given is a large, more or less messy code base where they need to implement a new feature X. That's what most of them will be doing anyway, once hired by a company.

Actually, it would be good if students would be working with the one and same code base the whole period of their studies. And at the end the whole of the code is evaluated: how well it works, did the code become more messy or more readable in the process etc. That would teach students to give the necessary "love" to their code from the beginning.

 

Offline chief1983

  • Still lacks a custom title
  • 212
  • ⬇️⬆️⬅️⬅️🅰➡️⬇️
    • Minecraft
    • Skype
    • Steam
    • Twitter
    • Fate of the Galaxy
Re: Coding Horror: Why Can't Programmers Program?
Uhm, sure.  Dunno if that's really necessary.  And real CS programs aren't about that, those are the dull ones I was talking about.  Real CS has things like machine state theory, algorithm design, etc where you actually don't need to write any code at all.  But that's how you get students who _can't_ write any actual code, they never had to take any software production classes.  Just theory.  You either pick it up in your spare time then, likely leading to the hack it together style of code (my favorite), or you end up unable to find a job because you can't remember what C #includes you need for printf() in the middle of an interview.

Students going into the industry to write code, and not do research, at the very least need to be stressed to take industry courses.  Principles of Software Design, Software Quality Assurance, design patterns, etc are all things a student should be utilizing during their education, not just reading about.
Fate of the Galaxy - Now Hiring!  Apply within | Diaspora | SCP Home | Collada Importer for PCS2
Karajorma's 'How to report bugs' | Mantis
#freespace | #scp-swc | #diaspora | #SCP | #hard-light on EsperNet

"You may not sell or otherwise commercially exploit the source or things you created based on the source." -- Excerpt from FSO license, for reference

Nuclear1:  Jesus Christ zack you're a little too hamyurger for HLP right now...
iamzack:  i dont have hamynerge i just want ptatoc hips D:
redsniper:  Platonic hips?!
iamzack:  lays

 

Offline FUBAR-BDHR

  • Self-Propelled Trouble Magnet
  • 212
  • Master Drunk
    • 165th Beer Drinking Hell Raisers
Re: Coding Horror: Why Can't Programmers Program?
I've said it before and I'll say it again:  We need to scrap the whole college system and go to apprenticeships.  The only way you truly learn is by doing.  What they teach you in college is either theory that doesn't apply to the real world or already so outdated by the time you get a job you are years behind what industry is using.  This applies to everything not just CS. 
No-one ever listens to Zathras. Quite mad, they say. It is good that Zathras does not mind. He's even grown to like it. Oh yes. -Zathras

 

Offline Nuke

  • Ka-Boom!
  • 212
  • Mutants Worship Me
Re: Coding Horror: Why Can't Programmers Program?
i realized shortly after getting my 2 year degree that education was a scam. anyone can teach themselves anything in their spare time and end up having better mastery that someone who went to school for 4 years to do the same thing.
I can no longer sit back and allow communist infiltration, communist indoctrination, communist subversion, and the international communist conspiracy to sap and impurify all of our precious bodily fluids.

Nuke's Scripting SVN

 

Offline chief1983

  • Still lacks a custom title
  • 212
  • ⬇️⬆️⬅️⬅️🅰➡️⬇️
    • Minecraft
    • Skype
    • Steam
    • Twitter
    • Fate of the Galaxy
Re: Coding Horror: Why Can't Programmers Program?
How are you going to pick up the things like the complicated math, etc during an apprenticeship?  That's what internships are for.  Maybe at least one year of real life experience should be required before you get your degree.  Engineering fields are already set up similarly to this.  You go to college, pass your FE (Fundamentals of Engineering) exam, and then you're an EIT (Engineer-in-Training).  You have to serve at an accredited firm for several years before you can be considered for your PE (Professional Engineer).  Computer Science doesn't have anything like this.  But getting rid of college isn't the answer, we need a better system for post-college experience, and we need to define the various fields with Computer Science better.  I still think Software Engineering needs to be an accredited engineering discipline, the groundwork for engineering in general is already there so you just need to decide what needs to be learned before you get out into the real world.
Fate of the Galaxy - Now Hiring!  Apply within | Diaspora | SCP Home | Collada Importer for PCS2
Karajorma's 'How to report bugs' | Mantis
#freespace | #scp-swc | #diaspora | #SCP | #hard-light on EsperNet

"You may not sell or otherwise commercially exploit the source or things you created based on the source." -- Excerpt from FSO license, for reference

Nuclear1:  Jesus Christ zack you're a little too hamyurger for HLP right now...
iamzack:  i dont have hamynerge i just want ptatoc hips D:
redsniper:  Platonic hips?!
iamzack:  lays

 

Offline Sushi

  • Art Critic
  • 211
Re: Coding Horror: Why Can't Programmers Program?
There needs to be a split in the field, for those interested in theory (who really don't even write a lot of code) and those who want to do nothing but utilize existing principles to design and create a quality product (if only there was a term for people who do that...). 

A term like Engineers? :p

The problem is, where exactly do you make that split? I happen to think that the CS program at my university strikes a pretty good balance between theory and engineering. Personally, I wouldn't have it any other way. Knowing the theory makes you a better engineer, and knowing the engineering helps you grok the theory. The theory helps you innovate, and the engineering helps you execute. I've chosen a track that is a bit heavier on the theory side, but I feel comfortable doing that because I've had some good work experience that has given me a chance to learn a lot of the engineering principles in a hands-on sort of way.