http://qs321.pair.com?node_id=134202

THESIS:

Computer science is as useful for writing good software as literary criticism is for writing a good story.

Comments?

update (12-30-2001) for whatever it is worth, I do strongly believe both CS and literary criticism are useful. However, a life unexamined is not worth living. Thanks to everyone who contributed.

Replies are listed 'Best First'.
(Ovid) Re: (OT?) Usefulness of CS
by Ovid (Cardinal) on Dec 25, 2001 at 00:28 UTC

    Update: I see that social_mandog is getting downvoted for /h(er|is)/ post. I can understand why, but I want to explain why I gave it a ++.

    social_mandog, from what I read in the above post, seems to be suggesting that a CS degree is useless (at least, if you accept the anology that critics can't create). So, social_mandog made a post, stated a thesis, and asked for others to comment. Now, if you're downvoting the post because it's off-topic, I can see that. If you're downvoting because social_mandog is apparently stating a view that you don't agree with, then I don't agree with that - though it's your prerogative. An argument was put forward and discussion was asked for. I like that.


    You're absolutely correct. Literary criticism can be useful for writing a good story :)

    I've definitely met CS majors who couldn't tell you the difference between a global variable and a lexically scoped one -- or why the latter is preferred. I've met CS majors who are programming language bigots and forget that different languages have different strengths. In fact, many of the CS majors that I have met seem clueless about programming.

    Programmers that I have met without a CS degree are even worse.

    Everyone knows that the bubble sort is useless, right? What, you didn't learn that when you studied algorithmic efficiency? Oh, wait, you did learn about it. Did you know that the bubble sort is often the fastest possible sorting algorithm on nearly sorted data? Do you know the difference between a b-tree and a binary tree? Have you used a heap? What about a linked list, double linked list and the like? Why are linked lists so common in other langauges but seldom used in Perl?¹

    It's questions like the ones above that trip up people who aren't CS majors. Personally, I only have an Associate of Science degree. I'm working my tail off trying to make up for it. I think this is the difference between "coders" and "programmers". Many coders can tell you, down to minute detail, why pseudo-hashes were invented, how to implement one, what's wrong with them, and why their apparent performance gain was illusory. Of course, these same coders often can't program their way out of a paper bag (whatever that means). Programmers, on the other hand, won't necessarily know everything about a language (but they often do), but they know how to develop programs. They know when to optimize, when not to optimize, when to break rules, and - more importantly - what the rules are.

    Having a CS degree probably means that you have studied algorithmic efficiency. You probably understand how different data structures work² You might just know that the particular graph software that you are working on would be better off using adjacency lists than adjacency matrices. By being exposed (hopefully) to a wider variety of ideas and programming languages, you bring a greater set of tools to any given language. Perl, for example, may be the swiss army chainsaw, but you are the one using Perl, not the other way around; you have to know exactly where Perl has the corkscrew hidden.

    This isn't to say that CS majors make better programmers, per se, but they have a much better foundation to build on. People who learn to program but don't study computer science³ have a great knowledge gap but often don't know what they don't know, so they sneer at those who do.

    It reminds me of a famous quote by a chess grandmaster (whose name escapes me right now) when he was commenting about Bobby Fisher's brilliance at chess. He said that he could also see the brilliant moves that Bobby Fisher found in any given position, he just couldn't figure out how to get to that position. Many of us see the brilliance in the work of Dominus, TheDamian, or merlyn, but if you read the above post again very, very carefully, you might get a glimmering of how to reach their positions.

    Cheers,
    Ovid

    1. To be perfectly fair, I'm just learning about many of these things myself. I realized that one of my greatest weaknesses as a programmer is lack of knowledge of algorithms, so I'm trying to make up for. I have Mastering Algorithms with Perl sitting beside me now (as if you couldn't tell :)

    2. Knowing about data structures is at least as important as knowing about algorithms. And when I say data structures, I'm not talking about something as trivial as an array of arrayrefs of hashrefs or anything like that. I'm talking about deques, stacks, doubly-linked lists, etc.

    3. When I say "study computer science", I don't necessarily mean "at university". There are plenty of excellent programmers out there who know "computer science", but never went to school for it. We can learn anywhere.

    Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.

      While it's hard for me to say how useful a CS degree would be (high school dropout 'cause of Math of all things... ), I don't think by any means it's a necessity. I've met plenty of CS Majors that were bigger hacks than Danielle Steele.

      I don't think anything is a replacement for experience (and books). With the abundance of computing power today, it's really easy to churn out bloated code that merely functions. This has it's place in some limited situations, but it's also why even though PC's are 20 times faster than 6 years ago, the actual performance gains lag far behind. (Windoze anyway). On the other hand, "Premature optimization is the root of all evil."

      Slightly OT, I think the fundamental picture of PC Computing is lost on many a college student. I think a great project for someone new to computing would be to have write a game or some similarly complex simulation on an old 386/486 (or something with constraints) that was way too ambitious to actually run on such an old system.

      They would get their hands dirty. Once they got it running (slowly), they'd be forced to look at the efficiency of their algorithms. Once that was tweaked, they'd have to turn to look at the operation of the system itself for further speed, then finally, compromise features. I can only speak from my own experience but these are issues that come up quite routinely in the programmers line of work and are hard to teach from a book.

      I also think every programmer should do some assembler, at least for awhile. While it's tedious as hell, it gives you a great feel for what is actually going on under the hood.

      my $two_cents && 'Happy Holidays';

      -Lee

        First, let me say this is not a rant at shotgunefx. I replied to this post because it hit several topics that I wanted to touch on. I don't think anyone disputes the fact that college systems turn out an inordinate number of hacks, whether CS or literary. I also doubt that many would dispute that there are a goodly number of bad CS and Literary university programs.

        However, some of these examples listed above actually represent the basics of any decent CS curriculum:

        • CIS students on a systems information track usually have to write a multitasking operating system simulation. I had to do this in Advanced Operating systems.
        • <OLDFART>I was in college from 1983-1987. When I graduated, we still had IBM PC Jr.s in the PC labs and an IBM 4341 mainframe with 8MB of core memory. Do you think that the scope of our assignments were limited because of the hardware constraints? Mind you there was no such thing as CPAN back then, we had to write everything from scratch using the quaint data structures Ovid mentioned.</OLDFART>
        • Students in the systems information track were also required to take Compiler Construction and Design. I was exempted from this because I requested to take a graduate course in Artificial Intelligence instead. My project was a 3d tic-tac-toe game on a 5-by-5 cube. with graphics.
        • Assembler was required for all CS majors and was a prerequisite to Data Structures. Digital Logic, required for systems information, also provided valuable insights on how computers work.
        One of the points I'm trying to make is that universities are a lot like computers: Garbage in, garbage out. Those that apply themselves and learn the required material will benefit from a college degree.

        Colleges do provide the opportunity for real hands on (paid) experience for their students, it called co-op. I had one friend that worked with the local Corps of Engineers and two at QMS (Quality Micro Systems) R&D. One is currently upper management at Adobe.

        People should also consider the fact that most intelligent college students do more than just attend class and do homework. Some work, have families, belong to professional organizations and also find time to further personal projects or research as well (computer related or not).

        Here are some interesting statistics lifted from here:

        Table 1. Highest level of school completed or degree
                 received, computer programmers, 1998
        
            Level completed                                  Percent
            ------------------------------------------       -------
            High school graduate or equivalent or less          10.6
            Some college, no degree                             20.5
            Associate degree                                    10.2
            Bachelor’s degree                                   45.3
            Graduate degree                                     13.4
        
            About 3 out of 5 computer programmers had a bachelor’s
            degree or higher in 1998 (see table 1). Of these, some hold a
            degree in computer science, mathematics, or information
            systems, whereas others have taken special courses in
            computer programming, to supplement their study in fields
            such as accounting, inventory control, or other areas of
            business. As the level of education and training required by
            employers continues to rise, this percentage should increase
            in the future.
        

        --Jim

      Interesting. When I read mandog's post my first interpretation was "CS doesn't teach people how to program" and I agreed with it.

      Because my definition of "programming" is getting your code down, tested thoroughly and working properly.

      Knowing when to break things into a module, just how much you can code before you need to test it, what a good variable name is, and why. These are the things I think of as "programming". And since I haven't seen anyone try to teach them outside of "The Practice of Programming" by Kernighan and Pike and "Large Scale C++ Software Design" by Lakos, I tend to think of them as things you learn through experience.

      Picking algorithms, mapping out data structures, choosing an overall program architecture that works with everything else. I think of all these things as "Software Engineering". In a way they're easier to learn. Most are things that people can measure easily (e.g. testing the performance of various sorting algorithms). Much of it has a strong scientific basis and there are a million books about it. It's covered in every CS curriculum.

      I don't think you can be good at developing software without both. The two parts are like the difference between architects and carpenters. One can tell you what to do, the other how to do it, and you aren't going to get a good building without both.

      I've got a Computer Engineering degree (not quite CS - but the only relevant difference was that I had EE classes instead of electives, and a few extra semesters of math) and I must say that it didn't teach me anything about programming. Professors lectured on data structures, analysis of algorithms, language syntax, etc. But nobody ever tried to sit a class down and say "this is how you write code".

      Nobody ever mentioned that you shouldn't write 2000 lines of code, then see if it compiles. And I saw CS students just about to graduate do exactly that. People in their last semester, with good grades, who didn't know how to break a C program up into more than one .c file and still get it to compile, much less use multiple files to make the code more reuseable.

      This is a very real problem. Did anyone else go to a school where the CS department didn't offer a class, or even a lecture on debugging? Debugging isn't a big research topic. People don't write theses about whether debuggers are more efficient than print() statements. It won't make a professor's career. But you can't be a professional programmer without it.

      You can't be a good professional without the theory of algorithms, different development cycles, a good gut feel of what happens when someone makes a O(n^2) algorithm, etc. CS is where you learn that. I'm just not sure that it's "programming".

Re: (OT?) Usefulness of CS
by mrbbking (Hermit) on Dec 25, 2001 at 01:28 UTC

    Without understanding *how* software works (i.e. having studied Computer Science), it's possible to write software that works - that accomplishes the task.

    print "Hello, world!\n";

    Without understanding the mechanisms of drama and storytelling, it's possible to tell a story.

    I was hungry. I ate an apple. I'm not hungry anymore.
    Now, I'm not saying that a *degree* in Computer Science is necessary for quality software. Neither am I saying that a degree in English is required before one can write a great (english) story or novel.

    The key is the study. Whether achieving a formal degree or not, study improves practice.

    So, yes, I agree that Computer Science is as useful for writing good software as the ability to Read Critically is for writing a good story. Whatever you do, study how others do it in order to improve!

    ...or were you being facetious... :-)

