We are losing too many students in CS46A, both physically and mentally. The students who barely pass CS46A become casualties in CS46B or CS151. Let's slow the pace down. There are two ways we might do this.
There's too much material in CS46A and CS151 and not enough of the right material in CS46B and CS146. Rewrite the syllabi and rubrics for CS46A, CS46B, CS146, and CS151. These courses form the backbone of our efforts to teach students how to program in Java. It seems strange that two of the four are devoted to data structures. It also seems (to me) that CS146 is a bit anachronistic in its devotion to sorting, searching, and NP.
As a suggestion, CS46A could be devoted to problem solving in Java. Students would learn to work solutions out on paper, and then translate them into static Java methods. CS46B could be an introduction to object-oriented programming in Java, where students are drilled in interfaces, classes, objects, inheritance, and polymorphism. CS146 could be an advanced course in object-oriented programming covering topics like GUIs, file I/O, multi-threading, reflection, and generic collections. As a nod to the past, students could be required to implement a few generic collections using heaps, linked lists, trees, etc. Some comparison of the efficiencies of these different implementations could also be mentioned. The traditional CS146 topics could be moved back to CS155. Finally, CS151 could be devoted to UML and design patterns.
As an alternative, require students to take a placement exam before entering CS46A. The exam would test problem solving skills. Students who fall below a certain score on the exam would be required to take a preliminary course similar to the modified CS46A described above.
The rubrics need to be given to the instructors months, not days in advance. Hopefully this problem will disappear once all of the rubrics are written. I anticipate that the rubrics for Spring assessment will be finished by mid-March.
Some of the tasks need to be re-written. Specifically, we should reconsider the inner class task for the CS151 rubric. There are probably too many similar tasks for the CS46B rubric.