Live data from Hacker News

Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

codemanship.co.uk

81–90 of 205 posts

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#81
post #21

Earlier quoted context omitted.

Knowing HN, someone will surely deliver, and the front page will have 4-6 variants of "Why you should/shouldn't learn computer science"

After I wrote out "fuck just programming, cs is fucking awesome", I immediately thought it sounded like a good name for a blog post :) Is my hipster showing?

I've been mentally composing a blog post entitled, "Programming is hard, which is why I don't want to do it" about the differences between "real programming" and computer science. The thesis is that "real programming" involves solving problems that are inherently simple but have loads of incidental state and details to mentally keep track of, whereas computer science involves solving streamlined, semi-pure instances of inherently hard problems.

I prefer computer-science because I don't like loading five windows and 18 tabs worth of incidental state into my working mind just to get any work done at all, but I greatly enjoy cutting away every impurity and irrelevant detail to forge a creative solution from the ore of a truly difficult problem.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#82
post #73

Earlier quoted context omitted.

This could not be more true. A formal CS background gives people a very valuable toolset with which to program. It's something you can't fake, and if you know what to look for, it's instantly recognizable. But if you don't have a CS background, yeah, I could see why it would all look the same to you. A CS person can easily learn programming; it's second nature to them. But a programmer does not learn deeper theory as…

A CS person can easily learn programming This is not true, if you've ever seen academic code...

To be fair to academic code, it's typically used once to prove a point and then thrown away. It's a lot like an R&D project any of us might do that will either be rewritten later or just used to test a theory and then forgotten.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#83
post #63

Earlier quoted context omitted.

You can have an intuitive sense of how many operations you're performing without knowing big-O notation.

Of course, but part of the benefit from studying CS is that you'll be able to recognize intuitively when there is or there should be a better solution. Let's say you want a data structure that performs three operations. Insert, Delete, and Find (as in, 'is this in the database?'). The intuitive sense may come from saying, "Linked-Lists would be horrible for this! Each operation would be slow." (O(n)) The practiced pr…

"Take the most significant part, rip off the constants, and that's its growth rate."

Well, it's an upper bound on its growth rate. And only after some possibly-gigantic n.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#84
post #56

So, I agree with this article in spirit. Lots of programmers could've benefitted from a more programming centric approach rather than a CS approach. However, this bit gave me pause. " I cannot tell the difference by watching them develop software." I can't disagree with this more. While this may be true of students who were middle of the road students in CS programs. I can't definitely tell the difference between peo…

Add me to the list of people who are curious and don't agree at all with your claim that people with CS background approach regular problems in a fundamentally different way. The only times when the CS folks' approach differ is when they can reduce the unknown to a known - finding the least wasteful way to cut raw materials(knapsack); modelling problems as graphs/trees and then applying well known, efficient algorith…

Something that no one is acknowledging here is that a "CS" program isn't a uniform thing, and that people who come out of a "CS" program have not uniformly learned what it did have to teach.

I never took the full CS program, but I hit most of the core classes while studying Cognitive Science. By far the most valuable class sequence I took was compiler design; learning HOW a compiler takes code and turns it into assembly language was a revelation to me, and I was able to "see" the relative optimization of algorithms much better after taking that course.

Will I ever need to write a compiler? Probably not, though I have written several small interpreted scripting languages/DSLs. But taking the class expanded my mind in a way that grants me insights a LOT of self-taught programmers I've worked with never seem to have.

Does everyone who takes a compiler design class gain those insights? No, certainly not. It's possible to muddle through just about any class without REALLY understanding it and pass -- some more easily than others.

The weeder classes in CS at my college were tougher than many, though, including one that actually required each student to write non-trivial programs in assembly language.

But back to your comment: It's not that all code needs to be "clever." A friend of mine once CRITICIZED a piece of code for being "too clever," and he was right. "Clever" isn't a goal. But sometimes the straightforward approach made by someone who is good, but self-taught, isn't as good as the equally straightforward approach by the self-taught AND CS-educated programmer.

>The higher level CS projects exist just to prove a point(research), or doesn't exist at all except in theory.

Real higher-level CS projects frequently involve interesting graphics research, which (also frequently) ends up working its way into commercial game development.

I don't have any clue what you mean by "doesn't exist at all except in theory," since even if you're building advanced data structures that you could otherwise pull from a library, you're building something "real" that could actually be used.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#85
post #56

So, I agree with this article in spirit. Lots of programmers could've benefitted from a more programming centric approach rather than a CS approach. However, this bit gave me pause. " I cannot tell the difference by watching them develop software." I can't disagree with this more. While this may be true of students who were middle of the road students in CS programs. I can't definitely tell the difference between peo…