Re: (OT?) Usefulness of CS
by jlongino (Parson) on Dec 25, 2001 at 08:00 UTC
    I think your analogy could be better. While I can understand trying to compare/contrast good software to a good story, I can hardly agree that the same can be said for computer science and literary criticism. Now if you had said:

    A computer science degree is as useful for writing good software as a literary arts degree is for writing a good story.
    I could agree wholeheartedly. Both lay a foundation that is necessary to adequately understand and excel in those respective fields. To excel in either field does not require a degree, but it does require a fundamental knowledge base.

    A person with either degree has demonstrated that they have met the minimum requirements necessary to obtain that fundamental knowledge base. They have at least been exposed to those fundamentals. The same is much more difficult to assess for someone without a degree.

    As the others have already said, having a degree doesn't necessarily make one individual smarter or a better programmer/author. But it does show to prospective employers that they have been exposed to the fundamentals.

    BTW, I ++'d every node in this thread (including the original one) because they stimulate thoughtful discussion. The sign of a good Meditation.

    --Jim

Re: (OT?) Usefulness of CS
by Anonymous Monk on Dec 25, 2001 at 02:45 UTC
    Actually I have a degree in English and make my living as a Perl programmer (at the moment at least). I fully agree with Ovid's comments. I've found that both the smattering of Lit-Crit I endured in what is the modern English degree, and the smattering of Computer Science I had before I realized that I couldn't cope with teh amount of pure-mathmatics that it required, have improved my skills drastically at both writing and programming. More importantly it has increased my ability to recognize both, and since 90% of learning is recognizing brilliance and it's application this is the best benefit. Then again having met both English majors who attempt to write, and CS majors who attempt to program, your milage may vary.
