Tag Archives: CS education

Pi in the Sky?

The remarkable low-cost Raspberry Pi computer went on sale today, and has apparently sold out in two hours. The Raspberry Pi is a very cheap computing device that can be the basis for do-it-yourself systems and it has been suggested that it will revolutionise the teaching of computer science in schools. Instead of boring IT, students will experience the thrill of making something themselves and will, consequently, be inspired into further studies of computer science.

This is a great development, which I wholeheartedly support – computer science teaching in schools has left a great deal to be desired. And, for sure, it is possible that it will enthuse technically-oriented students to find out more about computer science and programming. It’ll be fun and I’m sure we’ll see lots of innovative and exciting development based on this device.

Now I really don’t want to rain on the Pi parade but, I find it hard to believe that this device will have much success in convincing the roughly 50% of school students who have, up till now, shown very little interest in any kind of computer science – girls.

As the father of two daughters, I have watched them develop in a technically literate household where they had access to computers and programming advice if they wanted it. But, their view and the view of all of their friends that I talked with was that programming was for geeks and nerds (I am not sure of the difference between these). While they were perfectly competent in using computers for various tasks, they  showed no interest whatsoever in programming as they simply did not see how it could be useful to them. The social image of programmers, of course, did not help – teenagers are very image conscious and being associated with an uncool group was something to be avoided.

If anything, the Raspberry Pi may make this situation worse, especially if it is taken over by teenage boys in a class who, shall we say, may not have the best social skills in the world.  Yes, it will re-introduce programming into the curriculum but that is only one problem that we have to face. The much more difficult challenge is to be able to demonstrate the relevance of programming to the whole population – not the technically-minded subset that will surely love their PIs. This won’t happen from bottom-up  cheap devices, but will need a top-down, application-oriented approach.

I was impressed by the efforts made in Georgia Tech to try and broaden the CS curriculum and demonstrate the relevance of programming to a wide spectrum of students. I don’t know how well these have succeeded in attracting more girls to computer science but it strikes me that this is the kind of initiative we need in schools to demonstrate the relevance of computer science to girls.

Doing this is hard – I certainly don’t have an answer to the problem of making CS female-friendly. But I do have concerns that the Raspberry Pi will simply reinforce the stereotype of computer science being a geeky subject that has nothing to offer to girls.

Leave a comment

Filed under CS education

Computer science education and the real world

Enrolments in computer science degrees (in the US and Western Europe) have fallen drastically over the past few years, although I believe there has now been an increase in applicants from the low point in 2008. Part of this was a reaction to the 2001 dot-com crash but I believe that another factor is that many if not most computer science degrees are increasingly irrelevant as far as real-world computing is concerned.

There are two major areas of real-world computing that, IMHO, don’t get enough attention in computer science degrees. One is embedded, real-time systems. We are surrounded by such systems – I counted 9 in my home office alone apart from the computers (router, scanner, printer, 3 phones, 1 ipod, 2 cameras) yet some CS degrees simply don’t cover them at all and the majority probably only offer a single optional module. The other area is my own interest of large-scale systems engineering. Current large-scale systems are not built from scratch using waterfall processes but are constructed by reusing software at different granularities from program libraries to entire systems.  Requirements are negotiated and issues such as throughput, dependability and security are critical. Most courses do include some software engineering – an essential starting point for considering large-scale systems engineering but then they stop. They don’t include courses on topics such as dependability and enterprise systems architectures.

Why have we got ourselves into this state where CS degrees are about programming rather than systems? The argument I hear from my colleagues is that programming is fundamental (true) and learning to program in Java (or perhaps a functional language) and to analyse programs for e.g. complexity is all you need. This, I think, simply is a weak justification of an untenable position – that systems are just scaled up programs.  We have arrived at this state because of two basic problems with our university system:

1. It’s very hard for people in universities to keep up with changes in the world. People who were appointed 20 years ago have spent their time scaling the academic career ladder and many of them have had little or no contact with industry since they were appointed. Essentially, they have no idea what real-world computing is like.

2. People’s career in universities depends on their research. As researchers are clever people, they have derived lots of ways to publish research and so support career development. The community itself assesses the value of the research and relevance to industry is rarely a factor in this assessment. In fact, its often harder to publish work done in industry, even in software engineering, because it doesn’t tick all the academic boxes of what constitutes a good paper. Therefore, people do ‘excellent’ research in irrelevant things. Often, they are committed teachers and the research informs their teaching – but they don’t want sordid reality to intrude and actually have to teach something useful.

Of course, both of the above reasons are  (slightly) exaggerated presentations of reality but the blunt reality is that the reason why universities don’t teach real-world computing is that many of the faculty just couldn’t do it.  There may be intellectual value in a programming-oriented CS degree (as there is in a degree in Classics or Philosophy) but I believe that we must also design our degrees so that students are better equipped to make a contribution to computing as it is, rather than computing as it was.


Filed under CS education

What should we teach in CS courses

I read an interesting article today in the CACM by Bjarne Stroustrop (inventor of C++) who was bemoaning the fact that university CS courses are not aligned with industry needs and proposing that the problem should be addressed by making the first CS degree a Masters rather than a Batchelor’s degree.  He concludes that the answer is a ‘body of knowledge’ (he calls this a ‘core’+application areas) and licensing of software professionals.

While I agree with his description of the problem, I think this whole body of knowledge stuff is simplistic. What on earth is core computer science – when I started teaching CS, it was inconceivable to have a CS course without compiler theory and development. Now, hardly any courses have such things – and, in truth, it doesn’t matter that much.  Who really cares about Turing machines?  Some people who work in the software industry really need discrete maths but if you are developing simulation systems then maybe knowing about differential equations is more important.

The fact is, software is so diverse and different types of software have such different knowledge requirements (e.g. compare computer game development and database programming) that we simply cannot cover everything in a course be it a Batchelor’s or a Master’s course.

The licensing route is a slippery slope to ossification with licenses controlled by a small group of greybeards who are not in touch with modern developments (we see this in the UK in BCS accreditation of courses). It’s really not a good idea.

And the other thing that we in universities must always remember – industry is not our customer – they pay very little towards the university system. Our paying customers are students and if we offer dull and irrelevant courses, they will vote with their feet and go elsewhere. I reckon that was part of the problem for the decline in CS enrolements (some universities have faced up to this, others continue to delude themselves that it was all to do with the dot-com crash). Courses are getting better and I think that, in the UK at least, they are slowly being updated to reflect 21st century needs.

1 Comment

Filed under CS education