The Path To Expertise

There’s a popular meme that states it takes 10 years of effortful study to become an expert at something. Studies show that, in reality, the number of years varies a bit from subject to subject and from one individual to the next — but one thing is clear: Expertise takes time.

Therein lies the problem. Most students who enter college and decide to take computer science have minimal, if any, prior exposure to the subject. At many colleges, a student’s first year is primarily taken up with broad, core, required classes, so a student isn’t likely to encounter computer science until late in their freshman year, or later.

This means that colleges have 3-4 years to try to instill some meaningful level of expertise in students. That’s simply not enough time. Compounding the problem, many students are hoping to go out and get internships after their first year of study. This leads to a series of unfortunate, yet inevitable compromises.

Computer science departments are forced to choose: Do we focus on foundational skills and the big picture of what computer science is all about, or do we focus on technical training to try to produce graduates who have skills with immediate appeal to companies? Talk to any computer science professor and you’ll hear plenty of stories of bitter, divisive debates about this very issue within departments and across the entire community of computer science educators.

How do other departments solve this problem? Many domains are able to leverage the significant number of years that students have already invested in grade school in English, math, and science. For example, most students who go into mechanical engineering have had the opportunity to learn math up through calculus, and have learned physics, as well. Imagine how many years it would take to become a mechanical engineer with absolutely no prior math or science instruction before college and you’ll begin to appreciate the problem that computer science departments face.

Also, many other disciplines require significant post-graduate study and apprenticeships in a way that computer science does not. Arguably, computer science has one of the greatest disparities between the demand for expertise and the level of expertise that is actually attained before one goes into the business.

Universities have neither the time nor the resources to accomplish what we demand of them with respect to computer science education.

But wait a second…computer science is an engineering discipline. Shouldn’t computer science benefit from kids’ math and science education as much as any other science/tech subject? Unfortunately, no. Calculus, the pinnacle of grade school math education as it is currently structured, is the least relevant type of math for computer scientists. Computer scientists need a strong background in discrete math, a topic poorly covered in grade school, if at all.

Meanwhile, as universities are struggling to adequately train their computer science students, they are simultaneously getting pounded with an explosion of interest from students of other majors who want to at least take an introductory computer science course. Universities with strong computer science programs are finding it impossible to keep up with the demand. Introductory computer science classes fill up quickly, and many students are excluded. Those universities that try to accommodate all the students have to make compromises.

Stanford, for example, recently announced they were going to adopt a pair programming approach to their introductory courses, not so much because they thought it was a good idea for students to work in teams of two, but simply because they needed to find some way to reduce the workload of grading so many programs; pair programming provided a way to cut that number in half.

At my local university, most computer science courses are off-limits to students unless they are accepted into the computer science major. The competition to get into the major is intense, and rarely happens before a student’s sophomore year. If policies like this continue, the study of computer science will remain restricted to specialists rather than benefiting students across disciplines.

The bottom line: Universities have neither the time nor the resources to accomplish what we demand of them with respect to computer science education. Once the problem has been laid bare like this, it is obvious that there’s really only one solution — we need to start teaching computer science earlier. Many of the computer science and discrete math topics taught at the college level should be taught at the high school level. Introductory programming courses, currently available among a small fraction of high schools, should be common at the middle school level. The sort of casual, playful exposure to programming and computational thinking we currently see at some middle schools should be happening at the elementary school level.

Universities would no longer be the bottleneck, the only place where students are exposed to computer science — and the college computer science curriculum could be redesigned to assume prior knowledge and help students achieve true expertise by graduation.