Re: (OT?) Usefulness of CS
by Nomad (Pilgrim) on Dec 25, 2001 at 14:51 UTC
    Having suffered both, I have to disagree with the majority of posters in this thread. Literary theory, at least as it's taught by most universities, is totally and utterly useless. It relates to absolutely nothing. Semiotics, decontstruction, Freudian, etc criticism is as much about writing as a glass of freshly squeezed orange juice is about SCRAM jet design. There is ample proof of this, not in the least the fact that most English majors can't write to save their nuts. Creative writing/journalism classes/workshops, though, they're another matter. As for CS, in my course they were passing people who didn't know what 'instanciation' was, who didn't know the difference between a class and an instance variable. The staff weren't much better; I had tutors who had never written a program that worked, ever. Pah!
Re (tilly) 1: (OT?) Usefulness of CS
by tilly (Archbishop) on Dec 26, 2001 at 01:42 UTC
    I think that the parallel is pretty good.

    First, it is trivially true that degrees in a subject are not a good indicator of having really learned it. As Biker pointed out, that is true in both CS and literary criticism.

    Secondly I think it is true that mastery of the current research in either, particularly of the current fads, is both not necessary to producing the product (be it literature or programs), and I think that a survey of noted professionals of either topic would back me up.

    However, and this is a big however, I suspect that it is hard to impossible to find a good author who has not thought long and hard about the writing process, and I have never to the best of my knowledge met or heard of a good programmer who has not thought long and hard about the programming process. And that thinking inevitably includes exposure to and thinking about the academic study of the topic in question (programming or literature).

    So I agree with the thesis in several ways. I don't think that degrees indicate knowledge, I think that academic fashion can and does depart from what is useful for the practice, but practitioners are well advised to understand the fundamentals of the academic theory.

