A blog about teaching Programming to non-CompSci students by Tim Love (Cambridge University Engineering Department). I do not speak on behalf of the university, the department, or even the IT group I belong to.

Monday, 17 January 2011

Working in Teams

Having written about student projects it's natural to talk about working in teams because that's how much of our project work is done - students like it that way, and the lessons learnt are useful beyond software-writing - beyond academia too. Again, I'll start with a checklist

  • Team size - We use 2, 3, or 6 (the 6 being split into 3 pairs)
  • Who chooses teams? - We sometimes impose and sometimes let the students choose. Both options have pros and cons. With a yearly intake of 300+, letting students choose their own teams can be time-consuming, and self-selected teams might be rather unbalanced. There may be non-academic reasons for controlling team-selection (a mixed of genders and background, for example)
  • Within a team, who does what? - Sometimes there are clear roles within a project. Sometimes the tasks are much less clearly delineated. For marking purposes staff need to know who did what.
  • Is there a team leader? - Specifying that there should be one enforces a structure onto the team
  • Planning overhead - What team-related milestones and deliverables are requested? An initial presentation? Gantt charts? Milestones? Some individuals who wouldn't plan a private project can see the point of planning when part of a team.

I like the idea of psychologically-profiling team-members at the start with a quick quiz, to see if the results are predictors of team dynamics. We don't do that, but one project does ask teams to complete a form at the end showing what percentage of the total workload each member did.

The same project also attempts to assess the time taken on the project and how much staff time was used (staff time is estimated to cost up to 250 pounds/hour)

Though students in general like working in teams, it can be a wounding experience. If team-members clash, how interventionist should staff be? Some staff involve themselves closely with teams and pro-actively influence dynamics. People at other sites sometimes offer mediation services. If staff leave groups to sink or swim, some will sink, and some innocent passengers will go down with the ship. We've had some generally popular team-based courses scoring un-exceptionally on end-of-year surveys because a few disgruntled individuals giving courses a zero rating. Reports include comments like "It quickly became apparent XXX did not have the self-discipline or dedication to be an effective team manager ... His tendency to speak to others in an authoritative manner despite the lack of useful input/output from himself created dissatisfaction amongst other team members."

By the end of a project, team dynamics can get out of hand. After 4 weeks, a team member was late for a final session. One of his team members growled "[He] does less damage when he's not here. I don't want him touching the code ever again."

Teams can also have problems if one person is repeatedly absent. For this reason we're tough on attendance.

We use online forums to encourage teamwork (and to give us a chance to identify teamwork problems)

According to "Pair Programming Illuminated" by Williams, L. and Kessler, R. (Addison-Wesley) students who work in pairs enjoy the work more, are more confident, and get better grades. Students typically ask half as many questions. Pair-programming helps female computer science students suggests that pairing is particularly beneficial for women. On the other hand there are courses (e.g. at the University of Washington) that have given up pair programming and have found that students get better grades (though the improvements may not be attributable to the teamwork decision).

In "Journal of Computing Sciences in Colleges" (Volume 28 Issue 2, December 2012) Tom Rishel describes a course where 5 teams simultaneously did some projects that had 5 development stages, each team working on a different project for each stage.

Friday, 14 January 2011


Though the percentage of female students in the university is about 50%, the Engineering department figure is more like 25% (which is better than the UK engineering average of 14%). You'd have thought that once people have gone into Engineering, they might as well do Computing (in for a penny in for a pound) but in our 3rd year software project the figure's below 10% (0% some years). It's not just us of course; at Harvard computer science is the most gender-skewed subject, with women comprising only 13 percent of undergraduate CS majors. The proportion of female CS majors is similar at some of Harvard’s peer institutions - Princeton is 19 percent, and Stanford is 14 percent.

The problem goes back a long way. According to Fran Allen the ratio in computing might be engineering's fault - "Recently I realized what was probably the root cause of [the glass ceiling]: computer science had emerged between 1960 and 1970. And it mostly came out of the engineering schools ... And the engineering schools were mostly all men in that period"

