Transition from basic programming skills to a rigorous process of software development. Familiarization with higher level programming techniques (recursion, generic programming, stacks, queues, trees, searching, and sorting). Emphasizes connection between algorithmic thought and implementation. Prerequisite: minimum grade of 2.7 in CSS 161; co-requisite: CSSSKL 162.
In this course, you will transition from a focus on basic programming skills to applying those skills to solve problems. You will do this by learning to think of software development as a rigorous process, in which the actual programming is one of the smallest parts. You will be introduced to higher-level problem solving approaches, such as recursion and generic programming, and larger-scale organization and algorithms, like object orientation, lists, stacks, queues, searching, and sorting. You will gain familiarity with software development techniques, such as the importance of thinking about specifications, design, and testing before coding and the utility of incremental development in an exploratory environment. You will also develop an understanding of the mathematical nature of software development by examining the relationship algorithms, programs, and the underlying theory, including logic, sets, functions, number bases.
Student learning goals
Be able to apply the software engineering process (design, build, test) to software development problems.
Develop an understanding of and be able to apply higher-level problem solving approaches, such as recursion and generic programming.
Develop an understanding of and be able to apply programming constructs, such as object-orientation, lists, stacks, queues, searching, and sorting to software development.
Be able to connect mathematical/ algorithmic concepts (logic, sets, functions, number bases) to implementation.
Become familiar with algorithm development and analysis.
General method of instruction
Lectures, group problem-solving, assignments, laboratory assignments, written homework assignments, exams.
Minimum grade of 2.7 in CSS 161
Class assignments and grading
ASSIGNMENTS There will be 6-8 assignments in the class. The weight of each assignment will be governed by the number of points assigned to it; generally, each program will be worth 100 points and each written homework will be worth around 25–30 points. A specific assignment might have a different number of points (and thus a different weight). A student’s assignment average will be computed by summing the number of homework points you earned and dividing by the total possible. Programming assignments will be graded following a grading strategy2 based on previous quarters.
Assignment Submission Assignments will be turned in using Catalyst. The submission site will close promptly at the start of class. Late assignments will not be accepted and will be graded as zero. Extensions will not be given, unless something catastrophic occurs. These events should be discussed with me ahead of time, except in the case of an emergency (which should be well documented). You are welcome to turn in assignments early.
Remedial Assignments Remedial assignments are for those who have seriously attempted all questions (as judged by me) in an assignment (referred to as the main assignment), but have performed poorly in it, and want to improve their score. This remedial assignment will be handed on the day the main assignment grade is given. A student will get 5 days to complete the remedial assignment. The better grade between the main and the remedial assignment will be considered in the final course grade. The point of a remedial assignment is for a student to learn from their errors and improve their skills and performance. I would caution you against making this a habit as a remedial assignment will take away time from subsequent assignments (which may result in poor performance). Remedial assignments will be offered only for Programs 1 to 5.
Your grade will be composed of your performance on tests and homeworks, plus your classroom contributions as measured by lab reports and other in-class activities. Your course average will be computed as:
Assignments (6 – 8) 25% Mid-term exams (2) 40% (20% + 20%) Final exam (1) 25% Class and lab participation and contributions (attendance, lab reports, and activities) 10%
I will compute everyone’s quarter average based on the formula above. Decimal grades will be computed using the equivalences in the UW Catalog1, linearly interpolating between letter-grade boundaries. A shorthand summary of the qualitative meaning of letter grades is:
A Complete or near-complete mastery of all course subject matter. Participation in all or almost all labs. B Substantial mastery of most course material. Participation in all or almost all labs. C (above 2.0) To receive a decimal grade of 2.0 or above, you must have demonstrated sufficient mastery of the course material to, in my judgment, be capable of taking a course that has this one as a prerequisite (for example, CSS 263). It may be that your test and homework performance indicates better than ‘C’-level work, but that you have chosen not to participate in labs. Such work habits are also suggestive of future success.
Note that the prerequisite for CSS342 and CSS343 is a grade of 2.5 in this class.