Re: (OT?) Usefulness of CS
by Nitsuj (Hermit) on Dec 26, 2001 at 01:30 UTC
    A few things

    Computer science is about more than programming. It's about algorithms and theory and a great many things.

    Here are some examples:
    -Can you write a Turing machine?
    -Can you solve anything meaningful with one?
    -Can you calculate big-O and little-O
    -Do you know what they are?
    -Have you ever written a device driver?
    -Have you ever written an operating system?
    -Have you ever implemented a network socket by hand?
    -Can you name more than one AI/ANN algorithm?
    -If asked to, could you convert between numerical bases?
    -How many languages can you program in?
    -Can you name at least 3 different types of automata?
    -Did you understand that last question?
    -How many different TYPES of languages do you know?
    -Have you ever written a compiler of any sort for any language that resolves to machine code?
    -Can you calculate a natural cubic spline?

    You'll touch on almost all of that in a bachelors program in CS, and you'll cover a lot of things that I didn't discuss that you might not even see the interest in, but are quite important. Most of that is pretty important for really SERIOUS programming. It doesn't stop there either. Every office, lab, and cube at the company that I work for has multiple bookshelves.

    This isn't to slam on your point of view, but I know that the content of a computer science degree is more than people seem to think it is.

    Not only that, but it is also about a HARD SCIENCE, it isn't just about programming.

    This isn't to crack on your abilities or anything like that, but you don't go read a book on psychology and become a psychologist. You don't pick up a book on first aid and start a private practice. You don't read an o'reilly book and become a computer scientist. There's plenty of good coders out there who do what they do well without the benefit of a degree, but EVERYONE has something to gain from one.

    To add to this. I would like for you to consider what a person with a degree in computer science might be asked to do.

    1) Control hardware. This is a new device, designed in house. There is no library for it. You can't go to CPAN to get some code. You can't post for help since nobody knows this hardware exists yet (unless you break your NDA). You can't find a snippet somewhere, or an O'Reilly book (though they do rule).

    2) Implement a communication protocol. Come up with what messages will look like in the protocol. Parse them from binary.

    3) Create a data structure to hold meaningful data in. No preimplemented hashes. No stack snippets. It's a tree that there is no library for to be sorted into a file type that nobody has heard of before.

    I hope I haven't offended anyone, but one could see where someone who has taken a lifetime of studying and reaped the benefits of it could take offense. I am not that easily offended, but I know a lot of people who prefer not to open their mouths rather than speak their mind.

    Just Another Perl Backpacker
Re: (OT?) Usefulness of CS
by hsmyers (Canon) on Dec 26, 2001 at 05:20 UTC

    If I change the proposition to

    A knowledge of computer science is as useful for writing good software as a knowledge of literary criticism is for writing a good story.
    Then I would wholeheartedly agree! In fact I would go so far as to say that it is not even arguable—but then again I did cheat, I changed the basis for the discussion! Now if we return to the original, then things are a bit different. If we look at the first clause, then the question becomes is this thing called 'computer science' useful in the task of 'writing good software'. And that is not an easy question to answer, at least not without making some assumptions. For instance, do we mean the academic thing called 'computer science' as in a degree in same? Or do we mean the entire body of knowledge about same? For that matter does the noun science limit the subject? Should the word 'art' have been used? What is the difference between the 'science of computers' and the 'art of computers'?1 The question tree quickly spins out of control because the proposition as stated isn't decideable.

    However, since no one else posting here has let that get in the way, I'll go along and make a stab at an answer—hell, why let a little thing like 'undecideability' get in the way?

    If I assume that a degree in computer science and a degree in literary criticism are the stand-ins for the original statement, then I still have to agree. I say this without even having to deal with the value of either. No matter how bad the academic scene may have become, I doubt that it is possible for someone to gain a degree and truly wind up knowing less than when they started. And that is what it would take for the possession of either to be less than 'useful' in the pursuit of the assigned tasks. Necessary? No, I didn't say that, just 'useful'. Any knowledge at all from such a source would be in addition to that already had. So useful? Well of course!

    1For a extremely good discussion on this question, see Computer Programming as an Art by Donald E. Knuth. In Literate Programming, Stanford CA, Center for the Study of Language and Information, 1992. 0-9370-7380-6

    –hsm

    "Never try to teach a pig to sing…it wastes your time and it annoys the pig."
