Given that many high schools have computer science programs—perhaps more here in Ontario than in the United States—what should they be teaching, versus what should be taught in CS1&2 at university? If in CS1, we’re teaching the basics of computation … , then what are we teaching in high school? You spoke of the difficulty in trying to change high school curricula in the United States, but hypothetically, if you had the power to, how would you structure the CS curriculum spanning both the secondary and post-secondary levels of education?

I put this comment aside over a month ago to think about, but I still don’t have a good answer. I don’t even have a good answer for “what is computer science?” though I earned my PhD in it 28 years ago.

Note that the “how would you structure the CS curriculum” question is quite different from “what should computer programmers learn first?” The question is more about the shape of the whole curriculum: What does everybody need to learn? What do the college-bound need? What do the future scientists and engineers need? What do the future computer programmers need?

As with other fields (such as statistics or math) there is a big difference between what the expert practitioners need to learn and what everybody needs to learn. The best early training for a mathematician is quite different from providing the math skills that the average person needs. I would expect it to be the same for computer science. I think that I could do a decent job of designing a curriculum to lead an interested teen or pre-teen into computer programming and give them a good foundation for becoming a computer scientist, programmer, or engineer. In fact, I did design a university-level computer engineering curriculum 25 years ago and helped tweak it for the next decade. More recently, I helped design a bioinformatics curriculum (which still needs tweaking: it is overloaded with chemistry courses, thanks to an inflexible pre-req structure and biochem-last design by the chemists).

I’m less certain of my ability to design a curriculum for those who don’t want to learn to program. I have yet to be convinced that programming skills can be taught. They can certainly be learned, at least by some people, but existing lower-level computer programming classes seem to act more as filters for selecting those who can learn than ways to change people without programming skills into competent programmers. Of course, I see much the same thing in any activity that calls for clarity of thought (proofs in mathematics, writing research papers, debugging programs, designing experiments, … ).

Why should everyone learn some computer science anyway?

Computers are ubiquitous in modern society, so everyone should have some awareness of how to use them, what they can and cannot do, and the risks involved in using them. This is the argument for “computer literacy” and is essentially the same argument as that for universal driver’s ed. It is a good argument, and it can be met with essentially no computer science content, just good consumer education.My son’s high school provides this level of computer training in their 9th grade core course (which also includes health education). I don’t know what is taught, since my son refused to take the mandatory course. Luckily the school has a credit-by-exam mechanism in place, and he took the final exam to get credit for the course. The resulting B will undoubtedly lower his GPA, but who cares—it’s better than having him sit impatiently through a class in which he would learn essentially nothing. (The B resulted from such dated questions as the correct ratio of breaths to chest compressions in CPR—which is now taught as chest-compressions-only.)

Computer programming teaches clarity of thought. To program, one has to be very explicit about what you want the computer to do—vague hand waving doesn’t do it. This is the argument usually used for requiring proof-based geometry classes. Just like for geometry, I don’t quite buy the argument. It is certainly the case that both computer programming and proofs in geometry require clarity of thought and good problem-solving skills, but it isn’t clear that they teach these skills. They do test the skills, in ways that most high schoolers have not previously been challenged, so they are valuable for helping polish the skills.I believe that computer programming is better than geometry for developing both problem-solving skills and precision thinking. For one thing, the computer automatically checks many of the details and provides weird behavior when assumptions are violated, giving students much more feedback about their work than even the most diligent of geometry teachers. The problems that can be addressed in a beginning programming class are also much more likely to be interesting to high-school students than geometric proofs are, increasing the incentive to put in the effort needed to solve hard problems.

Although programming may not teach clarity of thought, it has a valuable role in helping students explore the limits of their own ability to do detailed analytic and synthetic thought. For the average student who has no inclination to go into science or math, I would require one of geometry OR computer programming. For those on the track to a STEM career, I would require both. The programming course should be taught at about the same point in the curriculum as geometry is usually taught: after students have had a little algebra and are familiar with one notion of what a variable means.