4 issues are commonly mentioned in the documentation. As the authors point out, dealing with these points will improve the popularity of the subject in general as well as increase the female intake.

  • Lifestyle -
    • "A lot of people think it's the games and the nerdiness of sitting in front of a computer all day [that makes computer science unappealing to women]. It's going to be interesting how these new social networks online will have an effect" (Fran Allen)
    • "[women] attach their interest in computing to other arenas, to a social context that's more people-oriented. We refer to this as computing with a purpose as opposed to programming for programming's sake or a totally technology-centric focus. But the curriculum and culture does not acknowledge this interdisciplinary, contextual orientation toward computer science." (Jane Margolis and Allan Fisher, "Unlocking the Clubhouse: Women in Computing")
    At engineering, we might not be too badly off in this respect: computing is only a means to an end, and we have students working on Design, Medical software, Green Technology, 3rd World technology, Teaching Aids, etc.
  • Career Options - It is sometimes thought that computing jobs reward those prepared to obsessionally work long hours. There are many 9-5 computing jobs nowadays, and many uses of computing in the humanities. I've been involved with computing projects about garden design, poetry, etc.
  • Role Models - our head of department is female. The IT group I'm in has about about 20% females. It's difficult getting female staff/p-grads involved with introductory computing - there aren't many of them in the first place, and they don't want to spend their teaching time on introductory courses as role models.
  • Pre-university qualifications/experience -
    • "We also found because of early socialization in schools and at home, and a sort of early claiming of the computer as a boy's toy, that girls who wanted to major in computer science and got into one of the top computer science departments in the country actually came in with less hands-on experience. Although there was absolutely no difference in ability, there was a difference in experience, which then led to a difference in confidence during the program." ("Unlocking the Clubhouse: Women in Computing", Jane Margolis and Allan Fisher)
    The choices made at school can be restrictive. At our department there are people in touch with developments in pre-univ education, and we run OutReach courses, bringing schoolchildren into the department. Elsewhere, girl-only summer schools are run.

Some other places have attempted remedies.

  • Several CS professors [at Harvard] indicated that encouraging more women to study the subject was among their top priorities for the future. "It’s something that we talk about a lot," said Associate Dean for Computer Science and Engineering J. Gregory Morrisett. "We are coordinating with a bunch of departments around the world and are trying a lot of different things in the hopes that we will uncover some of the issues and correct for them." (from The Crimson Harvard)
  • They improved the situation at Carnegie-Mellon -
    • "There's been an attempt to teach computing in a more interdisciplinary way. Also, the university accounted for the different levels of experience - one of our findings being that women came in with different levels of experience, but there was no difference in ability."
    • "A new set of courses was introduced in the first year, allowing everyone to self-select where they wanted to be according to their experience, and then everyone would be at a similar level by the second year. That means you wouldn't have students with little experience sitting next to someone that's been hacking their whole life and then get really discouraged."