Re: (OT?) Usefulness of CS
by Steve_p (Priest) on Dec 26, 2001 at 05:06 UTC
    Being a non-CS grad, I'm finding I need to defend the MIS crowd a bit. I honestly think its a mixed bag on what you get. I know people with Music majors that do better than CS grads, while there are several CS majors that I know aren't worth the money they are getting paid.

    I'm a bit unsure of Mr. Mandog's thesis. If you ask any good author what they do in their spare time, they'll say "Read." That's because without having an understanding what is good or bad, it is difficult to be a consistently good author.

    Programming, on the other hand, may be different. While I agree that a strong CS background will give most programmers a strong background for their careers. Like the a previous node regarding Design Patterns, I don't believe that many universities give their students enough practical experience to make proper use of their theoretical knowledge. I recently ran across a young programmer that was trying to write a SQL parser in Perl to get the column name from a SQL statement to put on top of the columns of a spreadsheet. My first response was, "Why don't you just type them?" After finding that this was an impractical solution (at least for this programmer), I asked, "Why don't you just fetch using a hash and get the column names from the keys for the hash?" He's thinking about that, but in my heart, I know a parser is going to be built.

Re: (OT?) Usefulness of CS
by FoxtrotUniform (Prior) on Dec 27, 2001 at 05:35 UTC

    First of all, taking this at face value, I think you're comparing apples and oranges. Computing science is about creating software. Literary criticism is not about writing stories, it's about appreciating and understanding the literature that's already there.

    Now, since I read this as a veiled attack on computing science, let me respond to that.

    A good grasp of computing science is absolutely essential for a serious programmer. Notice that I did not say that a CS degree is essential; I'm talking about concepts and understanding, not paper credentials.

    CS, as distinct from software engineering, is about the theory of making computers do exactly what you want them to. That means stuff like big-O notation, algorithmic analysis, a proper understanding of the various paradigms of programming (as opposed to: "Object oriented? You mean Java?" and suchlike), and the theory of all the "practical" aspects of programming. You can pick this stuff up from books, probably even from experience (which is how it was done originally, of course), but the easiest way of getting it is by taking a CS degree.

    A programmer with a good understanding of CS will not spend hours trying to save two cycles in the inner loop of an O(n^2) sort; he will spend twenty minutes replacing the bubble sort with heapsort. For that matter, he won't spend hours trying to re-code an exponential-time algorithm as a polynomial-time algorithm if the problem is NP-hard (well, not unless the object of the exercise is to prove P=NP). A "self-taught" programmer with no grasp of CS might design and set up a database, but won't be able to normalize it, and will end up with redundant (and probably inconsistent) data. He'll write two hundred lines of procedural code to solve a problem that could be expressed in ten lines of functional code... or two lines of declarative code. And so on.

    In short, I think you're full of it. Computer science is as useful for writing good software as a sense of plot, character, and eloquence is for writing a good story.

    See also Why Theory Doesn't Suck.

    --
    :wq

