Wed Apr 24 13:28:26 2013
Approvals Received: |
|
|
---|---|---|
Approvals Pending: | College/Dean > Provost > Catalog | |
Effective Status: | Active | |
Effective Term: | 1139 - Fall 2013 | |
Course: | CSCI 2041 | |
Institution: Campus: |
UMNTC - Twin Cities UMNTC - Twin Cities |
|
Career: | UGRD | |
College: | TIOT - College of Science and Engineering | |
Department: | 11108 - Computer Science & Eng | |
General | ||
Course Title Short: | Adv. Programming Principles | |
Course Title Long: | Advanced Programming Principles | |
Max-Min Credits for Course: |
4.0 to 4.0 credit(s) | |
Catalog Description: |
Principles and techniques for creating correct, robust, and modular programs. Computing with symbolic data, recursion and induction, functional programming, impact of evaluation strategies, parallelism. Organizing data and computations around types. Search-based programming, concurrency, modularity. Practical application. Weekly labs. | |
Print in Catalog?: | Yes | |
CCE Catalog Description: |
<no text provided> | |
Grading Basis: | Stdnt Opt | |
Topics Course: | No | |
Honors Course: | No | |
Online Course: | No | |
Instructor Contact Hours: |
4.0 hours per week | |
Years most frequently offered: |
Every academic year | |
Term(s) most frequently offered: |
Fall, Spring | |
Component 1: |
LEC (with final exam) | |
Component 2: |
LAB (no final exam) |
|
Auto-Enroll Course: |
Yes | |
Graded Component: |
LAB | |
Academic Progress Units: |
Not allowed to bypass limits. 4.0 credit(s) |
|
Financial Aid Progress Units: |
Not allowed to bypass limits. 4.0 credit(s) |
|
Repetition of Course: |
Repetition not allowed. | |
Course Prerequisites for Catalog: |
[1913 or 1933], 2011 | |
Course Equivalency: |
No course equivalencies | |
Consent Requirement: |
No required consent | |
Enforced Prerequisites: (course-based or non-course-based) |
No prerequisites | |
Editor Comments: | <no text provided> | |
Proposal Changes: | <no text provided> | |
History Information: | <no text provided> | |
Faculty Sponsor Name: |
Maria Gini | |
Faculty Sponsor E-mail Address: |
gini@cs.umn.edu | |
Student Learning Outcomes | ||
Student Learning Outcomes: |
* Student in the course:
- Can identify, define, and solve problems
Please explain briefly how this outcome will be addressed in the course. Give brief examples of class work related to the outcome. The class is focused on principles that underlie the structure and analysis of programs and data. Students will learn different programming styles, such as those based on functional programming, search-based programming, and concurrent programming, and will learn to program over symbolic structures. Underlying the course will be two or three medium sized programming projects where students will learn about modular development of programs and language principles to support modularity. How will you assess the students' learning related to this outcome? Give brief examples of how class work related to the outcome will be evaluated. This SLO will be assessed through labs, homeworks, and exams. Each of these types of students' work is problem-based; most involve open-ended problems where students need first to identify, define, and/or clarify what the problem is before solving it, and explain the solution they propose. | |
Liberal Education | ||
Requirement this course fulfills: |
None | |
Other requirement this course fulfills: |
None | |
Criteria for Core Courses: |
Describe how the course meets the specific bullet points for the proposed core
requirement. Give concrete and detailed examples for the course syllabus, detailed
outline, laboratory material, student projects, or other instructional materials or method.
Core courses must meet the following requirements:
<no text provided> |
|
Criteria for Theme Courses: |
Describe how the course meets the specific bullet points for the proposed theme
requirement. Give concrete and detailed examples for the course syllabus, detailed outline,
laboratory material, student projects, or other instructional materials or methods. Theme courses have the common goal of cultivating in students a number of habits of mind:
<no text provided> |
|
LE Recertification-Reflection Statement: (for LE courses being re-certified only) |
<no text provided> | |
Writing Intensive | ||
Propose this course as Writing Intensive curriculum: |
No | |
Question 1 (see CWB Requirement 1): |
How do writing assignments and writing instruction further the learning objectives
of this course and how is writing integrated into the course? Note that the syllabus must
reflect the critical role that writing plays in the course. <no text provided> |
|
Question 2 (see CWB Requirement 2): |
What types of writing (e.g., research papers, problem sets, presentations,
technical documents, lab reports, essays, journaling etc.) will be assigned? Explain how these
assignments meet the requirement that writing be a significant part of the course work, including
details about multi-authored assignments, if any. Include the required length for each writing
assignment and demonstrate how the minimum word count (or its equivalent) for finished writing will
be met. <no text provided> |
|
Question 3 (see CWB Requirement 3): |
How will students' final course grade depend on their writing performance?
What percentage of the course grade will depend on the quality and level of the student's writing
compared to the percentage of the grade that depends on the course content? Note that this information
must also be on the syllabus. <no text provided> |
|
Question 4 (see CWB Requirement 4): |
Indicate which assignment(s) students will be required to revise and resubmit after
feedback from the instructor. Indicate who will be providing the feedback. Include an example of the
assignment instructions you are likely to use for this assignment or assignments. <no text provided> |
|
Question 5 (see CWB Requirement 5): |
What types of writing instruction will be experienced by students? How much class
time will be devoted to explicit writing instruction and at what points in the semester? What types of
writing support and resources will be provided to students? <no text provided> |
|
Question 6 (see CWB Requirement 6): |
If teaching assistants will participate in writing assessment and writing instruction,
explain how will they be trained (e.g. in how to review, grade and respond to student writing) and how will
they be supervised. If the course is taught in multiple sections with multiple faculty (e.g. a capstone
directed studies course), explain how every faculty mentor will ensure that their students will receive
a writing intensive experience. <no text provided> |
|
Readme link.
Course Syllabus requirement section begins below
|
||
Course Syllabus | ||
Course Syllabus: |
For new courses and courses in which changes in content and/or description and/or credits
are proposed, please provide a syllabus that includes the following information: course goals
and description; format;structure of the course (proposed number of instructor contact
hours per week, student workload effort per week, etc.); topics to be covered; scope and
nature of assigned readings (text, authors, frequency, amount per week); required course
assignments; nature of any student projects; and how students will be
evaluated. The University "Syllabi Policy" can be
found here
The University policy on credits is found under Section 4A of "Standards for Semester Conversion" found here. Course syllabus information will be retained in this system until new syllabus information is entered with the next major course modification. This course syllabus information may not correspond to the course as offered in a particular semester. (Please limit text to about 12 pages. Text copied and pasted from other sources will not retain formatting and special characters might not copy properly.) Sample syllabus This is a required course for computer science majors that is to be taken at the end of the sophomore year or the beginning of the junior year. The course will use a functional language to introduce a high-level approach to programming over complex data. It will emphasize a view of such data that abstracts away from their representation, using types as a vehicle for organizing them as values and for structuring computations over them. Advanced programming techniques that use ideas such as recursion, higher-order functions, lazy and eager forms of evaluation and infinite data objects will be explored. Exploitation of parallelism arising from pure forms of expression evaluation will be examined. Other techniques and principles to be studied include search-based programming, modularity and concurrency. Programming projects that focus on symbolic computation will be used in a central way to impart the core ideas in the course; such projects may include writing parsers, type-checkers and interpreters for suitably circumscribed programming languages, and applications of search-based techniques. Why This Class is Important and its Role in the Curriculum Proficiency in programming is based on the ability to focus principally on the essential structure of data and computations over them, abstracting away from representational and architectural issues. By using a language that is liberated from the von-Neumann view, students will be exposed to this higher-level view of programming. This setting will also provide an easy way to explore varied programming techniques that can be effective in imperative and object-oriented languages as well but that are harder to introduce directly in such a context. Students will understand how to treat structurally complex objects such as programs as data, a topic that is intrinsic to several theoretical and practical courses later in the curriculum. This is a required course for CSci majors. Prerequisites and Rationale CSci 1913 or 1933: Students need to have the degree of programming experience and maturity obtained from completing one of these courses. CSci 2011: 2041 builds on ideas from this course such as induction, recursion/recurrences, and logic. Classes Having 2041 as a Prerequisite and Rationale CSci 3081: 2041 covers topics that are essential to principled and effective programming. 3081 is a natural follow on to this course in that it demonstrates the use of the principles and techniques studied in 2041 in practical, collaborative software development. CSci 4011: 4011 covers the mathematical aspects of viewing linguistic entities such as programs as objects. Familiarity with the treatment of symbolic data is important to getting started with such a study. The treatment of recursion, induction and types will also build the mathematical needed in 4011. CSci 4511: Exposure to a functional language and symbolic computation in 2041 will be used in 4511. Class Format 4 credits, 3 hour long lectures and 1 hour long lab per week. Lab sessions are used for hands-on learning, experimentation with programming techniques in a guided setting, and discussion of additional examples. Practice in lab sessions is aimed to prepare students for larger projects done outside of class time. Possible texts Elements of Functional Programming by Chris Reade Programming in Standard ML by Bob Harper Purely Functional Data Structures by Chris Okasaki Outcomes By taking this course, students will be able to: * write and understand functional programs - that use different evaluation strategies, understand impact on programming techniques and efficiency - that use functions a first-class values - that are recursive over complex symbolic data and that especially treat programs as data * understand the relevance of types to organizing data and to structuring programs over such data * understand the distinction between data and their representation and learn to focus programming thinking around values rather than their ultimate computer realization * use inductive principles to reason about recursive programs * understand how parallelism can exposed by not introducing unnecessary dependencies between different computations especially by avoiding interactions through the use of state * analyze the complexity of recursive programs over immutable data, and relate this to iterative programming over state * understand principles of search-based programming, modularity and concurrency * understand how these varied principles can be translated into practice and especially see their use in programming in non-functional languages and settings Outline of material covered The topics to be covered in the course are described below. This is not intended as a week-by-week schedule: material under different topics will be interleaved and reordered in an actual plan for the course. - Types as an organizing principle for programming. Types as a language, higher-order and polymorphic types, types as means of classifying values, ad hoc versus parametric polymorphism. - Expressions and computation as effect-free evaluation. Binding of names, scoping, environments, closures; strict and non-strict evaluation, opportunities to exploit parallelism; lazy evaluation as a programming technique and infinite data structures; recursive functions and relation to recursive data; iteration as tail recursion, translating general recursion to tail recursion. - Recursion and relation to inductive reasoning, invariants over functions, types and invariants, designing functions around invariants. - Functions as first class objects, higher order functions (map, filter, fold) and applications, parametric polymorphism, functions as parameters, continuation passing style. - Effects and computation. Type safe references, assignments, other side-effecting constructs, iterative control structures; modelling effectful computation via state transforming functions, effects in lazy language (monads); object oriented programming as combining environments with state; references and circular data structures. - Programs and analysis of complexity. Recursive functions and recurrence relations; functional data structures, efficiency and programming techniques; mutable data and efficiency. - Value-based programming and realization. Mapping data objects to memory; memory usage, copying versus pointing; garbage creation and automatic collection, memory management. - Search-based computation. Search as a computational paradigm and its applications; programming techniques for realizing search. - Role of modularity in programming-in-the-large. Interface specifications, abstract data types; language support for modular programming, interface checking as type checking; module composition as function application. - Concurrency. Asynchronous computation as a paradigm, coordination through communication; language mechanisms for organizing and controlling communication. - Translation of principles into programming in mainstream, non-functional languages. |
|
Readme link.
Strategic Objectives & Consultation section begins below
|
||
Strategic Objectives & Consultation | ||
Name of Department Chair Approver: |
<no text provided> | |
Strategic Objectives - Curricular Objectives: |
How does adding this course improve the overall curricular objectives ofthe unit? <no text provided> |
|
Strategic Objectives - Core Curriculum: |
Does the unit consider this course to be part of its core curriculum? <no text provided> |
|
Strategic Objectives - Consultation with Other Units: |
In order to prevent course overlap and to inform other departments of new
curriculum, circulate proposal to chairs in relevant units and follow-up with direct
consultation. Please summarize response from units consulted and include correspondence. By
consultation with other units, the information about a new course is more widely disseminated
and can have a positive impact on enrollments. The consultation can be as simple as an
email to the department chair informing them of the course and asking for any feedback
from the faculty. <no text provided> |
|