University of Minnesota
Computer Science & Engineering
http://www.cs.umn.edu/

CSCI 3081 Program Design and Development

Overall Description

3081 is a required undergraduate course which science students usually take in their first semester of their junior year. It focuses on skills, tools, and theory related to students becoming good computer programmers. More specifically it covers such topics as an introduction to the software development process, software development tools (e.g., how to use a debugger or version control system), the C++ programming language, UML, good design and coding practices, and professional skills such as writing and working in groups. 3081 has two major goals: first to give students the skills and knowledge they need to become better programmers, and second to give students the programming skills they need to do well in 4xxx- and 5xxx-level programming intensive classes.

3081 is a writing intensive class, and is also a 'project' class for CLA. As such, it needs to include extensive writing and a substantial projects, in accordance with the respective University and CLA guidelines.

Catalog Description

Principles of programming design/analysis. Concepts in software development. Uses C/C++ language to illustrate key ideas in program design/development, data structures, debugging, files, I/O, state machines, testing, and coding standards.

Content

Since the following topics are interrelated, there are many ways to organize the content. For example, the different topics could be interwoven.

  • The software engineering process (4 weeks): overview of software engineering and different software process models; design basics; testing basics.
  • C++ (4 weeks): class basics, inheritance, polymorphism, assertions and exception handling, pointers, memory management, templates, standard template library.
  • UML (1 week): UML basics
  • Software development tools (1 weeks): debugger, version control software, etc.
  • Coding practices (3 weeks): good coding practices including documentation skills, writing correct loops, good program organization, naming conventions, etc.
  • Professional skills (2 week): writing in computer science, group work skills, project skills, professional conduct and the ACM Code of Ethics.

Why This Class is Important and its Role in the Curriculum

Programming is a central part of computer science. In CS I and II students learn the basics of programming in Scheme and Java. In this class students learn how to program in a different language, C++, learn how to become better programmers, and learn some additional aspects of programming, (like dealing with large programs) that are not covered in CS I and II. This should better prepare students for advanced classes with a heavy programming content as well as for programming jobs in industry.

Most students will take 3081 in their junior year. It is one of the courses required for CSci majors.

Prerequisites and Rationale

Computer Science II (CSci 1902) and Computer Organization (CSci 2021). 3081 assumes that students have some experience in C programming (from 2021), and object-oriented programming (from 1902), as well as in fundamental data structures (1902) and concepts (such as recursion, top-down design, etc.) used in programming. It does not assume any previous C++ experience.

Since the course is writing intensive, students should also have taken their freshman level English composition class by the time they take 3081.

Classes Having 3081 as a Prerequisite and Rationale

Currently no classes have 3081 as a prerequisite; however, students are strongly encouraged to take 3081 before any programming intensive 4xxx or 5xxx CSci classes. More specifically, students are encouraged to take 3081 prior to, or at latest at the same time as the required class CSci 4061. And students should take 3081 before electives such as CSci 4107/5107, CSci 5115, and CSci 5801 that involve either much programming or large programming projects.

Class Format

4 credits, 3 large class + 1 lab hour per week. Lab will primarily be for short exercises based upon the material in lecture. For example, many labs will involve C++ exercises and/or software tools.

Probable Text(s)

  • Code Complete by Steve McConnell, Microsoft Press, 2nd edition.
  • UML Distilled: A Brief Guide to the Standard Object Modeling Language by Martin Fowler, Addison-Wesley, 3rd edition.
  • C++ for Java Programmers, Mark Allen Weiss, Pearson Prentice Hall, or Essential C++ by Stanley B. Lippman, Addison-Wesley.

Outcomes

Upon successful completion of the course students should have the following general skills and proficiencies:

  • Students should be familiar with different software process models. Specifically, students should be able to describe models such as the waterfall model, and tell why the different models are important and how they differ from each other. Students should also know the basics of parts of the process, such as what constitutes good design, and what are some practices for good software testing.
  • Students should be able to program in C++ at an intermediate level. Specifically, they should be knowledgeable about, and able to use correctly, topics such as classes, inheritance, templates, pointers, memory management, and exception handling.
  • Students should be able to use software development tools like a debugger and a version control system.
  • Students should know the basics of UML and be able to use UML in program design.
  • Students should be able to write programs that are easy to read, understand and maintain. This includes both 'basic' good practices such as informative comments and good use of white space, but also more advanced stylistic practices such as using well-designed classes.
  • Students should be proficient in computer science writing, both in code-related writing (e.g., documentation), but also in exercises, reports and papers on programming-related topics.
  • Students should have some experience working on a moderate-sized, multiperson programming project.
Contact CS&E | CS&E Employment | Site Map
Contact: 4-192 Keller Hall, 200 Union St, Minneapolis, MN 55455     Phone: (612) 625-4002