The high school my son goes to has no computer programming classes, though they have a decent math program that includes AP Statistics, AP Calculus AB, and AP Calculus BC.

For this level of instruction, I would want to use a language that imposes as few extraneous requirements on the students as possible, exposing the basic concepts in simple ways. I would also want the assignments to be very inspiring—fun even for those who have no particular desire to learn to program. The Scratch programming language and the BYOB extension to it are good tools to put in the center of such a course. I believe that this is the level that the new AP Computer Science: Principles course is aimed at (see my previous post on that course). Quite frankly, it is not a college-level course, and giving it AP credit strikes me as ludicrous: like giving AP credit for high-school geometry.

Computer programming is a useful and well-remunerated vocational skill. If one views programming as primarily a vocational track, then courses that teach HTML, CSS, Javascript, PHP, Adobe Flash, and other currently common tools for building web sites are appropriate. Such courses often teach no programming, or teach programming in a way that does not develop clarity of thought or provide a useful foundation for further study. Cut-and-paste copying of other people’s program fragments is usually all that is taught of computer science. The students are usually (self-)selected for skill in visual art and graphics design, rather than for precise thinking.

My son’s high school has two courses that sort of fall into this category: Web Design and Computer Animation & Graphics. The courses use WYSIWYG tools and do not delve into how things work very much. There is definitely a place for this sort of training, just as there is a place for teaching engine repair and machine shop techniques. Indeed, the courses are part of the same department as the automotive shop classes.

The skills taught in shop classes and web design classes can be very useful for a future scientist or engineer, but are usually taught in a way that closes off such a career rather than opening it up.

Computer programming can be a track for a professional degree, if followed by 4 or more years of training in college. Although the AP CS:Priniciples course mentioned above could spark a student’s interest in programming, it is really not enough for those who plan to go into computer science or programming-heavy fields. I would follow it with a course in a different programming language (for example, moving from BYOB to Python), to encourage students to abstract the notions away from the specific representation in a single programming language. I would still keep high school students to fairly small projects, so a rapid-prototyping language like Python is more suitable than a language that requires substantial scaffolding like Java or C++. All that declaration of variables and compile-time type checking is very valuable in a big project, but is useless pedagogical overhead in small projects.

This second course should be at the junior or senior high school level, but is most likely going to remain in colleges for the near future, as US high schools are not likely to hire competent computer science teachers in significant numbers in the next decade. This course is probably all most STEM students need unless they get into a computational branch of science or engineering.

Once students have gotten the basics of variable assignment, iteration, recursion, and simple data structures, they are ready for abstract data types, information hiding, and the rest of the core programming skills. These should be first-year college courses (currently they are more likely to be 2nd or 3rd year courses). Those few who want to become computer scientists (as opposed to programmers, computer engineers, bioinformaticians, … ) should go on to take a fair amount of computer theory courses, while those wanting to become programmers should take courses in which they learn useful graph algorithms, dynamic programming, numeric optimization, documentation skills, and other advanced programming skills. All should learn at least 5 different programming languages, from at least three different schools of thought on how programming languages should be designed (that is not 5 slight variants on block-structured languages).

This week my family took a mini-vacation to San Francisco. We followed our usual strategy of taking the Highway 17 Express to San Jose, then the Caltrain up to San Francisco. Our favorite hotel (the Grant Plaza Hotel in Chinatown) did not have any rooms, so we had booked a room in a different budget hotel, the Hotel Bijou near Union Square. Because of the hotel’s location, we took the N-Judah streetcar instead of the 30 Stockton bus that we usually take from the Caltrain station. After checking in, we took the N-Judah line again out to Golden Gate Park and had lunch at Park Chow, a popular restaurant for park goers. The food was pretty good standard American fare, but seemed a bit over-priced (our other meals in San Francisco were better and cheaper).

