Child pages
  • Curriculum Issues
Skip to end of metadata
Go to start of metadata

After reading "A Survey of Literature on the Teaching of Introductory Programming" and Marie's "Notes on Curriculum Issues," which were handed out on the first day of class, I was inspired to write some thoughts on the curriculum down.  Curriculum is something I think about a lot, and my ideas are influenced by my experiences as an undergrad in CS at Salisbury, a lot of long talks about this stuff with Dr. Tom Anastasio back in the day, and my own experience teaching CS to high school students.  -- David Walser

Prerequisites for 201 - With moving 201 to Python, I question the need for 104 to be a prereq.  Maybe 121 should be though.

 Topics to cover for 201, 202, and 341. - When teaching HS I thought about how using Python in the intro class would allow more concepts to be covered before moving to Java.  If I was still teaching that and AP1 and AP2 at the high school level, this is probably how I'd break it down.  Note that with AP1 you have to spend some time covering the case study.  At our level, some of the stuff I have listed under 341 could probably be moved back to 202, which would allow 341 to get to more advanced stuff.  That would more closely reflect how it is at Salisbury (where list implementations are covered in CS2, and sometimes BSTs if they have time).


  • Python
  • UNIX, command line interface
  • Problem Solving
  • Data
  • Operators
  • Flow Control
  • Functional Decomposition
  • Functions
  • Specifications
  • Documentation
  • Objects and Methods
  • Basic debugging/testing
  • Input/Output
  • Strings
  • Appropriate choice of data structures for solving a problem:
    • Lists, Stacks, Queues (using Python lists)
    • Associative Arrays (using Python dictionaries)
    • Sets (using Python set type)
  • Basic OOP


  • Java
  • Java syntax, Javadoc
  • Collections hierarchy (java.util.*)
  • IDEs, Eclipse
  • Visual Debugging
  • OOP
  • Design
  • ADTs
  • Recursion
  • Sorting and Searching algorithms
  • Basic algorithm analysis
  • equals()/compareTo()/hashCode()


  • Implementations of Data Structures
  • Lists
    • Array-backed, Linked
  • Sets
    • Binary Search Tree, Hash Table, Sorted List
  • Priority Queue
    • Heap
  • Appropriate choice of data structure implementations (based on data properties, usage patterns, efficiency)
  • Graphs

I also had some thoughts on 331.  Marie's notes suggest maybe C++ should be covered here.  I think that would be an extraordinary waste of time in 331 and would ruin the class (IMO :o).  The only place that C++ is really useful is in graphics, so it should be covered there (CMSC 435).  Given students already know Java, this should not be difficult.  They may have also been introduced to C, more on that later.  I do think though that 331 is an extremely valuable class, and this is how I envision its curriculum (pretty close to what's done now):


  • History of programming languages and their influences on each other
  • Compiled vs Interpreted languages (vs hybrid models with bytecode, etc)
  • Syntax
  • Type Systems
  • Programming Paradigms
    • Procedural/Imperative (should already be familiar)
    • Object Oriented (should already be familiar)
    • Functional (exposure to LISP, Scheme, or ML variants)
    • Logic (exposure to Prolog or something)
  • Languages as tools
  • Strengths and popular usages of various languages (types of problems or fields they're best used in/for)

There has been some concern from the Operating Systems faculty about students not having exposure to C.  This is addressed at Salisbury by a class called Systems Software (COSC 350) that is a prerequisite to OS (COSC 450).  Its curriculum is very close to UMBC's CMSC 433.  I was thinking this could be moved to 300-level and be required for OS (and maybe graphics so they've seen C before they have to do C++) as well.  I know Marie had already talked about maybe making one of the courses that is currently a mandatory part of the CS major become optional (345 IIRC), so if that happened you wouldn't ultimately end up with more required courses if this was done.  Anyway, the curriculum for the course could be something like the following:

433 -> 300-something

  • Linux/UNIX shell utilities and scripting
  • Text processing - awk/sed/Perl
  • System-level programming with C
  • Compiling C programs with gcc and related tools
  • Writing Makefiles
  • No labels