Skip navigation

I just got off a very interesting discussion today on how teaching introductory computer science must be improved. I must say that I was very excited to be part of this discussion where people (Rich and Eric) were very keen on changing things to improve the overall situation. Here are some of the points which were raised:

  1. In a quarter system, like the ten weekly one we have here in UCI, students have to grasp a ton of material, most of which have very short lived purpose — to pass the final exam.
  2. There are a lot of students who get by courses without completely understanding many fundamental concepts, and have a lot of trouble in later courses.
  3. The grade given to a person at the end of a course is the most misleading competence indicator. We do not have a better one (possible no one has anywhere in the world) — but the letter grade has to change into something more indicative of the student’s competence, abilities and creative skills.
  4. Introductory courses currently teach Java. This might not be the best thing to do. Java, besides being a verbose language, contains a lot of advanced object oriented features. For freshmen who have never written computer programs before, the dual battle of writing good object oriented programs and solving the problems at hand is a very overwhelming one.
    DISCLAIMER: I use Java as my primary programming language, and love most of its features. The stability of the virtual machine and rich set of libraries available from the community make it one of the most important platforms for doing anything real.
  5. In the beginning, it is important for both the teachers and students to have fun in the course. Computer science must be viewed as an enjoyable activity. This is very important. Probably the most important. Once people start having a bad taste, they will develop mental barriers in learning new things. Thus, doing something useless but superb fun will actually be a much better strategy to retain freshmen in computer science.

That being said, my personal take on this is the following:

A more interesting language must be taught to these students. Eric and Rich are currently targeting Python as a possible replacement for Java. MIT is also heading in this direction. I personally believe that a better language for this purpose is Javascript. There are multiple features which make it interesting.

  • It is very easy to start introductory level programs which can be visually experienced by the students. It natively supports animation using HTML5 Canvas, or it can interact with CSS to provide very simple movements of images across the screen. The students can more easily get familiar with the system, play with it and explore it to make more interesting projects.
  • Its becoming more and more important today to interface multiple programming languages. This is no easy task. Javascript was built to live with CSS/HTML. There are very nice libraries (like jQuery) which make this seem even more easier (though it need not be necessary to introduce jQuery on day 1).
  • Good tools for debugging javascript are available (For example: Firebug), which allows students to create watches, add breakpoints. Firebug’s JS console is one of the most useful features. Students can try out snippets of code right there (using it as a REPL environment).

A few other things students must learn in an introductory programming class is the importance of working together. No real CS project is done alone. Working with other people is definitely the more fun case). Students must learn how they can form groups and work out projects together.

Defocussing from the standard examination grades is probably the most important thing to do. The role of education is to make us aware socially and technologically, not to post a 4.0 GPA on the front door. At the end of the day that’s just a number. What is more important that you are able to creatively think, formulate ideas and build robust systems which are useful to the community. Unfortunately, most courses are the opposite. They love to have that dark and gloomy examination at the end of the quarter to ruin all the fun. This is true in India (where I took courses for 20 years) and in UCI (much much lesser here, but still relevant). Rich had a wonderful point when he said that only entrance exams must be conducted, and not qualifying ones. The entrance exam has a better feedback opportunity. If one fails it, he can retake a pre-req course which he didn’t completely understand. A final exam is just a nail in the coffin — there is no way to mend things after it. UCI makes it worse by declaring that students cannot retake a course (once they have a grade for it).

 

 

Leave a comment