CSCI 2041 -- New Course

Wed Apr 24 13:28:26 2013

Approvals Received:
on 04-24-13
by Mary Freppert
Approvals Pending: College/Dean  > Provost > Catalog
Effective Status: Active
Effective Term: 1139 - Fall 2013
Course: CSCI 2041
UMNTC - Twin Cities
UMNTC - Twin Cities
Career: UGRD
College: TIOT - College of Science and Engineering
Department: 11108 - Computer Science & Eng
Course Title Short: Adv. Programming Principles
Course Title Long: Advanced Programming Principles
Max-Min Credits
for Course:
4.0 to 4.0 credit(s)
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
<no text provided>
Grading Basis: Stdnt Opt
Topics Course: No
Honors Course: No
Online Course: No
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)
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
Repetition not allowed.
for Catalog:
[1913 or 1933], 2011
No course equivalencies
No required consent
(course-based or
No prerequisites
Editor Comments: <no text provided>
Proposal Changes: <no text provided>
History Information: <no text provided>
Sponsor Name:
Maria Gini
Sponsor E-mail Address:
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
this course fulfills:
Other requirement
this course fulfills:
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:

  • They explicitly help students understand what liberal education is, how the content and the substance of this course enhance a liberal education, and what this means for them as students and as citizens.
  • They employ teaching and learning strategies that engage students with doing the work of the field, not just reading about it.
  • They include small group experiences (such as discussion sections or labs) and use writing as appropriate to the discipline to help students learn and reflect on their learning.
  • They do not (except in rare and clearly justified cases) have prerequisites beyond the University's entrance requirements.
  • They are offered on a regular schedule.
  • They are taught by regular faculty or under exceptional circumstances by instructors on continuing appointments. Departments proposing instructors other than regular faculty must provide documentation of how such instructors will be trained and supervised to ensure consistency and continuity in courses.

<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:
  • thinking ethically about important challenges facing our society and world;
  • reflecting on the shared sense of responsibility required to build and maintain community;
  • connecting knowledge and practice;
  • fostering a stronger sense of our roles as historical agents.

<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
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>
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

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.
Strategic Objectives & Consultation
Name of Department Chair
<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
Does the unit consider this course to be part of its core curriculum?

<no text provided>
Strategic Objectives -
Consultation with Other
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>