CS 145: Design, Abstraction, and Implementation

For Prospective Students

For a general overview of the options among first-year Computer Science courses at UW, see the page of the same name in the CS 135 course Web space.

The main qualifications for CS 145 are ability to reason and think abstractly, and enthusiasm for learning.

Good English reading and listening comprehension skills, and the ability to take notes, are also important.

Prior experience in programming is not necessary; in fact, it can be a drawback if it closes one's mind to other ways of doing things. CS 145 is different from anything you will have encountered elsewhere. Whether you are planning on being a CS major, taking more CS non-major courses, or stopping after your two required CS courses makes no difference.

Students who score 80 or above on the Euclid math contest or Honourable Mention or above in the senior Canadian Computing Competition (CCC) may pre-enroll themselves into CS 145 (though, as a courtesy to the instructor, it would be nice if such students could provide the information below). Other students require instructor consent. Both sets of students should read through this whole Web page carefully. To apply for instructor consent, please e-mail the instructor (see the Personnel page for details) with the following information:

  • Your full name and UW student number.
  • Your Grade 11 and 12 high school marks. This doesn't have to be an official transcript.
  • Your score on the Euclid contest, CCC, and other high-school academic contests you may have written.
  • Information about extracurricular activities and interests as you might have provided on your AIF (Additional Information Form) as part of your application to the Faculty of Mathematics.
  • Any other information that you think may be pertinent to your case.

Here are some possible indicators that CS 145 might be right for you. Note that you should not consider something on this list definitive, nor should you consider something not on this list irrelevant.

  • Good performance on math contests. While math contests are not necessarily good predictors of performance in university courses, they do involve some of the skills needed in CS 145.

  • Good performance on programming contests. Programming contests are, paradoxically, even further from being good predictors of performance, as they typically involve code which is written hastily without regard to clarity and deemed "correct" if it passes a few automated tests. Nevertheless, those who enjoy or do well on such contests should consider taking CS 145. Be warned, though, that the kinds of things done in preparation for such contests have little to do with CS 145, so please don't bother if you're not open to new ways of looking at things.

    In the past, some students who did well in programming contests have been disappointed with CS 145, as it didn't just say to them, "Here's the language, here are the libraries, do what you want." (They probably were disappointed by the rest of the CS curriculum as well, but that's another issue.)

  • Excellent marks in ALL high school courses. Weaknesses in communication or an inability to appreciate subjects besides math and CS should be considered warning signs that CS 145 may not be appropriate. Students taking this course should have an open mind and should value diversity.

  • Being female. If you're female and you're reading this page, chances are that CS 145 is right for you. Women tend to underestimate their abilities and turn down opportunities like this when they shouldn't. In past offerings of CS 135, women (both CS majors and non-CS majors) have been among the top students in the class. (Conversely, men tend to overestimate their abilities and believe they're entitled to such opportunities. If you're a male reading this page, think carefully about this.)

    The percentage of women going into CS has been dropping in recent years. It's not that women can't do CS, but that they don't think, based on what they've learned about it in high school, that it's going to be rewarding. CS 145 aims to demonstrate that it can be rewarding, and you don't have to be majoring in CS to take the course. (CS 135 and CS 115 also have this goal, so don't feel that you have to take CS 145 to gain insight.)

Here are some reasons why people might want to take CS 145 that are not good reasons:

  • Lots of experience in programming. High school experiences in programming tend to be very different from university experiences. CS 135 isn't going to repeat much of what you may have seen. Extensive experience in one language or languages that are very similar (Java, C++, Turing, Visual Basic) can, if you're not careful, lead you to dismiss or downplay the importance of other approaches. That can actually get in the way of the insights necessary to solve problems. More than half of the students who stayed to the end of CS 145 in previous years were not CS majors, and many of them had no previous experience in programming.

  • High marks in high school CS courses. There is almost no correlation between marks in high school CS and marks in first-year CS at UW. This is especially true of CS 145.

  • The most challenging course is the most prestigious. By the time you get to third year, no one will be able to tell if you took CS 145 or not, and no one will really care. Even before that, the mere fact that you are taking or have taken CS 145 is not as important as what you actually got out of the course(s) that you took, and that will become evident when someone questions you or places you in a situation where you have to make use of what you learned. You should take the course which is appropriate for your level of ability and your interests. Many UW Math applicants find that very little in high school is challenging, but standards are higher in university, especially in advanced courses like CS 145.

If you wish to ask any questions regarding your particular situation, please e-mail the instructor. There is contact information on the Personnel page.

 

Last modified on Wednesday, 22 June 2011, at 17:30 hours.