After lunch went to see the California Academy of Sciences in Golden Gate Park. I have not been there for a while and wanted to see the new building. I m not a big fan of modern architecture, and I was very sorry to see the beautiful old buildings for the de Young Museum and the California Academy of Sciences torn down. Neither of the new buildings is particularly good looking though I’ve been told that they are more functional.

The one good feature of the new California Academy of Sciences building is the green roof.

The green roof of the California Academia of Sciences as seen from the viewing terrace on the roof.

Inside the acoustics are terrible, with large spaces that echo and make the place very noisy. The atrium has an intricate industrial look which is moderately interesting, but lacks the gravitas of the old lobby. I’ve never cared much for bare concrete, and the interesting parts of the atrium are at the ceiling, which few people look up to admire.

View down into the atrium of the California Academy of Sciences.

The exhibits are pretty much as they were before the remodel, except for noisier, and without the interesting architectural details of the old building. The Steinhart Aquarium has been improved by the remodel, inspired by the Monterey Bay Aquarium. The coral reef tank is quite impressive, and I liked the leafy sea dragons and weedy sea dragons.

I took a picture of the weedy sea dragon (despite the "no-photos" sign), but I was careful to make sure that the flash was off, as the photography prohibition is to protect the aquatic animals from bright lights.

We did not visit two of the main attractions, as the Planetarium shows were sold out and the entrance to the rainforest had a line that was taking 30–45 minutes to snake its way into the exhibit.

Overall, I have to say that I was disappointed in the “new” California Academy of Sciences. As a natural history museum it doesn’t approach my memories of the Field Museum of Natural History from my youth in Chicago, and the new architecture makes it look like it is trying to be an amusement park, but without the amusement. Even the museum store is lacking in much of interest.

There was one special exhibit for the holiday season that we enjoyed: seeing the reindeer outside.

Two rather damp reindeer were on display in the graden. It was possible to pet one of them, but we were not particularly keen to get the smell of wet wool on our hands.

We took the N-Judah back to our hotel and went out for dinner. We were planning to try a highly rated Japanese noodle place a few blocks away, but the lines there were terrible, so we went to Chaabaa Thai instead. The food was quite good and reasonably cheap (better and cheaper than lunch). After dinner we went to see the holiday decorations at Union Square, but the rain and wind made walking a bit unpleasant, so we spent only a little time in Union Square before heading back to the hotel.

Although Hotel Bijou shows free films (with San Francisco settings), we were too tired to stay up for them, so we turned in early. After a good breakfast in the morning at the hotel (included in the room rate), we split up, with my son and me going to the Exploratorium and my wife visiting various art museums, libraries, and bookstores.We took the 30 Stockton up through Chinatown and across the Marina District to the Exploratorium. That bus is the one I have taken the most in San Francisco, and it has a rather scenic route. It is astonishingly slow though, particularly going through Chinatown. The bus is always packed in Chinatown, but is empty by the time it gets to the end of the line on Broderick.

The Exploratorium has a much lower entrance fee than the California Academy of Sciences, and there is much more to do. It is in almost all ways a superior museum for children and teens (and dads). We were not able to visit the Tactile Dome (sold out—I think you have to purchase tickets ahead of time on the web if you go on a busy day). The Exploratorium has lockers near the entrance, so we stashed our luggage there for the day. Unfortunately, I left my camera in the locker also, so I got no pictures from the Exploratorium.

Although the Exploratorium was very full (more so than the Academy of Sciences), there was no waiting in long lines: there are so many things to do that people spread out fairly uniformly over the whole museum and no single exhibit had a line of more than 2 or 3 people waiting a turn to play. I think that the Exploratorium had more people per square meter, but it felt less packed, because people spread out so much more uniformly.

There were several new exhibits since we were last there, but a couple of my son’s favorites were gone (the teapot in a mirror exhibit was one he missed). I missed the bicycle powered by pneumatic cylinders, though I always had trouble coordinating the four button presses well enough to get a smooth cadence.