Re: (Comp Sci vs. Literary Criticism) Usefulness of CS
by buzzcutbuddha (Chaplain) on Dec 26, 2001 at 20:36 UTC
    I studied for an English Degree but I work as a computer consultant because the current model of studying English is abhorrent and the modern field of literary criticism is worthless to prose writing. Frankly, I would venture that the majority of good authors didn't spend time in academia studying literature. ‘Oh yes, the use of the moon in this piece shows a tie back the Freudian notion of wish fulfillment, which ties back to blah blah blah….”.

    The best writers are not in their Ivory Towers studying literature; they're out living the life they're going to write (Hemingway, Jack London, etc). This does relate to programming, that the people we really emulate are those who actually put their skills to work (Larry Wall, Merlyn, et al).

    Programming adds another angle though. There is more need for architectural skills and a deep understanding of the underlying concepts to move into the advanced fields of the computer industry. Being able to write little scripts and "quick and dirty" programs will get you to a point. There will come a point though where you will be at a crossroads in your career, and you must decide to move into more deeply technical matters, or start honing your business skills, and hiring someone else to deal with the deep technical matters. A fundamental understanding of the structures, constructs, and concepts that make up the field in which you are working is vitally important if you want to move into the deep technical matter.

    It's only when you begin to understand that your code begins to take on a quality of elegance.

    To take one step further, the concepts of Computer Science are available as technical jargon shortening communication with peers. If you have two peers educated in Computer Science together discussing an issue, and one says 'I was originally going to represent this as a linked list, but realized I needed to track both ends so I used a circular linked list instead' the other will understand the concepts involved.

    To go one step further, remember that Computer Science is a SCIENCE. Think of chemistry. There were chemists and physicists who were able to accurately theorize elements that would show up on the Elemental Table before they were discovered. And a Chemist may not be able to create a certain product X even if he tries all day long, but he is accurately able to predict that X will help him synthesize Y. His inability to produce X does not devalue his work, because it's the theoretical that he's dealing with.
    Computer Science is about the theory of why creating a binary tree is important, how it should operate, what features it should exhibit, and what limitations it should abide by. Without this theoretical knowledge, we would not be where we are today, with tools like Perl, etc.

    Anybody can follow a procedure and mix chemical X with Y and that doesn't make them a chemist.

    Many of the nodes in this discussion so far have made a point to say ‘No, because I’ve met Computer Science majors who can’t program their way out of a paper bag.’ But this shouldn’t be taken as an indication of Computer Science as a whole. That phenomenon is not endemic to Computer Science, but throughout all fields of human endeavor, especially those that value and trade in theory.

    And that’s perhaps the issue that we all have to deal with. You take an 18 year old child straight from High School, stick them in the Ivory Tower with the other sheltered academics to learn rote theory, and then thrust them into the business world where your manager with an MBA and Microsoft Project fixation is not going to care if you use a merge sort, bubble sort, or quick sort. We (and even I am guilty of this sometimes) then mock these people for their inability to adjust. Maybe we would be better suited if we returned to the notion of Apprentice, Journeyman, and Master Programmer, and that you can only go get your computer science degree after a few years of appreciable real-world experience, and tutelage at the feet of someone wiser and more experienced.

    whew. That was quite a bit to come out all at once. And I should note that I am just starting in my long path towards getting an eventual Computer Science degree.

    I would suggest to those who scoff at Computer Science and deride it’s value should invest in a copy of ‘Programming Pearls’ and read it cover to cover several times.
