70 likes | 136 Views
This proposal outlines the motivation and goals for a new programming course, CS III, focusing on increasing CS majors' programming proficiency through real-world applications and professional techniques. It details what CS III should not cover and suggests topics, setup, techniques, and potential textbooks for the course.
E N D
CSIII Proposal Mikhail Nesterenko CS Faculty RetreatMay 3, 2013
Outline • motivation and goals • what CIII should not be • topics • setup and techniques • textbooks
Motivation and Goals • increase CS majors programming proficiency • experience modifying and maintaining code rather than designing it from scratch • focus on programming idioms and solving problems rather than learning novel tools • focus on application programming • use professional programmers’ rather than academic techniques • eventually make it a required course • following CSII • relative difficulty: a C-student from CII is able to complete the course
What CSIII Should Not Be the course should be fundamental, relatively stable, useful to all students/courses, relatively in-depth, distinct and separate from other courses taught in CS hence, no • specialized programming – no mobile, parallel, distributed, embedded, network, system, GPU programming, no specialized toolkits • software engineering – no version control, software development methodologies, software analysis, software lifecycle • different languages –no Python, Java, C#, Javascript, HTML … • algorithms or math – no sorting algorithms, extensive graph coverage, algorithm complexity, randomized algorithms, complex matrix manipulation, integrals, etc.
Topics • tools • virtual functions, inheritance, polymorphism • generic programming (templates) • UML • design patterns: composite, template method, abstract factory, singleton, visitor, builder, proxy • data structures(?): hash maps, 2-3/red-black trees • frameworks and libraries(?) • STL • Boost • Qt
Setup & Techniques • 4 credit hours: 2 lecture sessions + 1 lab session • instructor + TA (hopefully) • ~4 extensive projects divided into sub-projects due every week • techniques • modifying existing code • code critique/defense
Textbooks yet to be determined. Candidates • “Clean Code: A Handbook of Agile Software Craftsmanship” R.C. Martin – very nice but Java-oriented, not a textbook • “An Introduction to Design Patterns in C++ with Qt 4” by A. Ezust and P. Ezust -- to much QT, may be too simple • “Code Complete: A Practical Handbook of Software Construction” Steve McConnell – chatty, not a textbook, more appropriate as supplement for CSI • “Design Patterns: Elements of Reusable Object-Oriented Software” E. Gamma et al – somewhat dated, classic, may be too dense • “Modern C++ Design: Generic Programming and Design Patterns Applied” Alexandeskou – a bit dense • “Effective C++” Scott Meyer – looks about right, maybe a bit too much focused on C++