Add me to the list of people who are curious and don't agree at all with your claim that people with CS background approach regular problems in a fundamentally different way. The only times when the CS folks' approach differ is when they can reduce the unknown to a known - finding the least wasteful way to cut raw materials(knapsack); modelling problems as graphs/trees and then applying well known, efficient algorith…

To extend on your points, I believe the difference is smaller in practice than in theory.

The biggest difference is that rigorous CS program will drill this proof-first, implement-later habit in you through repeated exercise. This is very valuable when solving something difficult because you will end up with many trial/errors, and it's much faster to iterate in your head than in an IDE. This habit is also difficult to acquire without deliberate and repeated exercise.

Most other differences are just difference in experience. It'll take a smart programmer+ no time to learn enough about CS theories to adequately solve that 5% of the most difficult part of the job.

+ By smart programmer, I mean someone who have enough intelligence/discipline to graduate from rigorous CS course, but did not.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#86

Earlier quoted context omitted.

I think he addresses this point pretty well -- you can learn good programming practices through apprenticeship/experience without understanding the deeper fundamentals. You won't be creating the next MapReduce, but you'll be able to remix and hack up existing functionality in new and creative ways.

From the other end though, this can result in a lot of cargo-cult programming. "this is how to do it" can create a ton of redundancy (the bad kind) if the underlying mechanisms are not understood sufficiently.

Even having the underlying ability to understand something sufficiently doesn't imply you'll automatically do so. There are plenty of times even a properly educated person on the subject matter at hand will miss opportunities to apply their knowledge. Recognition of a given scenario is a test of your analytic ability, not sheer know-how.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#87
post #60
post #46

Earlier quoted context omitted.

I can't talk for the parent, but one significant way I expect people with formal training and people without it to differ is in how the knowledge of data structures and algorithms affects their work. If you stumble upon a problem that cries for a trie or a splay tree and you don't know they exist, you'll have a very difficult time solving the problem with adequate performance. If you are lucky and dedicated and talen…

> I can't talk for the parent, but one significant way I expect people with formal training and people without it to differ is in how the knowledge of data structures and algorithms affects their work. And how often in your experience you stumble upon these kind of problems? In my experience, the clever parts are about 5% to 20%. Of course, there can be projects where the clever parts outnumber the non-clever parts,…

It might not be needed, but it's about the approach. You don't need all the tools all the time, but knowing what patterns are available and having a good understanding of why you would or wouldn't use it means you approach a problem starting from a different place.

It's possible to get the same end result most of the time (especially if the end result doesn't require the "clever" solution), but I would also agree that there definitely is a difference in approach that is discernable by watching someone work.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#88

So, I agree with this article in spirit. Lots of programmers could've benefitted from a more programming centric approach rather than a CS approach. However, this bit gave me pause. " I cannot tell the difference by watching them develop software." I can't disagree with this more. While this may be true of students who were middle of the road students in CS programs. I can't definitely tell the difference between peo…

Same here. I think the idea of a BSc in Software Development is excellent, and I think some colleges are starting to think along those lines. For instance, the SaaS class from Berkeley on Coursera would have been far more useful to me than the circuit design and formal theory classes I had to take.

However. There is definitely something to be said for SOME kind of structured education for developers. The author's anecdotal evidence notwithstanding, I have met many aspiring self-taught programmers who just don't have it. There seems to me to be a strong correlation between a person's drive to learn something and their willingness to pursue a formal education... not surprising if you think about it.

I also know an absolute genius programmer who is 99% self-taught. But just because people like Wozniak exist doesn't mean they're the norm.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#89

I agree that a lot of people only need to learn how to program, but I find computer science genuinely fascinating and mind-expanding, so it's a shame that more programmers don't feel like they're able to access it, either because of unfamiliarity with formal mathematics or a justifiable aversion to the "category theory or GTFO" attitude. Which is why I'm writing http://experthuman.com/computation-book .

I have always considered computer science to be information science and be a part of mathematics and not a separate science. But then again, as a physicist i might be wrong. It's not meant to be diminutive at all (i am after all a programmer) but i consider programming to be a tool, like maths (and consider the two to be inseparable).

I have always considered mathematics to be a part of philosophy and not a separate science.

Re: Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"

#90
post #45

When i was in university majoring in Computer Science i had about 5 programming classes in all 4 years of school while the rest were theory, applied statistics and mathematics. So to call it "computer programming" is a major overstatement to me.

This depends heavily on the school. When I got my CS degree from a liberal arts school in 2002, my experience was similar. I had lots of discrete math, linear algebra, data structures, algorithms, and language theory courses.
Post reply on HN