I was impressed by how well maintained the exhibits were. Despite the intensive hands-on use (and abuse), very few exhibits were non-functional, and those generally fairly minor ones.

The museum store is one of the best I’ve seen, though I did not buy anything on this trip.

We stayed until closing time at 5, then took the 30 Stockton back to Chinatown and had dinner at the Hang Ah Tea Room (which claims to be the oldest dim-sum restaurant in San Francisco). Eating at the Hang Ah is a tradition for us, and the food was as good as always, but there was only one waitress working and the service was rather poor. After dinner we took the 30 Stockton back to the Caltrain station, and took the Caltrain and Highway 17 express back to Santa Cruz, getting home around 10:30 p.m.

All in all, it was a successful mini-vacation, one I would be glad to do again next year. It would be better, perhaps, to go to the museums some time when school is in session, to avoid the crowds.

I think that UC is overdue for a purge at the top, calling the bluff of the executives who claim that no one would take their jobs at only $250,000. Let’s get rid of the half of the executives in Oakland, and simply not hire replacements. The dirty secret is that no one would notice any change. They are pushing paper around for their own benefit, not for the benefit of the campuses and certainly not for the benefit of the students. The real work at Oakland (what little there is) is probably being done by much lower paid staffers anyway.

Chris Newfield in Remaking the University has a strong argument that the UC executives have been systematically destroying the University as a public good, with the sole goal of lining their own pockets. Unfortunately, letters like the current one by the UC executives make his case for him.

I fear that our current president, who stands head and shoulders above the rest in lining his own pockets (his $800,000 compensation package speaks loudly here), will either cave to the administrators, or arrange some sort of “compromise” in which he cheers for himself in giving them somewhat less than they ask for. Raiding the public till (and extracting more and more from students) for himself and his friends seems built into the way he has run the University for the past several years.

Like this:

2010 December 27

I made the choice to use my real name… now I am second guessing that decision. It isn’t as though it was kept a secret; I’m sure anyone in the least bit internet savvy could figure out all they want to know about me. In rereading my posts I even realized that I started day one by writing my first and last name. The difference is that now it is so accessible. And it’s not just the name thing that worries me; the last thing I want to do is have something I say blow up in my face and ban me from doing the job that I love.

There are (at least) 3 approaches:

Use your real name and treat the blog as professional publication that you always want associated with you.

Use a pseudonym and an email address that exists only for the purpose of the blog. Never mention anything that could be used to figure out exactly who you are. Don’t tell anyone in real life about the blog. You can say what you want on such a blog.

Use a pseudonym, but don’t worry about your name leaking. You still have to be careful what you say, but it is clear(er) that what you say is not something you feel represents you professionally.

I’ve chosen option 3. Many (maybe even most) of the readers of my blog have been directed to it by me using my real name, and those who’ve come across it otherwise could probably figure out who I am in a few minutes. So, my identity is not secret, but the use of the pseudonym makes it clear that I am not speaking in any sort of official capacity for my institution. For me, this is good enough.

I have no intention of saying things on this blog that I would not say directly to people, so I don’t really need anonymity, but I also want it to be clear that these are personal reflections that should not be taken as official pronouncements of any sort. The thoughts I put down in this blog are ones I wanted to share, but are not necessarily ones I believe in strongly. In some cases I put out ideas that I would like torn apart, so that I can rebuild more sensible beliefs.

Like this:

2010 December 26

Environmental Microbiology recently published a fun, free article “Referees’ quotes – 2010” (DOI: 10.1111/j.1462-2920.2010.02394.x). The article consists of quotes from referee comments in the preceding year, many of them quite snarky. For example, there is the rejection “This paper is desperate. Please reject it completely and then block the author’s email ID so they can’t use the online system in future” and the rather depressing comment “It is sad to see so much enthusiasm and effort go into analyzing a dataset that is just not big enough.“

Read the whole set and be reassured that most of the comments you’ve gotten on your papers in the past year have been more positive.