[Edu-sig] re: College CS courses

Matthias Felleisen matthias@rice.edu
Sat, 14 Apr 2001 13:06:38 -0500 (CDT)


Alan Gould writes: 

>  Certainly CS courses used to cover all of those areas.
>  Now they appear to have become merely programming courses, 
>  and even there only within very narrow boundaries 
>  - Java and VB!

> It seems likely that we will now stop recruiting CS grads and hire job
> changers or ... 

> Thanks for your comments, they do seem to reflect the current CS trends.



Alan,

you shouldn't conclude from a single response, which comes from the .net
 world and not from the .edu world, that colleges ignore what's happening
 in the real world. Indeed, the trend to teach just Java and VB **IS** a
 reflection of this trend to accommodate the "real world". The problem is
 that it reflects the perception of fashion-prone colleges not
 history-sensitive reality.

I am a professor of Computer Science and I believe that Computer Science is
 about the construction of software. This includes many things: 

 - programming and design of programs, cross-language programming
 - specifying functions, modules, systems 
 - requirements engineering
 - integration of software packages 
 - generation of programs from specs
 - maintenance, including run-time checking of all forms 
 - software analysis (`a la soft typing in Erlang, since you're in telecom)
 - testing and debugging, test suites
 - integration with an existing OS and machine 
 - stress testing and performance debugging 

 This is a random ordering and covers the essentials. There are other things
 that they need to know, but they are best taught in a business school
 setting. 

I also believe that a CS program should dedicate the first three years of
 an education (the US assumes a four-year program) to the _principles_ of
 software construction and the last year to buzz words. Currently, it's
 almost the opposite at many places.

I have seen Berkeley's approach, and it's probably close to what you want.
 (I know about Stanford and I don't think the post from Berkeley described
 the situation properly.) I know Rice's curriculum, and I find we do many
 of the above but lack people who do a lot of software package
 integration. I know that Indiana teaches an approach like the one I
 described. 

In general though, universities and colleges have three problems with
 teaching "software construction" rather than some "stuff in JAVA:"

First, they believe that they must cater to their students. Whatever
 students want is taught. Of course, an 18-year old doesn't have a clue
 about the long-term needs of a CS career or software company. An 18-old
 knows what he did for his latest internship and that's about it. For these
 internships they use JAVA and VB, so this must be industry
 relevant. Right?

Second, professors are really paid for the research they conduct. Like
 software products, research is **feature driven**; studying the process of
 software construction (I don't mean management). Trying to figure out how
 to produce software that is by an order of magnitude more maintainable
 than today's "stuff" is just barely ever rewarded. It's too long-term
 oriented. As a result, researchers focus on data structures, algorithms,
 and small programs/libraries. Few of us direct large teams of programmers
 in a software project. (My PLT SCHEME project consists of some 12 people,
 distributed over three universities. That includes one staff programmer,
 two assistant professors, and eight students. That's not a small project
 for a university, if you count software integration as a necessary
 property. I bet it's tiny compared to what you know.)

Third, we don't have the resources to teach all these topics. We cannot
 truly emulate the industrial context that (large) companies assume. We
 don't do it. We don't have the software basis. We don't have the staff to
 grade such things. How should we know how to teach it?  

For years, I have given course in which students build a product over the
 semester, exchange products among teams, get down-graded when they want to
 "purchase" an intermediate solution. When I finally got to teach it, my
 average enrollment went down from way above the average of a Rice
 sophomore course to just below. Those people who make it thru love
 it. They call it "software bootcamp" and say "it's worth its price." For
 years, I have pushed that other professors adopt a similar model and teach
 the contents and the software process at the same time. (My course is
 *NOT* our SE course.) You may guess how many did.

This summer I am moving to NORTHEASTERN UNIVERSITY in Boston. This is a
 "co-op" university where students spend one year in industry (in addition
 to their summers) and then come back to study more. This is like the
 programs of "Technische Universitaeten" in Germany, and I know that it
 taught me a lot about the real world. (It even induced a switch in career
 plans.)  I suspect that these kids know more about the requirements of a
 true job, but I am afraid that they too will confuse the use of JAVA or VB
 for their latest co-op period with the use of insight into software
 construction.

What we need is that people like you come to universities and speak
 out. You must tell professors and students, time and again, that focusing
 on JAVA and half-baked OOP isn't going to be it. Tell them to start with
 Scheme or Python. Tell them to bring Java in when students know how to
 program. 

They won't believe this if they hear it from the few colleagues who care
 about the process (not management). They may just believe it if industry
 representatives like you say so again and again.

-- Matthias

Matthias Felleisen
Professor of Computer Science
Rice University

For a new way to look at the world of high school computing, see 

 http://www.teach-scheme.org/
 http://www.htdp.org/

"Computer Science is no more about computers than astronomy is 
 about telescopes."	
                                             -- E. W. Dijkstra