Re: (OT?) Usefulness of CS
by r.joseph (Hermit) on Dec 27, 2001 at 13:56 UTC
    Wow, what a great thread - I am sure that I will end up coming back to this one time after time, but first I wanted to offer a little bit of my mind as well.

    I believe that I am in somewhat of a unqiue position among those who have posted on this thread - it seems many people who commented already have their degrees (or are out of school without) and in the working world. I, however, have just begun the transition from that of someone who,was educated solely by my own fruition and drive through reading and the web, to someone who just walked through the door to a great and wonderful new world that is a CS education - just this past September I entered the CS program at CP:SLO.

    The reason I wanted to comment on this thread is multi-faceted, and I will make the concession that my views may in fact be clouded by foresight whereas many of those who have already commented have a great amount of hindsight to offer, but I will try my best anyway.

    First of all, I see programming as only a very, very small part of CS as a whole, and I think that anyone who knows what is taught in today's colleges will agree. As a matter of fact, as I was in the "advanced intro" class at CP, I am basically finished with the classes that focus solely on programming. Now, this both lends credence and at the same time disputes social_mandog's arguments. First of all, like Ovid said, literary critiscm can be useful: while most (I say most, and will explain later) CS programs offer the student only a basic programming education, this education is supplemented because throughout the entire course of your study, you will be required to use the knowledge given to you in those programming courses for an inifite number of different things; and as you do, you learn more about technique and programming in general.

    Technique is another thing that I would like to comment on, because as social_mandog implies, a CS degree really doesn't lend anything to good software. Now, what follows is a personal narrative, but I hope that you can glean my meaning from it. I have been programming since I got into high school just about, so nearly four years; four years of untrained, self-directed learning in the field. Of course, four years is defintely quite a long time, and I went into college expecting to be completely on top of things, especially in my programming class (the "advanced intro" one I mentioned early). I could have never been more wrong. The professor of that class is one of the most incredible people I have ever met: major in english, masters in math, Ph.D in computer science. Having a major in English (something that he recommended all CS people do is not take a major in a related field but instead in one such as English, and after taking his class and getting to know him, I can see why), he is one of the most articulate and eloquent people I have ever met. The most interesting thing about him was how that translated into his code; in class, if you missed one sentence you were lost, because each one carried so much weight, so much depth. It was incredible, then, to look at his code, and to analyze what looked so simple, and yet after reading it turned out to be so complex, and so brilliant. From his class, I learned more about programming than I ever had in my life; technique, style, efficeny, grace, and many others. Sure, you can read as many books as you can buy, and you can glare at millions of lines of code, but important things such as coding grace and beauty come from practiced guidance, something that you can only get from a CS major.

    Now, here is my main little...thing...that I wanted to say :-). As I said, I have just entered the world of computer science, and I see a couple things. First, I do realize that a CS degree may not focus heavily on programming, or much at all, but what you must realize is that this will all come with time spent in the CS program, learning the things important to the field. Like jlongino said as well, "garbage in, garbage out" - those who don't care enough in the first place won't care enough when all is said and done anyway. mrbbking put it very nicely as well, with his "i am hungry" story - I have many friends who are just getting into programming, and it amazes, and more so it saddens me, because they ask me questions, and as I start to answer them with what seems to me a absolutely necessary explanation of why it works, they stop me and just say "tell me how to do it." It scares me, because you can never get very far in life if you constantly adopt the attitude of: "I don't care how it works, just tell me how to do it." A CS degree tells you, in intimate detail, how it works, and the "how to do it" simply works itself out because you already know how it works - hell, you can now invent a new way to do it! And as Nitsuj, CS is much more than just programming - looking through my course catalog, I see classes about AI, graphics, bioinformatics (really exciting), networking, systems design, and many, many other amazingly interesting topics. Of course, in each path of study, programming will be required, and you will only learn more programming as you go along, but you will be better if you know why you are doing what you're doing.

    Finally, consider Plato's Allegory of the Cave (new win) - in summary, he likens human beings without some sort of higher being or spirituality to that of prisoners, chained inside a cave and facing a wall upon which shadows are constantly displayed. In these shadows, the prisonners see a world (such as a person carrying a pot or a family travelling) and believe that it is true and real. But, a prisoner freed from his chains, upon turning around toward the source of the shadows, suddenly sees a rose not as a simple shadow on the wall, but as a beautiful (and dangerous) object, in 3D and vibrant color.

    Just as one could go his entire live as a "prisoner" chained to the wall and never know the difference, many programmers today do in fact do this. However, once "released" with the education that a CS degree brings, they now see the rose as an infintely more beautiful (and like I said, dangerous; knowledge is power, and with society becoming ever more dependent on technology and computers, the CS degree holder because ever more powerful - malevolent or not - with each passing day) object to be treated with respect and to explore furthur than would have ever been possible, had that person spent the rest of his life "facing the shadows."

    Well, again, this is just the opinion of an exicited college freshmeat^H^H^H^Hmen facing inifite opprotunites, so please take what I have said as just that, but I hope that it atleast sparks someones engine :-).

    Oh, and btw, it's late, and I hate to proofread, so sorry for any mistakes I may have made.

    r. j o s e p h
    "Violence is a last resort of the incompetent" - Salvor Hardin, Foundation by Issac Asimov
Re: (OT?) Usefulness of CS
by ignatz (Vicar) on Dec 27, 2001 at 18:10 UTC
    This feels to abstract to me.

    The foundation of any creative endeavor is craftsmanship. There are many paths that can lead you there, but in the end all that matters is what is created.

      Craftsmanship is building things well.

      But you have to know what you're building. Beyond the very small, you must have design.

      No matter how good the construction workers, they still ask an architect to design the sky scraper.

      Computer Science tries to provide the design expertise in software development.

        I think that is an over-simplification.
        If you are "engineering" a program then design is important and helpful. If you are "creating" a program then just sitting in front of a text-editor and feeling the code flow from you is just as efficient and just as "good".

        Sometimes closing your eyes and letting your hand wander across the page can produce the most beautiful, elegant lines of all.

        billybofh.

Re: (OT?) Usefulness of CS
by crackhed (Sexton) on Dec 27, 2001 at 03:58 UTC

    I completely disagree with your premise.

    Assuming that you are talking about the theory of computing, I would argue that it is essential to writing good software. Knowing the difference between an array and a hash, or when to use a linked list rather than an array, is quite necessary for writing good software. Anyone can churn out a script to accompish a given task, but whether it's well-written depends on whether or not he/she/it understands what he/she/it is doing.

    Having said that, computer science is not necessarily something learned in the classroom.

    Most of what I know (which is not a great deal ;]) I learned through extracurricular study. I play with computers for the simple fact that I enjoy it. I like coding, I like admining, I like doing stupid things like dd'ing a kilobyte of hda over hda1 and tearing my hair out trying to fix it. On an arguably basic level, I have an understanding of computer science. Without it, I could not write good software. And without furthering it, I cannot write better software.

    Attaining a degree in something is simply a means to an end, one of many. We're all free to choose a different route.

