Programming Stream

From CDOT Wiki
Revision as of 20:22, 21 February 2014 by Chris Szalwinski (talk | contribs) (To Be Done)
Jump to: navigation, search


Programming Stream | Market Demand | Course Content | Work in Progress | Members | Issues


Welcome to the Programming Stream Group at the School of Information and Communications Technology

Redirect to Curriculum Review 2012 Overview Page


Introduction

This wiki describes curriculum developments within the programming stream at the School of Information and Communications Technology

  • The scope of the currently active projects is driven by
    • the general need to train professional programmers for direct entry into the workplace
    • the growing knowledge-based industries
      • digital game programming industry
      • open source communities for software developers
      • emergence of parallel computing
  • The information reported here is being provided to
    • inform faculty members of the status quo
    • solicit comments and criticisms from faculty

What can I do right now?

  • add your name to the list of active members and identify your interest here
  • add your project(s) to the list of projects under development here if you have any
    • create your own project page describing your own contributions
    • add descriptions of your project(s) in detail to this wiki along with current status
    • list the work that remains to be done
  • add any testimonials you have received here
  • add information to any section of this wiki - quotes, data, testimonials, suggestions


Curriculum Development (2013)

The principal objectives of this year's development are

  • to complete the alignment of the programming stream courses with the C11 and C++11 standards
  • to address the wide variation amongst faculty regarding the texts and web-sites developed by Chris S

Resolved Issues

Cathy L, Danny A, Don F, Ron T, Ian T, Mary Lynn M, Chris S present

  • Data Representation is now fully covered in ULI101
  • OOP344 will be compulsory in CPA/CPAC from Fall 2013
  • OOP344 and BAC344 are still optional in CPD

IPC144/BTP100

  • https://scs.senecac.on.ca/~ipc144/
  • https://scs.senecac.on.ca/~btp100/
  • web site, workshops, and exercises have been completed by Chris S
  • 2012 C11 agreed (see below) changes have been incorporated by Chris S
  • Cathy L found Chris S' timeline left enough time to cover everything with time left over for review and sick days
  • adding recursion was raised by several faculty last month - Cathy L and Danny A said that they cover it in detail in DSA555/BTP500 - the meeting decided to exclude this topic from the notes, web sites and subject outline but nevertheless leave instructors free to introduce it in 1st semester
  • Cathy L does not like the new web site notes
  • Cathy L has setup a wiki for faculty to collaborate on making their own notes as an alternative to Chris S' notes
    Cathy L has started uploading Evan W's notes to the wiki
    Chris S has added on each page of the web site a link to Cathy L's wiki on matrix
  • Cathy L noted that not all faculty covered the agreed changes this semester
  • Sorry I missed the meeting. Anyway FWIW I think we should add more content to IPC144 - such as structs malloc and all operators including bitwise. Just my 2¢....Selmys
  • Cathy L wanted to add structs also
  • Chris S produced a pdf that can be printed as a text to be sold in the Bookstore
  • full changes and the new text are being introduced in Fall 2013
  • Cathy L has developed videos up to selection constructs

OOP244/BTP200

  • https://scs.senecac.on.ca/~oop244/pages.141/content/index.html
  • Working Draft of the Standard (n3337)
  • structs removed to IPC144/BTP100
  • auto added
  • nullptr replaces NULL
  • keywords filled in
  • first draft completed including file objects, function templates and abstract base classes
  • standards history brought up to date
  • a few more diagrams added
  • outcomes and quotes reviewed
  • Danny A disagreed to adding abstract base classes, function templates and file objects and voiced his concern that there was barely enough time to introduce inheritance - although there was no consensus reached on this point, Chris S will move forward with the additions and we will see what happens
  • Sorry I am late to respond, generally I agree we should follow Chris S notes and I would like encourage newer practices found in C11 for IPC144/OOP344, and in C++0x for OOP244/OOP344. This means stuff like using auto to let compiler decipher type, nullptr to initialize pointers. Students should also learn how to debug programs that are not working based on error messages from compiler, crashes, incorrect programming practices. Making a mistake is ok but repeatedly not initializing pointers, local variables, etc. is a common reason for frustration. Just my thoughts - MF

Issues Raised and Resolved - First Draft

  • method or member functions - revert to member functions for C++
  • start with using namespace std; and cout - then switch to std::cout once header file requires iostream - header file should not include using namespace std
  • unit tests - two sections added - in Modular Programming (week 1) - in Abstract Base Classes (week 11)

Issues Raised and Resolved - Final Draft

  • optional sections for 244 decided
  • copy ctors and = ops moved just after Current Object
  • virtual functions and abstract base classes moved ahead of templates
  • appendix on library functions added