See Also

  • "A deficit of women in computer science: a student's perspective" (JCSC 26,3 (January 2011), by Anna Mikesell and George Rinard)
  • Women in Computer Sciences: Closing the Gender Gap in Higher Education (Carnegie Mellon)
  • Women in computing (Wikipedia)
  • New Image for Computing ("while 67% of all boys rated computer science as a “very good” or “good” career choice, only 9% of girls rated it “very good” and 17% as “good.” Digging down deeper, it is fascinating to note that there’s a gender gap between boys and girls when it comes to feeling that “being passionate about your job” is “extremely important” (F: 78%, M: 64%), “earning a high salary” is “extremely important” (F: 39%, M: 50%), and “having the power to do good and doing work that makes a difference” is “extremely important” (F: 56%, M: 47%)").
  • "Women and Gaming: The Sims and 21st Century Learning", Hayes et al. ("most [females] chose what are known as “casual” games, such as Solitaire, Tetris and Bejeweled. ... Unfortunately, casual games lack a critical capability that may give boys a leg up – modding. Modding allows users to modify or create part of the game. For example, players can create new maps or scenarios that others can use. The process of modding helps gamers develop advanced computing skills. Serious gamers and modders also form communities that provide informal learning and a peer network. It’s like the old boys’ network, only the venue is games rather than golf courses. ... Over the course of Hayes’ research, games have opened up more to women. And products such as the Wii are radically transforming the demographics of gameplay by bringing gaming to people who would never have pursued traditional computer games. Hayes suspects that the increase in games on cell phones and PDAs will change the gaming landscape as well.")
  • "A note on performance and satisfaction of female students studying computer science" by Ivanovic Mirjana et al (ITALICS Volume 9 Issue 1 February 2010) - "Numerous research results have shown a significant lack of female students enrolled in Computer Science studies at the universities worldwide ... Moreover, it is a recognized fact that those few women who stay in the field discontinue their studies more often than their male colleagues."
  • What Has Driven Women Out of Computer Science?
  • "Why are women underrepresented in Computer Science? Gender differences in stereotypes, self-efficacy, values, and interests and predictors of future CS course-taking and grades" by Sylvia Beyer (Computer Science Education Volume 24, Issue 2-3, 2014, p.153-192)
  • "Women in maths-intensive fields move from undergraduate to graduate school to tenure-track professorships at rates comparable to men. In contrast, in [life sciences, psychology, and and social sciences] they tend to drop out of the pipeline more often" - see (2014) - Diane F. Halpern (Minerva Schools at the Keck Graduate Institute) notes that "the report paints a complex picture of the contributors to gender imbalances within the sciences, a picture that challenges traditional beliefs regarding the role of discrimination in perpetuating the gender gap."
  • High Emotional Intelligence in women is linked to higher truancy, drugs and violence. In men the opposite is true (from the Journal of Forensic Psychiatry and Psychology)
  • Autistic-spectrum shy girls are less likely to be diagnosed (and helped) than similar boys
  • the proportion of undergraduate computer-science degrees awarded to women in the US has declined from 37 per cent in 1984 to 18 per cent in 2010 ... Meanwhile, in India, the trend has gone in the other direction ... in 2003, 32 percent of the Bachelor of Engineering degrees in computer science and 55 per cent of the Bachelor of Science degrees in computer science were awarded to women ("Geek Sublime" by Vikram Chandra (Faber and Faber, 2014, p.80)
  • research in countries as varied as Iran, Hong Kong, Mauritius, Taiwan, and Malaysia has yielded results consistent who those found in studies in India, showing that there is nothing about the field of computing that makes it inherently male. Varma's conclusion is blunt: 'The gender imbalance in the United States seems to be specific to the country; is not a universal phenomenon ("Geek Sublime" by Vikram Chandra (Faber and Faber, 2014, p.83)

Monday, 10 January 2011

Which language?

A long time ago many students arrived at our department with some programming experience thanks to home micros running BASIC, and schools equipped with BBC micros. Then skills fell away. More recently, with free Linux being available, there's been a recovery in programming skills, but only amongst the computer literate, meaning that the distribution of our intake's computing skills is more bi-polar than ever.

Meanwhile, the use of computing in engineering has increased enormously, and new, computing-based areas of engineering have emerged. The invention of the WWW and cheap, small processors has led to the use of GPS and intelligent sensors in civil engineering projects. Google Maps and Google Apps enrich projects as well as aid communication between workers. Computer simulations and CAD continue to replace their predecessors.

The curriculum has slowly changed. In 1997 we moved from teaching Pascal as a first language to teaching C++ (well, C really). Later, there were compulsory computing questions in the 1st year maths examination. In 2003 we offered the MDP disc so that students could run a C++ compiler on their home machines. In 2008 we introduced a C++ summer project. In 2010 first years used Lego MindStorms in week 1, programming using Matlab.

Some of these initiatives aimed to inspire students or offer opportunities for those interested in computing. Other initiatives sought to improve the skills of the less capable students, or encourage a more self-taught approach but we still introduce programming concepts formally using a compiled language and a mixture of practicals and lectures. The increased freedom of choice means that students can more easily avoid programming, thus magnifying the bi-polar distribution of our intake's skills. Attempts have also been made to introduce programming into more engineering courses. In recognition of the need for proficiency in more than one language, Matlab/Octave is now taught (a vehicle for teaching about algorithms) to 2nd years.

Though the C++ course has always received above average results in student feedback, exam performance suggests that many people don't revise the subject. Also feedback from staff and older students hasn't been so encouraging - it's said that the course doesn't prepare people for the kind of programming they'll later need. Programming is used increasingly across all engineering disciplines, and C++ isn't the "swiss army knife" that students want.

C++ was never intended as a "teaching language" but it has withstood the test of time. It's used to write anything from operating systems to embedded programs in hardware. It can be used to introduce all the programming paradigms that have emerged over the years - procedural, object-oriented, generic, etc. It's used here in 2nd and 3rd year practicals (interfacing with low-level hardware and electronics), and a 3rd year software project. Though it's not used in very many 4th year projects, knowledge of C++ is useful for projects that involve Java, C# or Objective-C. Its use has become more focussed over the years as alternatives have emerged. In 2009 we adjusted the C++ course to exploit the teaching potential of the web technologies now available.

  • The new version separates the reference and lab-instruction aspects, so that during the practicals students are only told about what they need for the practicals. They are encouraged to experiment as they read, and to look details up online - web-access is assumed.
  • Because it's a web document we can add some interactive tests and offer students novice/expert choices. This also saves 10,000 sheets of paper. We've taken care that the web pages print out well, in case student want paper versions.
  • Some other departments in Cambridge and in the States leave students to their own devices. Without going that far, we'd like to make students more self-reliant and more able to continue work at home. To that end we've dropped the graphics in this course.
  • The theory in particular (but also the exercises in the practicals) used to emphasise Numerical Analysis. This emphasis has been reduced in favour of problem solving, but the need to retain examinable material is a constraint.
  • The impression that demonstrators gained in the past was that some students never recovered from the first impression that computing was hard. Though the material covered is nearly the same as before (casts have been dropped, C++ strings are used more, and classes are used in an exercise rather than just appearing in an appendix), the initial learning curve is shallower and the emphasis is on using C++ to solve problems. No C++ history is mentioned. There are no comprehensive lists of available features.
  • Initially a reduced set of C++ facilities is taught. C++ is an old language. Though new, safer features and notation have been developed to supercede older ones, the old ones are still legal. We introduce the newer or easier approaches first (especially if they're more like the maths or Matlab/Octave equivalents), then other notations later.
    • We introduce i=i+1 long before i++
    • We introduce and, or and not rather than &&, || and ! for logical operations
    • We use braces around the body of while, for and if code, even if the body is only one line of code. This eliminates some common bugs.
    • We use while loops before for loops. Experience has shown that many students never understand for loops, forgetting the notation entirely, thinking that the condition is an "until" rather than "while" condition, or thinking that
         for (int i=0; i<4;i++)
             cout <<i; 

      is somehow equivalent to

         int i=0; 
         cout <<i;
    Once the concepts are clear, the more common (albeit more obscure) alternatives are mentioned.

The result's an online C++ course. While I was at it I converted it to Python, trying to change as little as possible - see the Python course

Python is popular within the University, even for "Scientific Computing". I can see its role growing within the Engineering Department too. We're now in a more polyglot, mash-up age. Matlab for example has about 2.5M lines of C, 1M lines of Java, 0.5M lines of Fortran and about 2.5M lines of its own scripting code. But C++ (the Latin of programming languages) remains: though the first official reference guide for the C++ was published over 25 years ago, it's used in modern applications by Halo, Amazon, Google, Mathworks, Microsoft, Apple, etc. According to the October 2010 figures by TIOBE Ranking Index, JAVA and the C family remain the 2 most popular languages.

Before C++ becomes too complacent though, here are some quotes from "Coders at Work" (edited by Peter Seibel, Springer-Verlag, 2009), which has interviews with several famous programmers.

  • "C++ is just an abomination", Zawinski, p.10
  • "[C++'s] syntax is terrible and totally inconsistent and the error messages, at least from gcc, are ridiculous", Fitzpatrick, p.63
  • "I don't like C++; it doesn't feel right", Armstrong, p.224
  • "given the kinds of goals that I have in programming, I think the decision [for C++] to be backwards-compatible with C is a fatal flaw ... C fundamentally has a corrupt type system", Steele, p.355
  • "Google is C++, strictly C++. It's no big deal programming in C++, but I don't like it ... by and large I think it's a bad language", Thompson, p.475

And here's another quote - "We sold our programming soul when we began teaching the pedagogically unsound and intellectually ugly languages C and C++ to beginners" - David Gries (IEEE Computer, October 2006, p.81).

See Also

  • "Language Considerations in the first year CS curriculum" by Jonathan D. Blake (JCSC 26, 6 (June 2011)). He says "Research has shown that assignments that provide early feedback and early success (and that are compelling and visual) are important in improving not just retention, but also gender equity" (p.126). He used to teach Java in years 1 and 2, then taught Ruby followed by Java, then someone else used Python and Java. He found that both Ruby and Python made the transition to Java harder than expected. He tried Groovy then Java, which simplified the transition but introduced other problems. Currently he's using Scala and Java.

Tuesday, 4 January 2011

Open-ended computing projects

We run a 3rd year project for 20+ students (teams of 3) which lasts 4 weeks and lets them choose how to fulfill the task. To make it more fun we modify the requirements a week before the deadline, the hope being that if their work is well structured, the modifications won't be too onerous.

We also offer 4th year projects for individuals which last half their final year where there's considerable scope for flexibility - within reason they can come up with their own project titles. Here are 3 examples -

Other places (computing departments in particular) offer more project coursework - e.g.

  • iPod Touch development (podcasted lectures are online)
  • Producing add-ons for free-ware (GIMP, Mozilla, etc)

Such projects often appeal to students (and in retrospect are thought to be very useful). Students mention projects in CVs and they're a popular interview topic. They bring together many issues at the heart of Software Engineering but present difficulties to staff

  • Project acceptance - how carefully should the student's suggestions be assessed?
  • Evaluation - how can dissimilar projects be compared fairly?
  • Copying - how much copying is there in an adaption? Should suspicions be raised if the source of a very similar product appears during (or just after) the student's project?
  • Staff Workload - if the students have freedom of language, platform, etc, help is going to be hard to provide.
  • Student non-productive work - if the student is trying to contribute to a big project there might be required procedures, packaging, version control, documentation, etc that take up too much time

Powered by Google App EngineIn our situation we would like to bring some aspect of engineering into the project (for years 1 and 2 anyway) but WebApps are so prevalent nowadays that one could almost consider them as examples of basic programming so one option might be to use GoogleApps Engine as a platform. The online documentation tells people how to download the software and has a staged example which is easy to work through (Java and Python are supported). The resulting web-page + database back-end can be run on the user's machine. Students could then work on their own ideas and upload the result to the GoogleCloud. A set of standard project titles could be offered for the less ambitious.

See Also

  • Using open-source solutions to teach computing skills for student research (David Allbritain - "In conclusion, a course on programming and Web development designed specifically for psychology students provides students with technical and problem-solving skills that they are then able to apply to their own work and research. An open-source operating system and open-source software contribute significantly to the feasibility and success of the course, both technically in the implementation of the course and pedagogically as well")
  • Evaluating Student Participation in Open Source Software Development with an Annotation Model (Robert Charles and Yonglei Tao - "A primary goal for computer science instructors is to prepare students for the real challenges they will face in professional software development. ... As technologies evolve, future developers are more likely to work from existing or partial systems in order to build new ones. Hence, it is important for students to gain experience with complex programs they cannot possibly redevelop from scratch ... We have also demonstrated how this model can be used to evaluate the participation of student/user in a collaborative program development.")
  • FOSS 101: Engaging Introductory Students in the Open Source Movement (Ralph Morelli and Trishan de Lanerolle - "Course content was divided between technical topics related to the development of free and open source software (FOSS), including programming in PHP and MySQL, and readings and assignments related to broader issues about the societal impact of the open source movement")
  • Student participation in open source projects (A professor's perspective) (Heidi Ellis - "When two groups collaborate, they typically do so to accomplish common goals or to work together towards goals for both groups. In this case, the goals of the two environments differ. The open source environment seeks to create a product that meets user needs. The academic environment seeks to produce students with a certain knowledge and skill set. ... ")
  • Teaching Software Evolution in Open Source (Maksym Petrenko, Denys Poshyvanyk, Václav Rajlich, and Joseph Buchta - "Our students have practiced perfective software evolution on open source projects with sizes up to 68,000 lines of code without difficulty ... We assign each project to a team of four to six students. Each team has a project manager, a PhD graduate student assistant responsible for the change requests and supervision of team members. Project managers also act as customers when change requests need clarification, and they resolve team member disputes. ... At the beginning of the course, we select several open source software systems written in either C++ or Java. ...After the course infrastructure was in place, each project team required roughly six or seven hours of the manager’s time in an average semester week and around 10 to 12 hours in the weeks when build releases were due. ... Students’ grades are based on individual effort, group interaction and communication, and the extent to which they follow the required SC process. ... Our experience with teaching software evolution over a two year period shows that it is possible to use large-size open source software in course projects. After being introduced to the systematic methodology of software evolution, students can effectively plan their efforts and make high-quality evolutionary changes.)
  • Computer project Management
  • "Good practices for Educational Software Engineering Projects", van der Duim, L. et al, Proceedings of the 29th International Conference on Software Engineering, May 20-26, 2007.