Content of Introductory Courses
As part of an overhaul of the undergraduate introductory course sequence, the Manning College of Information and Computer Sciences has introduced three new courses, CICS 110: Foundations of Programming, CICS 160: Object Oriented Programming, and CICS 210: Data Structures. Review the content below to find course descriptions, prerequisites, learning outcomes, and draft syllabi for each course.
CICS 110: Foundations of Programming
Course Description: An introduction to computer programming and problem-solving using computers. This course teaches you how real-world problems can be solved computationally using programming constructs and data abstractions of a modern programming language. Concepts and techniques covered include variables, expressions, data types, objects, branching, iteration, functions, classes, and methods. We will also cover how to translate problems into a sequence of instructions, investigate the fundamental operation of a computational system and trace program execution and memory, and learn how to test and debug programs. No previous programming experience is required.
Prerequisites: R1 (or a score of 15 or higher on the math placement test Part A), or one of the following courses: MATH 101&102 or MATH 104 or MATH 127 or MATH 128 or MATH 131 or MATH 132.
Learning Outcomes: The objective of this course is to introduce the fundamentals of computing and programming using a general-purpose programming language from a modern perspective. This includes understanding the operation of a machine from a programming language perspective and what it means to execute a whole program as well as its individual parts, how to solve problems using constructs that a programming language provides such as variables, data types, objects, branching, iteration, functions, and classes, and how to write programs that receive data from various sources, process that data, and produce output in various forms.
Language used: Python
Draft Syllabus: CICS 110 Syllabus.pdf
Topics Covered:
- Introduction to Programming
- Variables and Expressions
- Types: strings, lists, tuples, and sets
- Types: dictionaries
- Functions
- Functions, Branching, and Control Flow
- Branching, Detection, and Iteration
- Iteration and Functional Iteration
- Strings, Dates, and Lists
- List Comprehensions and Dictionaries
- Introduction to Classes
- Class Interfaces, and Exceptions
- Files and Plotting
- Modules and Libraries
CICS 160: Object-Oriented Programming
Course Description: This course will expose students to programming practices beyond the introductory level, concentrating on Object Oriented Programming techniques and an introduction to Data Structures. Students will also study and analyze the complexity of both the algorithms presented in class and of the algorithms they develop. Before taking this course, students are expected to have been exposed to the following concepts through a college-level course or equivalent in some high level computer programming language: input and output operations, conditional statements, loops, arrays, recursion, and functions/methods. The course places an emphasis on the careful design and testing of programs, as well as in the analysis of said programs.
Prerequisites: CICS 110 or INFO 190S or COMPSCI-121 with a grade of C or better or a score of 4 or higher on the CS AP exam.
Learning Outcomes: By the end of this course, successful students will be able to: Explain key concepts of the object-oriented programming paradigm, including data encapsulation, information hiding, inheritance, polymorphic methods, and others; solve programming tasks by decomposing them into smaller tasks through the careful development of algorithms; make use of object-oriented practices in order to solve programming problems of medium to advanced complexity; appropriately test the code they develop; explain the concept of Abstract Data Types (ADT), specify the ADT of objects and classes they design, and interact with data structures designed and implemented by other by using their ADT specifications; correctly reason about and explain the complexity of the algorithms and programs seen and developed in class; understand and make use of basic data structures such as lists, stacks, queues, and trees; implement linear data structures such as different types of lists.
Language used: Python and Java
Draft Syllabus: CICS 160 Syllabus.pdf
Topics Covered:
- Python review
- Classes and Objects
- Inheritance
- Testing (with unit test)
- Type hints.
- Introduction to complexity analysis
- Searching in a list
- Implementing linked lists
- Searching in a sorted list
- Sorting methods
- Recursion
- Sorting recursively
- The implementation of lists with arrays
- Introduction to Java (inheritance, abstract classes, interfaces)
- Ordered lists
- Implementing lists in Java
- Abstract classes in Python
- Queues and stacks
CICS 210: Data Structures
Course Description: An introduction to the design, analysis, and implementation of data structures. This course teaches you how to build, test, debug, document, and evaluate objects that encapsulate data and their associated operations using programming constructs and data abstractions of a modern programming language. Concepts and techniques covered include linear and non-linear structures, recursive structures and algorithms, traversal algorithms, binary search trees, balanced trees, priority queues, union-find, hash tables, Bloom filters, and graphs. We will also informally compare and contrast the run time efficiency of algorithms and their performance characteristics including the concept of worst-case running time analysis and the classification of algorithms in terms of constant, logarithmic, linear, log linear, quadratic, and exponential time using Big-O notation.
Prerequisites: CICS 160 or INFO 190T with a grade of C or better.
Learning Outcomes: At the completion of this course you will be able to: Design, implement, and analyze fundamental abstract data types and data structures such as lists, stacks, queues, priority queues, trees, sets, hash tables, union-find, heaps, Bloom filters, and graphs; Define and implement recursive structures and algorithms over those structures; Demonstrate an understanding of iteration and traversal to implement iterators for the aforementioned data structures; Define and implement the operations and algorithms associated with fundamental data structures; Compare data structure tradeoffs to select the appropriate implementation for an abstract data type; Informally explain, compare, and contrast the run time efficiency of algorithms and their performance characteristics including the concept of worst-case running time analysis and the classification of algorithms in terms of constant, logarithmic, linear, log linear, quadratic, and exponential time; Explore and use various programming abstraction techniques including object-oriented and functional approaches to implement data structures; Identify and remedy flaws in a data structure implementation that may cause its behavior to differ from the intended design through debugging and testing; Increase your proficiency in writing code including designing, documenting, writing, testing, and debugging.
Language used: Java
Draft Syllabus: CICS 210 Syllabus.pdf
Topics Covered:
- Introduction to Data Structures and Algorithms (Java, abstract data types, generics)
- Linear Structures Review: Stacks and Queues (array and linked implementations)
- Big O Analysis, Searching, and Algorithm Analysis (linear, binary search)
- Amortization and Extendable Arrays
- Trees (binary search trees)
- Balanced Trees (AVL and B-trees)
- Priority Queues (heaps and treaps)
- Union-Find / Merge Sort
- Hash Tables
- Bloom Filter
- Graphs (BFS and DFS search algorithms)