OOP344/BTP300

  • Gathering requests to be considered for inclusion in 344/300 until Feb 21 2014
  • Requests will be classed under 3 categories - mandatory, optional, excluded
  • Discussions on requested items closing date April 4

Suggested Topics for Inclusion (not decided)

  • pthreads - CMS
  • rvalue references and move constructors - CMS
  • constexpr - CMS
  • extern template - CMS
  • initializer lists - CMS
  • range based for - CMS
  • function objects, lambda expressions - CMS
  • Makefiles - CMS
  • assertions - CMS

Proposed Learning Outcomes

aligned with C# and Java follow up courses - deadline for feedback Feb 28

  • describe and implement inheritance using abstract base classes, interfaces, and multiple base classes
  • describe and implement polymorphism using templates and virtual functions
  • describe and implement data management using linked lists
  • apply established algorithms to programming solutions using standard libraries
  • describe separation of concerns using patterns, encapsulation, and closures
  • describe and implement programming solutions for multi-processor hardware using multi-threading
  • describe and implement persistent storage of objects using file streams

To Be Done

  • IPC144/BTP100
  • OOP244/BTP200
    • Chris S to upgrade the web site to include the agreed C++11 changes by mid-October 2013 - first draft is complete - done
    • Chris S to produce pdf by mid-October 2013 - done
    • full changes and notes will be introduced in Winter 2014 - done
  • OOP344/BTP300
    • Chris S to prepare full subject outlines by end of the semester
    • full changes and notes will be introduced in Fall 2014
    • Chris S to reach agreement with Fardad on all changes
    • Fardad requests lab tutor for 2 + 2 to succeed - lab assistants will be available (MLM)
  • JAC444/MAP524 for CPA
    • Selmys suggests replacing JAC444 with MAP524 OR allowing students to choose one, because
      • Both JAC444 and MAP524 are introductions to Java for C++ programmers. The essential difference is that MAP524 uses the Android/Google API while JAC444 uses the older Java APIs (eg Swing/AWT).
      • Introduces students to Android development earlier (4th semester instead of 5th).
      • Android is the world's most popular mobile platform.

Curriculum Development (2012, 2013)

The principal objectives of these sessions are

to align the programming stream courses with the C11 and C++11 standards
to address the success rate of first semester students in the CPA program
to move towards alignment with Java courses

Resolved Allocation Issues

  • Data Representation needs to be taught in first semester in another stream
binary - hex | hex - decimal
  • IPC144/BTP100
add variable length arrays - done
add const - done
add pointer - array equivalence - done
trivial additions to align with standard (see detail page)
remove gets() - done
assign a problem that requires the application of integer data rep knowledge taught in another course in the first half
  • OOP244/BTP200
move namespace definition to start - done
add inline functions - done
add parameter defaults - done
add simple file objects
move type safe casting nearer start
add simple function templates to polymorphism
add abstract base classes
trivial additions to align with standard (see detail page)
  • OOP344/BTP300
add multi-threading
add rvalues and move constructors
trivial additions to align with standard (see detail page)
  • Beyond OOP344/BTP300
trivial additions to align with standard (see detail page)

Delivery Issues

  • Committee for IPC144 has been struck - held first meeting - will reconvene
  • Danny, Sunny, and Mark will try applying Chris' timeline over the summer 2012 to enable the introduction of inheritance earlier in the semester

To Be Done

  • update learning outcomes to suit
OOP244 Proposed Subject Outline
BTP200 Proposed Subject Outline
  • decide which sections to make optional and which to relegate to appendices
  • update 244/200 course notes to reflect these changes
  • prepare 144/100 course notes to reflect these changes - done
  • agree timeline for implementing changes - done
Proposed Timeline for Implementation


Ongoing Issues

marketing

  • what is the market saying
  • what do we market now and how
  • how do we attract the best and the brightest to our programs

employability

faculty education

impact of social media

  • how will we interface with social media
  • personal learning environments

delivery

techniques and tools

  • which platforms should we be using
    gnu - which version
    clang as an alternate compiler for C/C++ (might need a separate installation request to ITS each time)
    visual studio
  • how early should students be exposed to open source tools
    using open source, instead of teaching open source? (repos, wikis, blogging, online collaboration tools)
  • how early should students work with repositories
    1. in early semesters, using repos as individual drop box, and versioning and then move to collaboration features in later semesters
    2. which repositories should be introduced?

collaboration

  • should students work in teams in OOP344, BTP300
    teamwork requires significantly more effort on the part of the instructor


Deferred Issues


Archives

should CPD include a professional option

  • for example, to take introductory game programming GAM666/DPS901
    • brings together programming and systems for the first time
    • top CPD students who enroll often do well in this course
  • faculty decided to keep the professional option