CR: Winter 2014

From Soma-notes
Jump to navigation Jump to search

Decided changes (needs paperwork)

  • switch 3rd year courses that require 1805 to require 2804.
  • 3005: have 2406 and 2804 as prereq, not 1805 and 2402
    • implications for non-CS majors/minors?
  • STAT 2507 - delete

Suggested Changes

COMP 4900 (prereq change)

EVOLVING INFORMATION NETWORKS COMPUTER SCIENCE COMP 4900

BRIEF COURSE DESCRIPTION: Convergence of social and technological networks. Interplay between information content, entities creating it and technologies supporting it. Structure and analysis of such networks, models abstracting their properties, techniques for link analysis, search, mechanism design, power laws, cascading, clustering and connections with work in social sciences.

OLD

CURRENT PREREQUISITES
COMP 3203
COMP 3804

NEW

PREREQUISITES
COMP 3203

Rationale: Initially, the course was planned as a graduate course and was later extended to undergraduate. COMP 3804 is not necessary for completing the course since the necessary material is covered in the lectures.

Questions for others

  • DFW rates for 1805?
  • co-op about Java necessity - which languages are in demand?
  • Evangelos: add 2804 as a prereq for 3203
  • generally: adding 2804 as prereq for more/all 4th year courses? Maybe even 3rd?

To do

  • learning outcomes of BCS honours and major
  • status of COMP 2404, overlap with 2501, where C++ is in curriculum
  • 3004 - 1 credit?
  • systems programming and architecture in curriculum
  • role of 1406
  • writing, presentation skills
  • which courses are required in 3rd year
  • mobile stream integration
  • honours project
  • big data
  • large code bases
  • VMs in instruction
  • game stream
    • prereq for 1501
    • cap on enrollment
  • split/merged courses - mainly 1405/1005, 1406/1006

Writing and presentation skills

  • require students to take English or other humanities that requires reading comprehension and writing.
  • required second year course in writing
    • read technical papers of historic importance
    • write multiple small papers on readings
    • outsourced partially - jointly taught
    • prereq for 3004, 4905
  • Honours project
    • classroom component - half credit or less of material
    • posters for science fair, potentially in different room

Research methods course

  • teach research reading, writing, methods
  • 3rd year
  • divided into multiple modules covering different research areas, each module taught by a different prof
  • write paper for term, graded by prof in research area
  • also have some small grades - responses or critiques of research methods

Learning objectives for 1405/1406

In order to determine whether and how to change 1405 and 1406, here are some thoughts on what the learning objectives for first year should be.

Problem solving:

  • Be able to read and understand a written problem description.
  • be able to break down a program (or object) using single-purpose, reusable functions
  • Have a conceptual understanding of function input and output, not just syntactic understanding
  • be able to break down a program using single-purpose, reusable objects
    • understand the above is necessary for correctly designed programs, and that "programmer convenience" (e.g. let's lump everything into one class because it's easier) is never a valid design choice
  • experience designing objects that promote data abstraction and encapsulation at the simplest level
  • be able to create simple programs from scratch (e.g., on paper)

Programming language features/conventions:

  • Be familiar with the basics of expression evaluation: operators and operands; operator arity, precedence, associativity
  • Be able to program using the basic Java/C/C++ operators (compound assignment +=, -=, etc, prefix and postfix ++ and --)
  • control structures: if, for, while
  • boolean operators; equivalence versus assignment
  • iterative and recursive control structures; proper use of iteration versus recursion
  • Functions:
    • understand that all functions take input parameters, perform a task, and store the results in output parameters
    • given a function, be able to identify input parameters, output parameters, and input/output parameters
  • identifier names (objects/functions/variables), indenting, code commenting

Application development

  • Text-mode applications
  • Event-driven, asynchronous programming
  • GUI-based applications
  • make use of existing libraries and frameworks

Programming environment/runtime:

  • Understand a very basic memory model:
    • all variables are stored in linear fashion in memory
    • all variables have characteristics: name, value, data type, address in memory, scope
    • be familiar with the above terminology
    • anecdote from Christine: at the start of 2401, if I write "int i = 10;" on the board and ask what are the variable's "name" and "value", they don't understand the terminology
  • Have a conceptual model of how parameters are passed to functions and how values are returned
  • understand the difference between pass-by-value and pass-by-reference

