Thursday, July 31, 2008

Brain Rules and Computer Science Education

I just finished reading Brain Rules by John Medina. The last page of the book inspired this post, but let me first tell you what the book is about.

The book examines different aspects of our brain and derives from them some principles and suggestions on how to improve better behaviors. None of these suggested behaviors are surprising at all, but Medina (very entertainingly) explains why they are good for us given the brain's structure and describes some research that validates these claims. For example, chapter 1 tells you that doing aerobic exercise actually improves your mental capacities. Another chapter talks about the need for sleep and another on why stress is bad. Two chapters talk about memory (short term and long term), explaining why repetition of new knowledge can greatly improve its recall. Another chapter explains (finally!) that men and women are different (women are apparently much more complex than men, in case you need another shocker), and another stresses that we never stop learning in life (or at least, we have the capacity to).

At the end of every chapter, Medina asks how we can apply these nuggets of knowledge to develop new methods for education. In the last chapter, he explains why the unique aspect of medical schools make for well-trained doctors as well as curious researchers. The point is that in medical school students are learning the theory of medicine at the same time they are practicing it (in increasing doses as they advance in the program). Hence, they are able to apply their knowledge immediately and, after observing patients, ask novel questions that lead to new research and discoveries. Medina suggests that the same principle can be possibly applied in other disciplines.

I think Computer Science education can really benefit from such a model. I obviously don't have all the details worked out here, but imagine that every Computer Science department (or set of departments) had a software company on the side. As students go through the program, they start getting tasks from that company to build software for it, participate in designs, see how product decisions affect engineering processes, and even see some company politics at work. These companies will be real (they'll need to pay for these services) -- they'll generate real software for real customers.

I even have an initial idea of what these companies can do. Given that these companies are likely to have challenges competing in the market, they need to address a niche of customers who are willing to put up with lousy service, mediocre products and delays in software release cycles. I.e., customers who have nowhere else to go!

These customers are called scientists. Scientists are always complaining that they don't have the right software tools to do their science. Real companies typically don't find scientists to be an appealing set of customers because, well, they don't really want to pay up and they often have very specialized needs. There are huge challenges in creating good software tools for scientists, and university-affiliated companies could be an excellent place to develop this software, while preparing the next generation of computer scientists for the real world.


Christan Grant said...

Similarly, some vocational school with culinary programs allow the students to cook lunch for their classmates. Of course students could always fast or bring a lunch but the same basic principle it applied here.

I do think individual classes should have a sort of "running project" based on a scenario. At the University of Florida at least one undergraduate class, that I know of, has done this. I found it also exposes gaps/assumptions in the material learned.

Kevin Arthur said...

Regarding computer science, several schools already have "co-op" programs where students alternate school terms with work terms at participating companies. It's a pretty good system that lets you gain experience (and money) before you graduate. The University of Waterloo is one of the pioneering institutions in this (and it's where I got my CS degree from).

Tony said...

I second Waterloo's co-op as an example. Furthermore it seems that Computer Science students that excel also happen to be the type of students who work on their own projects outside of school.

Though it should be noted that Computer Science is not about building software (although that's a common application of the former). The idea of a "software company as a class project" might work for a vocational "JavaSchool", not so much at Waterloo (or the like), where CS is really Math/Science heavy.

Term Papers said...

These posts keep getting better and better keep it up...!