DSCI 299

DSCI 299 is an experimental version of CS212 Computer Science III; the only difference between CS212 and DSCI 299 is that the programming language used in DSCI 299 is Python. This 3rd course in the CS introductory sequence covers working in Linux, advanced programming using the Python language, and constructing and using basic data structures. It is a projects-driven course; as with all projects-driven courses, you must also master the theory behind the practice, as well.

Completion of DSCI 299 is accepted as meeting the CS 212 curriculum requirement and meets the CS 212 pre-requisite for DSCI/CS 372M. It also permits you to take CS 322 and/or CS 333 from the Computational and Inferential Depth list. CS 314, CS 330, CS 415, and CS 432 require that you have learned C in CS 212; therefore, DSCI 299 DOES NOT permit you to take 314/330/415/432.

Lectures and Labs

Two 110-minute class meetings/week. The first class meeting consists of two 50-minute lectures with a 10-minute break in between. The second class meeting consists of a 50-minute lecture, followed by a 10-minute break, followed by a 50-minute lab session.


  • CS 211 – Computer Science II

Learning Outcomes

This course continues development of the basic concepts and practices of computer science from CS 210-211. The primary topics are familiarity with the Linux environment, advanced programming in Python, basic complexity analysis, and basic data structures: stacks, queues, linked lists, deques, priority queues, maps, and heaps.

Upon successful completion of the course, students will be able to:

  • demonstrate facility using the default Linux shell (bash) including command invocation, IO redirection, file system navigation, environment variables, pipes and multiprocessing, and compression and file packaging;
  • demonstrate the ability to program moderate-sized programs using the Python programming language;
  • demonstrate the ability to use various Python packages/tools to find and correct programmatic errors in Python programs;
  • construct the interface specification for an abstract data type;
  • program one or more implementations of an abstract data type interface specification;
  • be able to determine from inspection the "Big-O" complexity of a piece of code;
  • be able to measure running time for a particular program within the shell and by inserting source code instrumentation;
  • demonstrate the ability to create a stack, queue, linked list, deque, priority queue, map, and heap using the Python programming language; and
  • demonstrate the ability to use a stack, queue, linked list, deque, priority queue, map, or heap to solve a problem.

Acquired Skills

Upon successful completion of the course, students will have acquired the following skills:

  • be able to create and use a virtual machine using the VirtualBox or UTM virtualization platform;
  • be able to effectively use the Linux shell in the development and testing of moderate-sized Python programs; and
  • be able to create and use abstract data types in Python.

Textbooks and Readings

  • (Required) Python and Data Structures - a well-structured approach by Joseph S. Sventek. A PDF version is available on Canvas.

Course Requirements and Grading

This course will be taught as three 50-minute live lectures and one 50-minute live lab each week. In addition to the required textbook, all course materials (project assignments, lab assignments, tutorial videos, sample exam material) will be available from Canvas. We will be using Slack for asynchronous questions and answers.

Grading will be based on the following criteria:




Programming projects (8 projects @ 5%)


Lab attendance and submission (10 labs @ 1%)


Midterm exam


Final exam

DSCI majors must take DSCI 299 graded; CS majors and minors may NOT take DSCI 299; all others may take it graded or P/N.

Grading Scale