CPSC 329 Software Development Fall 2020

CPSC 329 Course Information

On this page:


Course Description and Objectives

Catalogue description:

This course continues the study of programming by focusing on software design, development, and verification - the skills beyond fluency in a particular language which are necessary for developing large, reliable programs. Topics include object-oriented design, the use of APIs, and testing and verification. Techniques common in modern software development will also be studied. Specific techniques may include GUIs and event-driven programming, multi-threading, client-server networking, fault-tolerant computing, stream programming, and security.

This course completes the programming sequence begun by CPSC 124 and 225 - CPSC 124 introduces the basic ideas of programming along with the syntax and semantics of the Java programming language, CPSC 225 focuses on common data structures as the organizational building blocks of programs, and CPSC 329 addresses creating good software.

Four key points are at the core of good software:

  • fully understanding what the software is to do,
  • planning and design before coding,
  • proper use of modularity and abstraction in the design,
  • and building in reliability through good coding practices and the integration of testing in the implementation process.

This course will address how to achieve those points. In addition, students will gain:

  • an organized approach to software development;
  • an understanding of the core principles of object-oriented design, and the ability to apply those principles to create flexible and maintainable software;
  • a habit of good software, which includes coding standards, documentation, appreciation of the value of good design (and the willpower to refactor as needed to improve the design), and testing;
  • experience with a substantial project, working in teams, and working with someone else's code;
  • skills for life-long learning, specifically learning from examples, tutorials, and APIs;
  • technical skills relevant to software development, including the use of integrated development environments, version control, and unit testing; and
  • a basic technical understanding of some aspects of modern software such as GUIs, event-driven programming, user interface design, client-server networking, and threads.

Course Format

Working in teams is common in software development, and is a central theme in this course. Since social distancing precludes groups sharing a computer screen or meeting in close proximity, this course will be fully remote this semester. New material will be introduced before class through readings and/or videos available on the web. Class meetings will emphasize application of the material, as a class or in small groups, with short lectures to go over questions or resolve tricky points. Interaction will take place online using Zoom and other tools, and class and lab sessions will take place via Zoom.


Prerequisites

CPSC 225 is required.
Programming in this course will be done in Java, and students are expected to be comfortable with Java syntax, the concepts of object-oriented programming (including classes, objects, interfaces, inheritance, and abstract classes), and writing programs to solve problems. Also expected is some familiarity with basic data structures (arrays, linked lists), abstract data types (lists, stacks, queues, maps/dictionaries), the realization of those abstract data types in the Java Collections Framework (List, Stack, Queue, Map and their concrete implementations), and efficiency; the notion of abstract data types and the separation of interface and implementation; how to use the Java API documentation; and coding standards.


Required Course Materials

This course is fully remote. Course material in the form of readings, videos, and other activities will be made available over the web. (There is no textbook to purchase.) Class meetings will be held via Zoom. Certain software will be needed during class and to complete projects and other assignments.

In order to participate fully, you will need:

  • a laptop or desktop computer (not a tablet or phone) with a webcam, microphone, and sound (the built-in microphone and sound capabilities are fine, or you can use an external microphone and/or headphones)
  • a Zoom client (app or application), a web browser, and some additional software (see below) installed on your computer
  • Internet access, with sufficient bandwidth and reliability to be able to stream audio and video
  • a quiet space where you can participate in class meetings without bothering others (headphones can be helpful, but you also need to be able to speak with others)

If you do not have access to any of these resources, or anticipate that you may lose access should you be quarantined or need to leave campus or if labs or other campus facilities are closed, please speak to me as soon as possible in order to determine what alternatives might be possible. Also keep in mind that the semester will conclude remotely, so you will need to make sure that you will still have access to the necessary resources after Thanksgiving.

All of the software needed for this course is free (nothing to purchase) and can be installed on your own computer. (Instructions will be provided.) It will also be available on the Linux machines in Lansing 310 and possibly some computers in Rosenberg 009 for in-person and (in the case of Lansing 310) remote access, however, given the need for interaction during class and the potential for interruptions in physical and/or remote access to the lab (potentially with little or no notice), you are strongly encouraged to install what you need on your own computer. Also keep in mind that the semester will conclude remotely, so you will need to make sure that you will have access to the necessary resources if you leave campus at Thanksgiving.


Time Expectations

The primary out-of-class time requirements for this course are pre-class readings/videos and programming projects, with the programming projects requiring the most time. (Any lab assignments not completed during the lab period will also need to be finished outside of class.)

Students should expect to devote a significant amount of time to the course, as software development is necessarily practiced by doing and implementing software takes time. In addition, most projects are group projects, requiring awareness of deadlines, careful time management, steady effort, and working with others' schedules. Dates for all of the major assignments are on the schedule page to aid in planning.