Clear questions and runnable code
get the best and fastest answer
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