Difference between revisions of "Programming Stream"
(→our courses) |
(→Curriculum Meeting December 3 2015) |
||
(205 intermediate revisions by 6 users not shown) | |||
Line 2: | Line 2: | ||
<br /> | <br /> | ||
− | '''Welcome to the Programming Stream Group at the School of | + | '''Welcome to the Programming Stream Group at the School of Information and Communications Technology |
'''<br /> | '''<br /> | ||
+ | <br /> | ||
+ | |||
+ | Redirect to [http://zenit.senecac.on.ca/wiki/index.php/ICT_Curriculum_Review/Refresh/Update_-_2012 Curriculum Review 2012 Overview Page] | ||
+ | |||
<br /> | <br /> | ||
= Introduction = | = Introduction = | ||
− | This wiki describes curriculum developments within the programming stream at the School of | + | 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 scope of the currently active projects is driven by | ||
** the general need to train professional programmers for direct entry into the workplace | ** the general need to train professional programmers for direct entry into the workplace | ||
Line 13: | Line 17: | ||
*** digital game programming industry | *** digital game programming industry | ||
*** open source communities for software developers | *** open source communities for software developers | ||
+ | *** emergence of parallel computing | ||
* The information reported here is being provided to | * The information reported here is being provided to | ||
− | ** inform members of the status quo | + | ** inform faculty members of the status quo |
− | ** solicit | + | ** solicit comments and criticisms from faculty |
== What can I do right now? == | == What can I do right now? == | ||
* add your name to the list of active members and identify your interest [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Members_20111 here] | * add your name to the list of active members and identify your interest [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Members_20111 here] | ||
− | * add your project(s) to the list of projects under development [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Work_in_Progress_20111 here] | + | * add your project(s) to the list of projects under development [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Work_in_Progress_20111 here] if you have any |
− | ** create your own project page describing your own | + | ** create your own project page describing your own contributions |
** add descriptions of your project(s) in detail to this wiki along with current status | ** add descriptions of your project(s) in detail to this wiki along with current status | ||
− | ** list the work that | + | ** list the work that remains to be done |
* add any testimonials you have received [http://zenit.senecac.on.ca/wiki/index.php/Programming_Market_Demand_20111 here] | * add any testimonials you have received [http://zenit.senecac.on.ca/wiki/index.php/Programming_Market_Demand_20111 here] | ||
* add information to any section of this wiki - quotes, data, testimonials, suggestions | * add information to any section of this wiki - quotes, data, testimonials, suggestions | ||
− | |||
<br /> | <br /> | ||
− | = Current Issues = | + | = Curriculum Development (2012, 2013, 2014) = |
− | == marketing == | + | The principal objectives of 2012's development were |
+ | * 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 | ||
+ | The principal objectives of 2013's development were | ||
+ | * 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 | ||
+ | The principal objectives of 2014's development are | ||
+ | * determine the content of 344/300 to be rolled out in the fall semester | ||
+ | * align 344/300 with successor courses and professional options to maximize the student success rates in the latter courses | ||
+ | === Initially 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 | ||
+ | == Course Specific == | ||
+ | === 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 | ||
+ | * [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf 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 | ||
+ | * message passing amongst objects - CMS | ||
+ | * event handling - CMS | ||
+ | * reflection - 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 | ||
+ | this initial draft was accepted in principle by the program coordinators | ||
+ | |||
+ | no feedback received from faculty regarding scope by the Feb 28 deadline | ||
+ | |||
+ | feedback from new hires on the phrasing itself | ||
+ | * CAE has strong opinions about the structure of learning outcomes, which are incompatible with the outcomes pr4oposed above | ||
+ | |||
+ | second draft in response | ||
+ | * implement/demonstrate inheritance relationships between objects using abstract base classes, interfaces, and multiple base classes | ||
+ | * implement/demonstrate polymorphic types using virtual functions and templates | ||
+ | * implement/demonstrate separation of concerns in object design using encapsulation, closures, and patterns | ||
+ | * implement multi-threaded solutions for multi-processor hardware using pThreads | ||
+ | * implement persistent storage of objects using file streams | ||
+ | * implement memory management using dynamic allocation and linked lists | ||
+ | * apply established algorithms to programming solutions using standard libraries | ||
+ | |||
+ | CMS subsequently found and distributed the following article by the ITiCSE Workgroup, which speaks to the uniqueness of computer science education with respect to generic educational taxonomies | ||
+ | * [http://kar.kent.ac.uk/23997/1/TaxonomyFuller.pdf Developing a Computer-Science-specific Learning Taxonomy] | ||
+ | |||
+ | ==== March 5 2014 ==== | ||
+ | ===== Pre-Meeting Notes ===== | ||
+ | * preliminary stats results under old curriculum: | ||
+ | ** students in MAP523, DSA555 and GPU610 tend to do poorly relative to their performance in OOP344 | ||
+ | ** students in other pro options tend to do better than they did in OOP344 | ||
+ | * faculty meeting scheduled for March 5 to review current state and steps forward | ||
+ | |||
+ | ===== Attendance 3 Sessions 10:00-11:35, 11:40-13:30, 14:00-15:00 ===== | ||
+ | Cathy Leung, Elliott Coleshill, Peter McIntyre, Mark Fernandes, Ian Tipson, Marcel Silva, Danny Abesdris, John Selmys, Andrew Smith, Sunny Shi, Peter Liu, Chris Szalwinski | ||
+ | |||
+ | ===== General Topics Discussed ===== | ||
+ | |||
+ | * IPC144 - CL - we should compress the list of topics covered in depth by all instructors in the course - CS asked CL to create a list of the key topics (variables, control flow, pointers, functions, arrays, structs, files) - CL students should be directed to other topics without spending too much time | ||
+ | * IPC144/BTP100 - JS, AS, IT, CS - malloc and free should be introduced in IPC144/BTP100 - would precede new and delete in second semester and set a better groundwork for understanding memory management and manipulation in third semester | ||
+ | * OOP244/BTP200 - Test 1 results show good distribution of grades - problem with high DNAs needs to be investigated | ||
+ | * ICA - CL - a non-credit pre-course should be created for students to learn basic tools and skills such as git at their own discretion - no objections | ||
+ | * CDOT - MF, CS, IT - skills specifically required for working in CDOT should be taught separately in a non-credit course run and taught by CDOT faculty - students who wish to work in CDOT should be encouraged to take these courses to improve their chances of getting hired at CDOT (no objection) | ||
+ | * Best Practices - DA, IT - a set of best teaching practices should be collected to assist faculty in the programming courses | ||
+ | * Fresh Assignments - CL, IT, MF - a culture of creating fresh assignments should encouraged - many faculty simply recycle old assignments (no objections, some skepticism) | ||
+ | * Stacked Assignments - IT, CL - students who have not completed one part of a stacked assignment should receive an object version of that assignment so as not to be held back relative to other students in the class | ||
+ | * Content Heavy - DA - DA noted that programming courses are still content heavy | ||
+ | * unit testing - AS - should be introduced gradually - several standard tools are available | ||
+ | |||
+ | * Data Management - MF, EC - students have very little understanding of memory - this needs to be improved | ||
+ | |||
+ | ===== OOP344/BTP300 ===== | ||
+ | Outcomes discussed: | ||
+ | * comfort with inheritance (abstract base classes, multiple inheritance), polymorphism (interfaces, virtual functions, templates), data management, data structures (linked lists and multi-dimensional arrays), standard template library, function objects, lambda expressions, collections of objects and containers, file streams | ||
+ | * remove cross-platform coding, variadic functions | ||
+ | * develop new assignments | ||
+ | |||
+ | Phrasing Outcomes: what is to be assessed must be clear (CS). Students learn Computer Science through thorough mastery of progressively more abstract schemas built on more fundamental ones (CS) | ||
+ | |||
+ | [[Image:ACM SIGSCE 39(4) 152.png|thumb|292px| Learning Taxonomy]] | ||
+ | |||
+ | ====== Third Draft Learning Outcomes ====== | ||
+ | synthesis of input and exclusions recommended to March 11 2014: | ||
+ | # model collections of objects using sequential containers | ||
+ | # implement allocation, access and deallocation of dynamic memory using multi-dimensional arrays and linked lists of objects | ||
+ | # model the hiding of information using function objects and closures | ||
+ | # model generalization and specialization of object properties using inheritance hierarchies, which include both single and multiple base classes | ||
+ | # implement polymorphic types using interfaces, virtual functions and templates (generics) | ||
+ | # implement solution artifacts using algorithms from the standard template library | ||
+ | # implement asynchronous execution within programming solutions using multi-threading | ||
+ | # implement persistent storage of objects and collections of objects using file stream objects | ||
+ | |||
+ | ====== Fourth Draft Learning Outcomes ====== | ||
+ | feedback: may have too many outcomes to cover (content bloat) - MF | ||
+ | |||
+ | revision to reduce the number of topics that must be tested (March 14 2014): | ||
+ | |||
+ | OOP344: | ||
+ | # model collections of objects using sequential containers, multi-dimensional arrays and linked lists | ||
+ | # model the hiding of information using function objects and closures | ||
+ | # model generalization and specialization of object properties using inheritance hierarchies | ||
+ | # model polymorphic types using interfaces, virtual functions and templates (generics) | ||
+ | # implement solution artifacts using algorithms from the standard template library | ||
+ | # implement asynchronous execution within programming solutions using multi-threading | ||
+ | |||
+ | BTP300: | ||
+ | # model collections of objects using sequential containers, multi-dimensional arrays and linked lists | ||
+ | # model the hiding of information using function objects and closures | ||
+ | # model generalization and specialization of object properties using inheritance hierarchies, including single and multiple base classes | ||
+ | # model polymorphic types using interfaces, virtual functions and templates (generics) | ||
+ | # implement solution artifacts using algorithms from the standard template library | ||
+ | # implement asynchronous execution within programming solutions using multi-threading | ||
+ | # implement persistent storage of objects and collections of objects using file stream objects | ||
+ | |||
+ | ====== Centre for Academic Excellence ====== | ||
+ | * CS unable to reach initial agreement with CAE - telephone conversation | ||
+ | ** VL (Valerie Lopes)'s opinion | ||
+ | *** finds verbs 'model' and 'implement' questionable | ||
+ | *** third part of outcome should answer the question why learn this | ||
+ | *** thinks that CVS (Credential Validation Service) would not accept these outcomes | ||
+ | *** thinks that PEQAB (Post-Secondary Education Quality Assessment Board) would not accept these outcomes | ||
+ | *** finds insufficient difference between OOP344 and BTP300 outcomes | ||
+ | ** CS's response | ||
+ | *** proposed learning outcomes are in the three-part format outlined by CAE - action verb | field of knowledge | assessment criteria | ||
+ | *** verbs of the two-dimensional matrix shown above express learning taxonomy for programming subjects notably better than popular generic verbs of hierarchical taxonomies | ||
+ | *** 'model' and 'implement' are ComSci jargon that differentiate productive activity in the construction of artifacts and have well-understood and specific meanings to subject experts | ||
+ | *** assessment criteria trump the question 'why learn this' as the third part of the outcome statement | ||
+ | *** there is agreement between diploma and degree coordinators regarding differences between OOP344 and BTP300 | ||
+ | * IT spoke with Kevin Pitts of CAE and received the following clarifications | ||
+ | ** the audience for approving learning outcomes is ministry employees who wish to know the purpose of each outcome (in addition to what we have proposed) | ||
+ | ** the learning outcomes for diploma and degree must not be identical - the ministry is watching for this | ||
+ | |||
+ | ====== Fifth Draft of the Learning Outcomes ====== | ||
+ | * CL objected to the wholesale removal of linked lists from OOP344 | ||
+ | * CS and IT propose adding tracing of a linked list | ||
+ | |||
+ | CAE requirements are <u>underlined</u>, additions and changes are in '''bold''' | ||
+ | |||
+ | OOP344: | ||
+ | |||
+ | # <u>design</u> collections of '''model''' objects using sequential containers and multi-dimensional arrays <u>to solve a systems or business problem</u> | ||
+ | # model information hiding using function objects and closures <u>to specialize a programming solution for a particular application</u> | ||
+ | # model generalization and specialization of object properties using inheritance hierarchies <u>to minimize the duplication of code</u> | ||
+ | # '''model polymorphic behavior''' using interfaces, virtual functions and templates (generics) <u>to amplify the reusability of code</u> | ||
+ | # implement solution artifacts using algorithms '''and iterators''' '''of''' the standard template library <u>to utilize existing technologies</u> | ||
+ | # implement '''concurrency''' within a programming solution using multi-threading '''libraries''' <u>to improve the performance of a program</u> | ||
+ | # '''trace the execution of a program that includes a linked list''' <u>to debug an application</u> | ||
+ | |||
+ | BTP300: | ||
+ | |||
+ | # <u>design</u> collections of '''model''' objects using sequential containers, multi-dimensional arrays '''and linked lists''' <u>to solve a complex systems or business problem</u> | ||
+ | # model information hiding using function objects and closures <u>to specialize a programming solution for a particular application</u> | ||
+ | # model generalization and specialization of object properties using inheritance hierarchies, including single and multiple base classes <u>to minimize the duplication of code in complex hierarchies</u> | ||
+ | # '''model polymorphic behavior''' using interfaces, virtual functions and templates (generics) <u>to amplify the reusability of code</u> | ||
+ | # implement solution artifacts using algorithms '''and iterators''' '''of''' the standard template library <u>to utilize existing technologies</u> | ||
+ | # implement '''concurrency''' within a programming solution using multi-threading '''libraries''' <u>to improve the performance of a program</u> | ||
+ | # implement '''persistence''' <s>of objects and collections of objects</s> using file stream objects <u>to backup data for future restoration</u> | ||
+ | # <s>trace the execution of program instructions that include a linked list</s> | ||
+ | |||
+ | ====== Sixth Draft of the Learning Outcomes ====== | ||
+ | * April 2 2014 | ||
+ | ** CL, IT and CS agreed to move linked lists to DSA555, move STL from DSA555 to OOP344, and add outcomes to OOP344 that address quadratic complexity and memory addressing | ||
+ | ** CL, IT and CS also edited the wording of the fifth draft | ||
+ | |||
+ | OOP344: | ||
+ | |||
+ | # design collections of model objects using sequential containers and multi-dimensional arrays to solve a systems or business problem | ||
+ | # create function objects and closures to customize a programming solution for a particular application | ||
+ | # model generalization and specialization using inheritance hierarchies to minimize the duplication of code | ||
+ | # model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code | ||
+ | # implement design components using algorithms of the standard template library to utilize existing technologies | ||
+ | # create program components of quadratic complexity to solve non-linear problems | ||
+ | # design program components using raw pointers and pointer arithmetic to access data in program memory | ||
+ | # design multi-tasked solutions using threading libraries to improve the performance of a program | ||
+ | |||
+ | BTP300: | ||
+ | |||
+ | # design collections of model objects using sequential containers and multi-dimensional arrays to solve a complex systems or business problem | ||
+ | # create function objects and closures to customize a programming solution for a particular application | ||
+ | # model generalization and specialization using single and multiple inheritance to minimize the duplication of code in complex hierarchies | ||
+ | # model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code | ||
+ | # implement design components using algorithms of the standard template library to utilize existing technologies | ||
+ | # create program components of quadratic complexity to solve non-linear problems | ||
+ | # design program components using raw pointers, pointer arithmetic, and smart pointers to access data in program memory | ||
+ | # design multi-tasked solutions using threading libraries to improve the performance of a program | ||
+ | # design file stream objects to backup text and binary data for future restoration | ||
+ | # trace the execution of program code that includes a linked list to debug an application | ||
+ | |||
+ | ====== Topics Covered in OOP344 BTP300 ====== | ||
+ | Proposals: | ||
+ | * CL add file stream objects binary to learning outcomes (CS do we want to mandate that this be tested?) | ||
+ | * CS correction to topics lists | ||
+ | ** Multi-Threading | ||
+ | *** thread, mutex, condition_variable classes | ||
+ | *** future class template | ||
+ | *** OpenMP directives | ||
+ | |||
+ | == To Be Done == | ||
+ | * IPC144/BTP100 | ||
+ | ** fix selection sort example | ||
+ | ** replace sorting applets with alternatives | ||
+ | ** revise chapter on structs so that it can be covered immediately following arrays and before strings | ||
+ | * 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 - done | ||
+ | ** full changes and notes will be introduced in Fall 2014 - done | ||
+ | ** Chris S and Fardad to agree 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. | ||
+ | |||
+ | == 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 ([http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_C11 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 - done | ||
+ | : move type safe casting nearer start | ||
+ | : add simple function templates to polymorphism - done | ||
+ | : add abstract base classes - done | ||
+ | : trivial additions to align with standard ([http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_C++11 see detail page]) | ||
+ | * OOP344/BTP300 | ||
+ | : full exposure to the standard template library - done | ||
+ | : conceptual-level introduction to linked lists - done | ||
+ | : add multi-threading - done | ||
+ | : add rvalues and move constructors - done | ||
+ | : trivial additions to align with standard ([http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_C11_C++11 see detail page]) | ||
+ | * Beyond OOP344/BTP300 | ||
+ | : DSA555/BTP500 to implement and model linked lists | ||
+ | : | ||
+ | : trivial additions to align with standard ([http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_C11_C++11_Exclusions 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 | ||
+ | : [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_OOP244_Subject_Outline OOP244 Proposed Subject Outline] | ||
+ | : [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_BTP200_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 | ||
+ | : [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Timeline Proposed Timeline for Implementation] | ||
+ | |||
+ | == Curriculum Meeting October 30 2014 == | ||
+ | [[File:Mid-Semester Meeting - F14.png|thumb|292px| Map of Revisions]] | ||
+ | * S2170 - 13:30 - 15:10 | ||
+ | * attendees: Mark Fernandes, Peter McIntyre, Sunny Shi, Mary Lynn Manton, Andrew Smith, Cathy Leung, Olivier St Cyr, Danny Abedris, Marcel Silva, Justin Denny, Joseph Hughes, Fardad Soleimanloo, Elliott Coleshill, Greg Blair, Tim McKenna, Marc Gurwitz, Chris Szalwinski | ||
+ | * Chris presented an overview of the curriculum revisions begun in the Winter of 2012, identifying the 2011 language standards and the college policy on experiential learning (the shift to a 2+2 mode of instruction across all three semesters) as the references for the revision: | ||
+ | * Chris presented the mid-semester Fall 2014 grades for all three semesters | ||
+ | * Feedback from instructors (thank you): | ||
+ | ** Lew Baxter has edited the IPC144/BTP100 notes extensively pages 1-58 | ||
+ | ** Justin Denney has edited the OOP244/BTP200 notes extensively | ||
+ | * Topics discussed in detail included: | ||
+ | ** teaching students debugging skills across all three semesters | ||
+ | *** emphasizing the process rather than the tricks or the tools | ||
+ | *** inserting an additional workshop in each semester dedicated to the debugging process | ||
+ | *** adding small debugging problems to the existing workshops | ||
+ | *** fair consensus on this issue | ||
+ | ** learning outcomes | ||
+ | *** Peter summarized plans in summer 2015 to review the learning outcomes for IPC144/BTP100 and OOP244/BTP200 to bring them to the same standard as OOP345/BTP305 | ||
+ | ** relationship between workshops and assignments | ||
+ | *** shift to more weight on the workshops 15% - 20% | ||
+ | *** faculty is clearly divided on this point | ||
+ | **** Cathy and Marcel wanted shorter, simpler workshops and deeper assignments, Cathy finds the workshops too mathy | ||
+ | **** Chris disagreed. Wants to make the assignments simpler and lighter - synthesis of the material covered in the workshops | ||
+ | * meeting concluded at 15:10 | ||
+ | |||
+ | |||
+ | === To Be Done === | ||
+ | * IPC144/BTP100 | ||
+ | ** fix selection sort example - done | ||
+ | ** replace sorting applets with alternatives | ||
+ | ** revise chapter on structs so that it can be covered immediately following arrays and before | ||
+ | ** incorporate Lew's corrections (pages 1-58) into the text and web site - done | ||
+ | ** Lew to review and edit remaining pages in the text | ||
+ | * OOP244/BTP200 | ||
+ | ** incorporate Justin's corrections into the text and the web site | ||
+ | * OOP345/BTP305 | ||
+ | ** to be determined | ||
+ | |||
+ | <br /> | ||
+ | |||
+ | == Curriculum Meeting December 17 2014 == | ||
+ | * T4040 14:30-15:55 | ||
+ | * Attendees: Greg Blair, Elliott Coleshill, Elnaz Delpisheh, Justin Denney, Mark Fernandes, Joseph Hughes, Hasan Kamal-Al-Deen, Cathy Leung, Mary Lynn Manton, Franz Newland, Olivier St Cyr, Yue (Sunny) Shi, Marcel Silva, Fardad Soleimanloo, Chris Szalwinski, Ian Tipson | ||
+ | * [[Media:The_New_Core_Programming_Curriculum_at_ICT.pdf | Fall Semester 2014 Report]] | ||
+ | * The faculty members made the following recommendations: | ||
+ | |||
+ | # Edit and clarify word problem descriptions on both tests and exams. Improve conciseness and remove ambiguity for students who are still in initial stages of learning the English language. Implement a standard template with which the students become familiar throughout the semester so that they spend minimum time determining what is being asked of them. The focus in semesters one and two should be on testing their programming skills only. Leave the requirements analysis to more dedicated courses that run in parallel or follow afterwards. | ||
+ | # Provide comprehensive and prompt feedback for each workshop submission in order to engage students. Hire part-time tutors for this purpose, leaving only the marking to the instructor. Tutor feedback should be available throughout the first three semesters. | ||
+ | # Hold review sessions outside class time for students who have found material too difficult to understand the first time around. Part-time tutors can run these review sessions on a weekly basis. | ||
+ | # Several faculty member expressed disappointment with the quality of service that learning center tutors provide. Comments included a lack of understanding of the more modern material being introduced and providing solutions instead of showing students how to find those solutions. | ||
+ | # Prefer two double-sided reference sheets to open book during tests and exams. | ||
+ | # Print test and exam papers in color. Students have found this particularly helpful in the reading of walkthrough problems. | ||
+ | # Learn applications of Cognitive Load Theory to the teaching of our programming subjects. The material covered in the Foundations of Teaching and Learning is insufficient for programming students. Faculty expressed an interest in a deeper understanding of cognitive psychology. | ||
+ | # Instructors need to step up to prepare labs for more variety beyond the default labs that are currently available. Several faculty members remarked that they do not have time to do so. | ||
+ | # Weekly coordination meetings in multi-section subjects are quite important. They allow instructors to share experience, help identify student difficulties across the sections, ensure that instructors are on the same page with respect to emphasis and provide more equitable assessments[MLM1] . | ||
+ | |||
+ | Fardad noted that in order to accommodate active learning by his students, he prepared all of his examples before class and would move them to the screen as he lectured. This saved considerable time over entering code which requires the students to wait for him to finish. Elliott noted that he too prepared his sample code off-line for the same purpose. | ||
+ | |||
+ | * [MLM] I’d like to see a recommendation for a mid-semester promo meeting for all first semester courses. This is over-and-above what this report represents but it also flags students struggling across all first semester subjects and may warrant a different kind of intervention than an individual subject intervention. | ||
+ | |||
+ | * Chris' Suggestions: | ||
+ | # Increase the weight of the workshops in BTP100 to 20% | ||
+ | # Normalize the weight of the workshops in IPC144 at 20% | ||
+ | # Turn the workshops into mini-assignments with one final project that integrates them as the sole assignment in each course | ||
+ | # Stress the importance of attendance – workshop periods are not optional | ||
+ | # Assist students who complete exercises and workshops yet fail their tests | ||
+ | # Embed in-class exercises within lectures – instructor circulates amongst students [MLM what about doing this as group or team in-class exercises. No more than 3 in a team. Reduces load on faculty and at the same time allows students to learn from each other. Ask a team to present their solution or many teams (e.g. Active Learning Classrooms are perfect for this(!) and then talk to a couple of teams’ proposed solution to get a sense of why some solutions are better than others.] | ||
+ | # Review and refine the learning outcomes for the 1st and 2nd semester courses | ||
+ | # Identify more optional sections in the subject web sites and in-house textbooks to reduce content without interrupting flow through the central core of the material | ||
+ | # Develop baskets of workshops for the courses to increase variety | ||
+ | |||
+ | * Chris' further suggestions: | ||
+ | |||
+ | # Learning Outcomes - Should the criteria for passing IPC144/BTP100 be defined primarily in terms of what is necessary to commence studying OOP244/BTP200 and those for passing OOP244/BTP200 be defined in terms of what is necessary to commence studying OOP345/BTP305? | ||
+ | # Should the core programming subjects move towards more practice and away from the final exam making it optional (so students can improve their grade)? | ||
+ | # Should we modify our policy of granting SUPs to include those weaker students who have completed the exercises, demonstrated effort throughout the course and only failed the final exam? | ||
+ | |||
+ | <br /> | ||
+ | |||
+ | == Start-Up Meeting September 8 2015 == | ||
+ | * T4040 14:30-15:45 | ||
+ | * Attendees: Ron Tarr, Ian Tipson, Catherine Leung, Peter Liu, Tim McKenna, Mark Fernandes, Marek Laskowski, Joseph Hughes, Hasan Kamal-al-Deen, Eden Burton, Fardad Soleimanloo, Patrick Crawford, Andrew Smith, Mariam Daoud, Mary Lynn Manton, Chris Szalwinski | ||
+ | * [[Media:Start-Up Meeting September 8 2015.pdf | Fall Semester 2015 Start Up Notes]] | ||
+ | |||
+ | == Curriculum Meeting October 8 2015 == | ||
+ | * S3007 15:30-17:00 | ||
+ | * Attendees: Peter McIntyre, Ian Tipson, Catherine Leung, Tim McKenna, Mark Fernandes, Elnaz Delipsheh, Fardad Soleimanloo, Patrick Crawford, Greg Blair, Sunny Shi, Mary Lynn Manton, Chris Szalwinski | ||
+ | * [[Media:Curriculum Meeting October 8 2015.pdf | Fall Semester 2015 Curriculum Meeting Notes]] | ||
+ | |||
+ | == Curriculum Meeting December 3 2015 == | ||
+ | * S1208 15:30-17:00 | ||
+ | * Attendees: Edgardo Arvelaez, Greg Blair, Arta Kogan, Eden Burton, Mark Fernandes, Rahul Thomas, Elliott Coleshill, Patrick Crawford, Elnaz Delpisheh, Fardad Soleimanloo, Catherine Leung, Mary Lynn Manton, Ian Tipson, Joseph Hughes, Hasan Kamal-al-deen, Chris Szalwinski | ||
+ | * [[Media:Curriculum Meeting December 3 2015.pdf | Fall Semester 2015 Curriculum Meeting 3 Notes]] | ||
+ | |||
+ | = Ongoing Issues = | ||
+ | == [http://zenit.senecac.on.ca/wiki/index.php/Programming_Market_Demand_20111 marketing] == | ||
* what is the market saying | * what is the market saying | ||
* what do we market now and how | * what do we market now and how | ||
* how do we attract the best and the brightest to our programs | * how do we attract the best and the brightest to our programs | ||
− | == | + | |
− | == | + | == employability == |
− | == | + | * [http://zenit.senecac.on.ca/wiki/index.php/Programming_Stream_Employability why do top employers reject our top students] |
− | * | + | == faculty education == |
− | * | + | * [http://zenit.senecac.on.ca/wiki/index.php/Faculty_Development a need exists for internal faculty professional development] |
+ | * [http://zenit.senecac.on.ca/wiki/index.php/Visual_Studio a birds of a feather group to discuss Visual Studio] | ||
+ | |||
+ | == impact of social media == | ||
+ | * how will we interface with social media | ||
+ | * personal learning environments | ||
+ | |||
+ | == delivery == | ||
=== techniques and tools === | === 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 | * 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 | * how early should students work with repositories | ||
+ | *:# in early semesters, using repos as individual drop box, and versioning and then move to collaboration features in later semesters | ||
+ | *:# which repositories should be introduced? | ||
+ | |||
+ | === On the Difficulty of Teaching Programming === | ||
+ | Here is a summary of the presentation I made on Tuesday January 6th, 2015 to discuss observations<br /> | ||
+ | and recommendations I made regarding our approach to delivering content in<br /> | ||
+ | introductory courses (specifically IPC144). | ||
+ | |||
+ | https://scs.senecac.on.ca/~danny.abesdris/programming/otdotp_aoj.txt.html | ||
+ | |||
=== collaboration === | === collaboration === | ||
* should students work in teams in OOP344, BTP300 | * should students work in teams in OOP344, BTP300 | ||
+ | *: teamwork requires significantly more effort on the part of the instructor | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br /> | <br /> | ||
= Deferred Issues = | = Deferred Issues = | ||
+ | <br /> | ||
+ | = 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 |
Latest revision as of 14:01, 5 January 2016
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
Contents
- 1 Introduction
- 2 Curriculum Development (2012, 2013, 2014)
- 2.1 Initially Resolved Issues
- 2.2 Course Specific
- 2.2.1 IPC144/BTP100
- 2.2.2 OOP244/BTP200
- 2.2.3 OOP344/BTP300
- 2.3 To Be Done
- 2.4 Resolved Allocation Issues
- 2.5 Delivery Issues
- 2.6 To Be Done
- 2.7 Curriculum Meeting October 30 2014
- 2.8 Curriculum Meeting December 17 2014
- 2.9 Start-Up Meeting September 8 2015
- 2.10 Curriculum Meeting October 8 2015
- 2.11 Curriculum Meeting December 3 2015
- 3 Ongoing Issues
- 4 Deferred Issues
- 5 Archives
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 (2012, 2013, 2014)
The principal objectives of 2012's development were
- 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
The principal objectives of 2013's development were
- 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
The principal objectives of 2014's development are
- determine the content of 344/300 to be rolled out in the fall semester
- align 344/300 with successor courses and professional options to maximize the student success rates in the latter courses
Initially 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
Course Specific
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
- message passing amongst objects - CMS
- event handling - CMS
- reflection - 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
this initial draft was accepted in principle by the program coordinators
no feedback received from faculty regarding scope by the Feb 28 deadline
feedback from new hires on the phrasing itself
- CAE has strong opinions about the structure of learning outcomes, which are incompatible with the outcomes pr4oposed above
second draft in response
- implement/demonstrate inheritance relationships between objects using abstract base classes, interfaces, and multiple base classes
- implement/demonstrate polymorphic types using virtual functions and templates
- implement/demonstrate separation of concerns in object design using encapsulation, closures, and patterns
- implement multi-threaded solutions for multi-processor hardware using pThreads
- implement persistent storage of objects using file streams
- implement memory management using dynamic allocation and linked lists
- apply established algorithms to programming solutions using standard libraries
CMS subsequently found and distributed the following article by the ITiCSE Workgroup, which speaks to the uniqueness of computer science education with respect to generic educational taxonomies
March 5 2014
Pre-Meeting Notes
- preliminary stats results under old curriculum:
- students in MAP523, DSA555 and GPU610 tend to do poorly relative to their performance in OOP344
- students in other pro options tend to do better than they did in OOP344
- faculty meeting scheduled for March 5 to review current state and steps forward
Attendance 3 Sessions 10:00-11:35, 11:40-13:30, 14:00-15:00
Cathy Leung, Elliott Coleshill, Peter McIntyre, Mark Fernandes, Ian Tipson, Marcel Silva, Danny Abesdris, John Selmys, Andrew Smith, Sunny Shi, Peter Liu, Chris Szalwinski
General Topics Discussed
- IPC144 - CL - we should compress the list of topics covered in depth by all instructors in the course - CS asked CL to create a list of the key topics (variables, control flow, pointers, functions, arrays, structs, files) - CL students should be directed to other topics without spending too much time
- IPC144/BTP100 - JS, AS, IT, CS - malloc and free should be introduced in IPC144/BTP100 - would precede new and delete in second semester and set a better groundwork for understanding memory management and manipulation in third semester
- OOP244/BTP200 - Test 1 results show good distribution of grades - problem with high DNAs needs to be investigated
- ICA - CL - a non-credit pre-course should be created for students to learn basic tools and skills such as git at their own discretion - no objections
- CDOT - MF, CS, IT - skills specifically required for working in CDOT should be taught separately in a non-credit course run and taught by CDOT faculty - students who wish to work in CDOT should be encouraged to take these courses to improve their chances of getting hired at CDOT (no objection)
- Best Practices - DA, IT - a set of best teaching practices should be collected to assist faculty in the programming courses
- Fresh Assignments - CL, IT, MF - a culture of creating fresh assignments should encouraged - many faculty simply recycle old assignments (no objections, some skepticism)
- Stacked Assignments - IT, CL - students who have not completed one part of a stacked assignment should receive an object version of that assignment so as not to be held back relative to other students in the class
- Content Heavy - DA - DA noted that programming courses are still content heavy
- unit testing - AS - should be introduced gradually - several standard tools are available
- Data Management - MF, EC - students have very little understanding of memory - this needs to be improved
OOP344/BTP300
Outcomes discussed:
- comfort with inheritance (abstract base classes, multiple inheritance), polymorphism (interfaces, virtual functions, templates), data management, data structures (linked lists and multi-dimensional arrays), standard template library, function objects, lambda expressions, collections of objects and containers, file streams
- remove cross-platform coding, variadic functions
- develop new assignments
Phrasing Outcomes: what is to be assessed must be clear (CS). Students learn Computer Science through thorough mastery of progressively more abstract schemas built on more fundamental ones (CS)
Third Draft Learning Outcomes
synthesis of input and exclusions recommended to March 11 2014:
- model collections of objects using sequential containers
- implement allocation, access and deallocation of dynamic memory using multi-dimensional arrays and linked lists of objects
- model the hiding of information using function objects and closures
- model generalization and specialization of object properties using inheritance hierarchies, which include both single and multiple base classes
- implement polymorphic types using interfaces, virtual functions and templates (generics)
- implement solution artifacts using algorithms from the standard template library
- implement asynchronous execution within programming solutions using multi-threading
- implement persistent storage of objects and collections of objects using file stream objects
Fourth Draft Learning Outcomes
feedback: may have too many outcomes to cover (content bloat) - MF
revision to reduce the number of topics that must be tested (March 14 2014):
OOP344:
- model collections of objects using sequential containers, multi-dimensional arrays and linked lists
- model the hiding of information using function objects and closures
- model generalization and specialization of object properties using inheritance hierarchies
- model polymorphic types using interfaces, virtual functions and templates (generics)
- implement solution artifacts using algorithms from the standard template library
- implement asynchronous execution within programming solutions using multi-threading
BTP300:
- model collections of objects using sequential containers, multi-dimensional arrays and linked lists
- model the hiding of information using function objects and closures
- model generalization and specialization of object properties using inheritance hierarchies, including single and multiple base classes
- model polymorphic types using interfaces, virtual functions and templates (generics)
- implement solution artifacts using algorithms from the standard template library
- implement asynchronous execution within programming solutions using multi-threading
- implement persistent storage of objects and collections of objects using file stream objects
Centre for Academic Excellence
- CS unable to reach initial agreement with CAE - telephone conversation
- VL (Valerie Lopes)'s opinion
- finds verbs 'model' and 'implement' questionable
- third part of outcome should answer the question why learn this
- thinks that CVS (Credential Validation Service) would not accept these outcomes
- thinks that PEQAB (Post-Secondary Education Quality Assessment Board) would not accept these outcomes
- finds insufficient difference between OOP344 and BTP300 outcomes
- CS's response
- proposed learning outcomes are in the three-part format outlined by CAE - action verb | field of knowledge | assessment criteria
- verbs of the two-dimensional matrix shown above express learning taxonomy for programming subjects notably better than popular generic verbs of hierarchical taxonomies
- 'model' and 'implement' are ComSci jargon that differentiate productive activity in the construction of artifacts and have well-understood and specific meanings to subject experts
- assessment criteria trump the question 'why learn this' as the third part of the outcome statement
- there is agreement between diploma and degree coordinators regarding differences between OOP344 and BTP300
- VL (Valerie Lopes)'s opinion
- IT spoke with Kevin Pitts of CAE and received the following clarifications
- the audience for approving learning outcomes is ministry employees who wish to know the purpose of each outcome (in addition to what we have proposed)
- the learning outcomes for diploma and degree must not be identical - the ministry is watching for this
Fifth Draft of the Learning Outcomes
- CL objected to the wholesale removal of linked lists from OOP344
- CS and IT propose adding tracing of a linked list
CAE requirements are underlined, additions and changes are in bold
OOP344:
- design collections of model objects using sequential containers and multi-dimensional arrays to solve a systems or business problem
- model information hiding using function objects and closures to specialize a programming solution for a particular application
- model generalization and specialization of object properties using inheritance hierarchies to minimize the duplication of code
- model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code
- implement solution artifacts using algorithms and iterators of the standard template library to utilize existing technologies
- implement concurrency within a programming solution using multi-threading libraries to improve the performance of a program
- trace the execution of a program that includes a linked list to debug an application
BTP300:
- design collections of model objects using sequential containers, multi-dimensional arrays and linked lists to solve a complex systems or business problem
- model information hiding using function objects and closures to specialize a programming solution for a particular application
- model generalization and specialization of object properties using inheritance hierarchies, including single and multiple base classes to minimize the duplication of code in complex hierarchies
- model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code
- implement solution artifacts using algorithms and iterators of the standard template library to utilize existing technologies
- implement concurrency within a programming solution using multi-threading libraries to improve the performance of a program
- implement persistence
of objects and collections of objectsusing file stream objects to backup data for future restoration -
trace the execution of program instructions that include a linked list
Sixth Draft of the Learning Outcomes
- April 2 2014
- CL, IT and CS agreed to move linked lists to DSA555, move STL from DSA555 to OOP344, and add outcomes to OOP344 that address quadratic complexity and memory addressing
- CL, IT and CS also edited the wording of the fifth draft
OOP344:
- design collections of model objects using sequential containers and multi-dimensional arrays to solve a systems or business problem
- create function objects and closures to customize a programming solution for a particular application
- model generalization and specialization using inheritance hierarchies to minimize the duplication of code
- model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code
- implement design components using algorithms of the standard template library to utilize existing technologies
- create program components of quadratic complexity to solve non-linear problems
- design program components using raw pointers and pointer arithmetic to access data in program memory
- design multi-tasked solutions using threading libraries to improve the performance of a program
BTP300:
- design collections of model objects using sequential containers and multi-dimensional arrays to solve a complex systems or business problem
- create function objects and closures to customize a programming solution for a particular application
- model generalization and specialization using single and multiple inheritance to minimize the duplication of code in complex hierarchies
- model polymorphic behavior using interfaces, virtual functions and templates (generics) to amplify the reusability of code
- implement design components using algorithms of the standard template library to utilize existing technologies
- create program components of quadratic complexity to solve non-linear problems
- design program components using raw pointers, pointer arithmetic, and smart pointers to access data in program memory
- design multi-tasked solutions using threading libraries to improve the performance of a program
- design file stream objects to backup text and binary data for future restoration
- trace the execution of program code that includes a linked list to debug an application
Topics Covered in OOP344 BTP300
Proposals:
- CL add file stream objects binary to learning outcomes (CS do we want to mandate that this be tested?)
- CS correction to topics lists
- Multi-Threading
- thread, mutex, condition_variable classes
- future class template
- OpenMP directives
- Multi-Threading
To Be Done
- IPC144/BTP100
- fix selection sort example
- replace sorting applets with alternatives
- revise chapter on structs so that it can be covered immediately following arrays and before strings
- 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 - done
- full changes and notes will be introduced in Fall 2014 - done
- Chris S and Fardad to agree 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.
- Selmys suggests replacing JAC444 with MAP524 OR allowing students to choose one, because
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 - done
- move type safe casting nearer start
- add simple function templates to polymorphism - done
- add abstract base classes - done
- trivial additions to align with standard (see detail page)
- OOP344/BTP300
- full exposure to the standard template library - done
- conceptual-level introduction to linked lists - done
- add multi-threading - done
- add rvalues and move constructors - done
- trivial additions to align with standard (see detail page)
- Beyond OOP344/BTP300
- DSA555/BTP500 to implement and model linked lists
- 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
- 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
Curriculum Meeting October 30 2014
- S2170 - 13:30 - 15:10
- attendees: Mark Fernandes, Peter McIntyre, Sunny Shi, Mary Lynn Manton, Andrew Smith, Cathy Leung, Olivier St Cyr, Danny Abedris, Marcel Silva, Justin Denny, Joseph Hughes, Fardad Soleimanloo, Elliott Coleshill, Greg Blair, Tim McKenna, Marc Gurwitz, Chris Szalwinski
- Chris presented an overview of the curriculum revisions begun in the Winter of 2012, identifying the 2011 language standards and the college policy on experiential learning (the shift to a 2+2 mode of instruction across all three semesters) as the references for the revision:
- Chris presented the mid-semester Fall 2014 grades for all three semesters
- Feedback from instructors (thank you):
- Lew Baxter has edited the IPC144/BTP100 notes extensively pages 1-58
- Justin Denney has edited the OOP244/BTP200 notes extensively
- Topics discussed in detail included:
- teaching students debugging skills across all three semesters
- emphasizing the process rather than the tricks or the tools
- inserting an additional workshop in each semester dedicated to the debugging process
- adding small debugging problems to the existing workshops
- fair consensus on this issue
- learning outcomes
- Peter summarized plans in summer 2015 to review the learning outcomes for IPC144/BTP100 and OOP244/BTP200 to bring them to the same standard as OOP345/BTP305
- relationship between workshops and assignments
- shift to more weight on the workshops 15% - 20%
- faculty is clearly divided on this point
- Cathy and Marcel wanted shorter, simpler workshops and deeper assignments, Cathy finds the workshops too mathy
- Chris disagreed. Wants to make the assignments simpler and lighter - synthesis of the material covered in the workshops
- teaching students debugging skills across all three semesters
- meeting concluded at 15:10
To Be Done
- IPC144/BTP100
- fix selection sort example - done
- replace sorting applets with alternatives
- revise chapter on structs so that it can be covered immediately following arrays and before
- incorporate Lew's corrections (pages 1-58) into the text and web site - done
- Lew to review and edit remaining pages in the text
- OOP244/BTP200
- incorporate Justin's corrections into the text and the web site
- OOP345/BTP305
- to be determined
Curriculum Meeting December 17 2014
- T4040 14:30-15:55
- Attendees: Greg Blair, Elliott Coleshill, Elnaz Delpisheh, Justin Denney, Mark Fernandes, Joseph Hughes, Hasan Kamal-Al-Deen, Cathy Leung, Mary Lynn Manton, Franz Newland, Olivier St Cyr, Yue (Sunny) Shi, Marcel Silva, Fardad Soleimanloo, Chris Szalwinski, Ian Tipson
- Fall Semester 2014 Report
- The faculty members made the following recommendations:
- Edit and clarify word problem descriptions on both tests and exams. Improve conciseness and remove ambiguity for students who are still in initial stages of learning the English language. Implement a standard template with which the students become familiar throughout the semester so that they spend minimum time determining what is being asked of them. The focus in semesters one and two should be on testing their programming skills only. Leave the requirements analysis to more dedicated courses that run in parallel or follow afterwards.
- Provide comprehensive and prompt feedback for each workshop submission in order to engage students. Hire part-time tutors for this purpose, leaving only the marking to the instructor. Tutor feedback should be available throughout the first three semesters.
- Hold review sessions outside class time for students who have found material too difficult to understand the first time around. Part-time tutors can run these review sessions on a weekly basis.
- Several faculty member expressed disappointment with the quality of service that learning center tutors provide. Comments included a lack of understanding of the more modern material being introduced and providing solutions instead of showing students how to find those solutions.
- Prefer two double-sided reference sheets to open book during tests and exams.
- Print test and exam papers in color. Students have found this particularly helpful in the reading of walkthrough problems.
- Learn applications of Cognitive Load Theory to the teaching of our programming subjects. The material covered in the Foundations of Teaching and Learning is insufficient for programming students. Faculty expressed an interest in a deeper understanding of cognitive psychology.
- Instructors need to step up to prepare labs for more variety beyond the default labs that are currently available. Several faculty members remarked that they do not have time to do so.
- Weekly coordination meetings in multi-section subjects are quite important. They allow instructors to share experience, help identify student difficulties across the sections, ensure that instructors are on the same page with respect to emphasis and provide more equitable assessments[MLM1] .
Fardad noted that in order to accommodate active learning by his students, he prepared all of his examples before class and would move them to the screen as he lectured. This saved considerable time over entering code which requires the students to wait for him to finish. Elliott noted that he too prepared his sample code off-line for the same purpose.
- [MLM] I’d like to see a recommendation for a mid-semester promo meeting for all first semester courses. This is over-and-above what this report represents but it also flags students struggling across all first semester subjects and may warrant a different kind of intervention than an individual subject intervention.
- Chris' Suggestions:
- Increase the weight of the workshops in BTP100 to 20%
- Normalize the weight of the workshops in IPC144 at 20%
- Turn the workshops into mini-assignments with one final project that integrates them as the sole assignment in each course
- Stress the importance of attendance – workshop periods are not optional
- Assist students who complete exercises and workshops yet fail their tests
- Embed in-class exercises within lectures – instructor circulates amongst students [MLM what about doing this as group or team in-class exercises. No more than 3 in a team. Reduces load on faculty and at the same time allows students to learn from each other. Ask a team to present their solution or many teams (e.g. Active Learning Classrooms are perfect for this(!) and then talk to a couple of teams’ proposed solution to get a sense of why some solutions are better than others.]
- Review and refine the learning outcomes for the 1st and 2nd semester courses
- Identify more optional sections in the subject web sites and in-house textbooks to reduce content without interrupting flow through the central core of the material
- Develop baskets of workshops for the courses to increase variety
- Chris' further suggestions:
- Learning Outcomes - Should the criteria for passing IPC144/BTP100 be defined primarily in terms of what is necessary to commence studying OOP244/BTP200 and those for passing OOP244/BTP200 be defined in terms of what is necessary to commence studying OOP345/BTP305?
- Should the core programming subjects move towards more practice and away from the final exam making it optional (so students can improve their grade)?
- Should we modify our policy of granting SUPs to include those weaker students who have completed the exercises, demonstrated effort throughout the course and only failed the final exam?
Start-Up Meeting September 8 2015
- T4040 14:30-15:45
- Attendees: Ron Tarr, Ian Tipson, Catherine Leung, Peter Liu, Tim McKenna, Mark Fernandes, Marek Laskowski, Joseph Hughes, Hasan Kamal-al-Deen, Eden Burton, Fardad Soleimanloo, Patrick Crawford, Andrew Smith, Mariam Daoud, Mary Lynn Manton, Chris Szalwinski
- Fall Semester 2015 Start Up Notes
Curriculum Meeting October 8 2015
- S3007 15:30-17:00
- Attendees: Peter McIntyre, Ian Tipson, Catherine Leung, Tim McKenna, Mark Fernandes, Elnaz Delipsheh, Fardad Soleimanloo, Patrick Crawford, Greg Blair, Sunny Shi, Mary Lynn Manton, Chris Szalwinski
- Fall Semester 2015 Curriculum Meeting Notes
Curriculum Meeting December 3 2015
- S1208 15:30-17:00
- Attendees: Edgardo Arvelaez, Greg Blair, Arta Kogan, Eden Burton, Mark Fernandes, Rahul Thomas, Elliott Coleshill, Patrick Crawford, Elnaz Delpisheh, Fardad Soleimanloo, Catherine Leung, Mary Lynn Manton, Ian Tipson, Joseph Hughes, Hasan Kamal-al-deen, Chris Szalwinski
- Fall Semester 2015 Curriculum Meeting 3 Notes
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
- a need exists for internal faculty professional development
- a birds of a feather group to discuss Visual Studio
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
- in early semesters, using repos as individual drop box, and versioning and then move to collaboration features in later semesters
- which repositories should be introduced?
On the Difficulty of Teaching Programming
Here is a summary of the presentation I made on Tuesday January 6th, 2015 to discuss observations
and recommendations I made regarding our approach to delivering content in
introductory courses (specifically IPC144).
https://scs.senecac.on.ca/~danny.abesdris/programming/otdotp_aoj.txt.html
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