Debugging techniques

  • Understand what deleting any line in a program will do and *why* that behavior occurs.
  • using "print" statements to observe dynamic program state
  • use of a command-line debugger, including understanding how to single step through a program and how to obtain the value of variables at specific points in program execution

Evaluation strategies

  • Grade programming assignments for quality (good design, following conventions) using clear criteria and constructive feedback, rather than whether or not they "work". It is insufficient to be marking assignments based solely on whether they work or not.
  • mutate program (e.g., delete lines), have students say how program behavior changes and why
  • comment every line of code, say what each does - but more why that line is there


Tools

  • basic IDE use
  • version control software (git?)

Pedagogy ideas

  • students are using compilers and IDEs and crutches, preventing them from understanding basics of program execution

Condensed Learning objectives for 1405/1406

1405: A first course in programming for B.C.S. students emphasizing problem solving and computational thinking. Topics include pseudocode, variables, conditionals, iteration, arrays, objects, functions, sorting, searching, and simulation.

1406: A second course in programming for BCS students, emphasizing problem solving and computational thinking in an object-oriented language. Topics include abstraction, mutable data structures, methods, inheritance, polymorphism, recursion, program efficiency, testing and debugging.

Must have

learning prereqs for 2401, 2402, and 2406

(1805 should become a prerq of 2402)

  • I/O ???
  • Testing?
  • program control flow
    • iteration (for, while)
    • conditionals (if, else)
    • recursion
    • calling functions (API)
  • abstraction & modularization
    • writing functions (design)
    • data structures
      • variables
      • arrays
      • structures
      • references
      • mechanistic view of RAM
      • call-by-value versus call-by-reference/call stack/aliasing
      • scoping
  • program design
    • procedure-oriented design
    • data-oriented design?
    • object-oriented design (must unpack)
  • algorithmic thinking
  • debugging
    • sequential execution of instructions
    • mechanistic view of computation
    • print statements to view program state
    • multiple mental models (mechanistic, algorithmic, mathematical)

Nice to have

1405 weekly outline

Learning outcome: read code (at what level?)

  1. variables
  2. if statements
  3. loops
  4. arrays 1
  5. arrays 2/string processing
  6. algorithmic thinking 1
  7. algorithmic thinking 2
  8. functions
  9. recursion
  10. compound data structures
  11. debugging
  12. I/O: files, keyboard, mouse, text and graphical output
  13. searching and sorting

1406 weekly outline

Task: cut down to one course

Learning outcome: read code (at what level?)

  1. objects & classes 1
    • data versus behavior
  2. encapsulation and decoupling
  3. objects & classes 2 (class versus object behavior)
  4. memory model
  5. debugging
  6. testing
  7. inheritance & polymorphism
  8. multiple inheritance and interfaces
  9. abstraction/OO design 1
  10. OO design 2
  11. generics
  12. object-oriented string processing
  13. recursion
  14. implementing your own list/tree (container design)
  15. efficiency
  16. user interaction
  17. event handling & asynchronous processing


David's shortened list:

I. Java-specific considerations (2 weeks)
1. intro to Java, public static void main
2. exceptions; more on Java

II. Object-oriented programming (5 weeks)
3. OO 1: data and behaviour
4. OO 2: encapsulation and decoupling
5. inheritance and polymorphism
6. abstraction and OO design
7. OO design 2: object hierarchies

III. Programming mental models (5 weeks)
8. testing
9. program efficiency, big-O
10. memory model, pass-by-reference
11. recursion
12. implement your own list / tree

Deliberate omissions:
- event handling (2406; might cover a bit, no guarantee)
- strings (1405; can do more if instructor wants to, no guarantee)
- UI (1405; covered implicitly)
- generics (not a week)
- debugging (would like to include, but would have to cut)

Plans for the fall

  • Jason on sabbatical for fall and winter
  • Lou take over 1406 for Winter
  • question to discuss: make 1005 and 1006 distinct courses? Jason may be interested in redesigning them
  • book(s) for 1406? Lou will investigate
  • design and resources for changing pedagogy?