The idea is to isolate and list al the CONCEPTS from a field to be taught
and make sure they are covered in a non-repetitive way. By this I mean that
it is clear to what level of detail concepts have already been presented in
the prerequisite course and then instead of reintroducing them just build
upon and reinforce understanding of these concepts through their USE. The
easiest way to do so is to choose a reference book (one that is
non-idiosyncratic and is commonly accepted around the world) and then
partition concepts into groups to be covered in each course, specifying the
level of detail.
Example: When it comes to algorithms and data structures, one can take say
Cormen, Leiserson and Rivest's book that is very complete and then decide
what chapters to cover in what course and to what extent. I feel adoption of
a single book whenever possible would be extremely beneficial to students in
many respects (a single textbook to buy, re-used for several courses, a
unified approach and formalism, and easier getting around in the textbook,
single familiar style) but this is not necessary: if a lecturer wants to use
something else, this is OK, but we would all cover the same BASIC concepts
to the prescribed depth.
If the same concept is done again (say binary search trees) then it would be
clear what can be assumed and only reinforced through exercises and
problem-solving, and what is introduced for the first time, and thus in
detail "from scratch". I hope this helps so that you can summarize this
observation. Please let me know if you need anything else.
One outcome would be to avoid immense overcrowding of courses like 2011 that
is packed with very hard material (presented on top of Java).
Say in 2011 we do sorting once for good, while transfering some of the
advanced stuff like some of the search trees into 3121. Now students in 3121
have no clue why there are so many sorting algorithms and have no idea what
the expected time of an algorithm is, let alone how to evaluate it. A lot of
them proposed on my midterm to design a linear time algorithm that involves
building an array of size 10^12 to use counting sort because it is fast!!! I
feel stuffing a course with too much stuff serves no purpose; there must be
a reasonable amount of time spent in reinforcing concepts with lots of good
exercises and applications, so that they do not make such bad mistakes. If
they see tons of fancy stuff in a rush they end up getting nothing out of
it; they have no clue how and when to use it.