From: Gregory Brown Date: 2005-11-24T03:57:00+09:00 Subject: Re: teaching ruby as cs intro? On 11/23/05, Matthew Smillie wrote: > On Nov 23, 2005, at 16:07, Gregory Brown wrote: > > > If CS (especially elementary CS) is all about the things that are > > going on under the hood, well... Ruby is downright horrible for that > > because it is designed specifically to seperate us from the low level > > frameworking that needs to be done to do something simple like > > something.sort > > > Computer science is about fundamental operations of the > > computer and manipulations of that... that's what makes C ideal for > > such things. > > Firstly, it's important to remember that CS is a very, very broad > topic, taking in material which 50 years ago would have been taught > in anything from Philosophy (logic) to Mathematics (combinatorics and > algebra) to Engineering (elrctronics) departments. I think that part > of your disagreement stems from what amounts to a naming problem - > part of the reason they're moving to the term "informatics" at the > uni here and a few other places in Europe. Yes. absolutely. I am in favor of splitting the naming of the topics. I interpret 'computer science' as "science of the computer" and "software engineering" as the study of engineering software, and "information technology" as the focus on technology. In my university (and many others) the traditional computer science program is exactly that, the science of computers. It is not software engineering nor IT nor informatics. > I think, though, that you're being to narrow in your definition of CS > being limited to the fundamental operations of a computer. Given > that definition, I'll readily agree that Ruby may not be a > particularly good tool to study that level of operation of a computer > (though one of the most informative undergraduate courses I ever did > was modifying an actual Real World compiler). I simply believe that CS as an amorphous concept is misleading because it does not tell you what you can expect from a program. > I'd argue that more properly, you could define CS as the study of > fundamental operations of *computation*, which you can then abstract > to any given level, whether it's the physical level of logic gates or > the abstract heights (or depths, depending on your predilections) of > the lambda calculus. I'd agree that CS is the study of computation more so than computers (thanks for the better wording!), but I do not believe this scales to practical programming. Good science? sure. Important base for becoming a good programmer? YMMV, but generally, yes. Practical programming experience? Absolutely not. > Given this definition (which is closer to what's called "informatics" > here), it's for the exact same reasons you think Ruby is a bad > language, that I think Ruby is a good language. Ruby (and languages > like it) let you focus on a particular level of abstraction without > the burdensome externalia of pointers, memory allocation, etc. I > find Ruby particularly good because it can be useful across a large > section of this set of abstractions. It can be usefully simple for > teaching things like quicksort, binary search, and the like, while > being rich enough to be illustrate (and implement) domain-specific > languages, metaprogramming and the like. Pointers and malloc, etc. are part of the science of computation. Ruby is part of informatics, and of practical programming. Domain specific languages, metaprogramming, etc are all wonderful programming examples. They're not good computer science. I believe that programming is more of an art than a science to begin with, and that a strong CS base CAN help you, but they are not necessarily inter-related, and therefore should be seperated in academic majors. (with the necessary degree of overlap) The bottom line is... if I want to learn to be a good programmer, I want a major that will help me do that. My CS major is essentially preparing me to be a good thinker and computational scientist, which has some merit, but certainly is secondary to my goal. > "In high school, you went to classes to be taught. In university, > you go to classes to learn." > > The implication is that being taught is passive, whereas learning is > active. One is done to you, and the other one you do for yourself. > By extension, what goes on in class is the *beginning* of what you > should learn, not the end. This active approach to learning (whether > in a university setting or not) is something that you will find in > anyone who excels in their field, whether that's informatics, > medicine, or fine art. I go to class in my university to get a degree, sadly. I go to ruby-talk and work to 'learn'. I fully agree with your sentiment, and though it may not have been evident in my post, I do certainly advocate students to do the legwork on their own. As far as ruby goes... I've learned plenty by doing. I'm currently working on a number of projects that are on RAA and RubyForge. I won't babble on about that though. However, you won't see much of my computer science creeping into my Ruby activity, because it simply is not relevant. I'd hope some day to do some research in computational theory, and I am doubling in math for exactly that reason, but my only point is though this background does play a secondary role in preparing me to be a better programmer, it is a primary education I seek from my institution, and I (among others) are left wanting in this area. Computer Science is not programming. At least not at the University of New Haven.