Re: (OT?) Usefulness of CS
by Anonymous Monk on Dec 28, 2001 at 06:37 UTC
    I am also, perhaps, in an unusual position in regards to this thread/debate.
    I took a CS degree (UK) and also now work as a sysadmin inside a university. I was also a coder in 68000 assembly on the AtariST before I did either ;-)
    My CS-based education is _useful_ to me in terms of knowing the theory of why certain practices, algorithms and structures are there, my sysadmin job is _useful_ to me in terms of knowing that the theory is often just not applicable and rarely applied, and my 68000 experience taught me that theory was only a begining to a solution ;-)
    The problem I find with many CS grad students is that their supervisors/lecturers have drilled into them the superiority of the theory they have learned, to the extent that the practical wall they run into when they hit the "real world" is a tremendous shock to them and is often treated with contempt and denial.
    I've had arguments with CS students on how SMTP works where they could quote RFC's and theory at me beyond my faltering old memory, but they still had no idea of how SMTP actually _worked_. Even when _shown_ email travelling from machine to machine they still denied the evidence. Theory rules.
    I've found the same in relation to algorithms, or coding in general. My 68000 background on a 512k machine (or even 6502 on a CBM 64) taught me what effieceny was, in terms of speed, size (or just ease of coding) and the tradeoff between them.
    Arguing with someone who has had 3 - 5 years of intellectual superiority thrust at them can be hard when it comes to algorithm/methodology choice ;-)
    And I think *that* is the problem - both with CS + literary/art criticism. Knowing the theory is one thing - denying the equality of experience is another.... Sometimes a second-rate plot, with second-rate structure, average acting, humdrum montage and obvious direction can still give you a fantastic, perfect, blissful, classic film ;-)

    Casablanca anyone?

Re: (OT?) Usefulness of CS
by IlyaM (Parson) on Dec 29, 2001 at 02:34 UTC
Re: (OT?) Usefulness of CS (discussion)
by deprecated (Priest) on Dec 26, 2001 at 19:59 UTC
    Wow. Talk about a troll.

    This is the precise reason there are so many shitty programmers out there. Yeah, I said shitty. Too many people feel that programming is simply stringing syntax together to produce output.

    Let me tell you, this is wrong. You arent a good programmer until you feel the code and get a sense for how it is written and how it works. There are quite a few posts around that explain the methods programmers use from being monkeys-on-typewriters-trying-to-come-up-with-shakespear to actual code-slinging-hackers.

    There are people who code with the notion that its not a science, and often these people get employed as programmers. They are not. They are the people who think:

    open MAIL, "$foo |";
    is okay to leave in a CGI.

    I think you seriously need to evaluate whether you should be programming at all, let alone attempting to describe the profession (caste, religion, whatever). I very much hope youre not planning to write a paper or publish anything with this nonsense.

    sizzle,
    brother dep.

    --
    Laziness, Impatience, Hubris, and Generosity.

      whoa dep! The assertion as it stands makes no pejorative comment on the usefulness of the degree relative to the crafts! It merely seeks to compare the two. :)

      I think it's obvious to anyone who reads that literary criticism or equivalent work experience is very necessary to good literature of all sorts. Sure, this can often take the form of working in a team with an editor who does have a degree in the field, but that an author can produce good books without it is a funny assertion.

      Ditto the lowly coder. Sure, some rank amateurs have gotten lucky. But in general the analogy stands, software will be vastly improved when a CSci type is attached to the project. Now editors and computer scientists may not be able to come up with great plots and characters or architect applications; their own prose may be stilted and clumsy, their own programming may be similarly awful; but this is not their role in the work at hand.

      They are there to look at some of the problem areas, algorithms that go haywire, sentences that lack verbs. That sort of thing. If I had to get a code review, I'd prefer a CSci major over Joe Hacker who doesn't know a bubble sort from a linked list. Similarly, if I were authoring a textbook, novel, or self help book, I would want someone with solid lit skills to be involved pre-press.

      So I'd say it's a perfect analogy, even if it is a troll which meant to cast aspersion on CSci majors and Lit Crit types.