Freshmen Curriculum

Programming Fundamentals I, II, III

Programming Fundamentals I
COSC-1336 (Introduction to Java Programming Language)

High school seniors may take the Advanced Placement Program for Computer Science to receive credit for 'Programming Fundamentals I'

Course Objectives

This is an introductory course for fundamental concepts of programming in terms of Java. Topics include introduction to the Java programming language, data and expressions, classes and objects, conditionals, loops and arrays. This course will work together with a laboratory section COSC 1173. 

Student Learning Outcomes 

Students who successfully complete the course will be able to demonstrate the ability effectively to use the following techniques:
• Fundamental programming techniques: data, expressions, branching, and loops.
• Fundamental data structures: primitive types, arrays, and strings.
• Basic Object-Oriented-Programming (OOP) techniques: classes, objects, and methods.

Chapters – Topics 

Introduction to Computers, Programs, and Java,
Elementary Programming,
Multidimensional Arrays,

Programming Fundamentals II
COSC 1337

Course Description

Review of control structures and data types with emphasis on structured data types. Applies the object‐oriented programming paradigm on Windows and Unix Platforms, and focuses on the definition and use of classes along with the fundamentals of object‐oriented design. It includes basic analysis of algorithms; searching and sorting techniques; and a brief introduction to software engineering.

Pre-Requisites: Pre‐Requisites: Completion of COSC 1336 with a grade of B or better.

Student Learning Outcomes: 

The student who successfully completes the course will be able to:

  • Create useful software architecture documentation.
  • Develop correct and efficient programs to implement software, and demonstrate a basic understanding of the concept of algorithm analysis.
  • Debug implemented software in a proficient manner.
  • Demonstrate familiarity with all primitive types in the language of choice, all commonly used control structures, simple user defined constructs such as enumerated types, low level programming tasks such as I/O, string manipulation, and array processing up to two dimensions.
  • Describe standard simple sorting algorithms such as the bubble sort, insertion sort, and selection sort.
  • Demonstrate familiarity with standard linear and binary search algorithms, as well as the simplest, array‐based, linear data structures (stacks and queues).
  • Make appropriate choices in data, methods, style, structure, and information hiding while designing and constructing Object Oriented Programs.
  • Demonstrate basic understanding of the Linux/Unix operating system.
  • Demonstrate basic understanding of more advanced language features such as recursion, polymorphism, exception handling, file I/O, UML, and inheritance.

Topics - Java and UNIX

  1. JAVA Topics
    • Reviews topics from COSC 1336 (Classes & Objects, Single & Multidimensional Arrays)
    • Inheritance and Exception Handling
    • Introduction to Polymorphism
    • Brief Introduction to Algorithm Analysis
    • String processing using basic string methods provided by Java
    • File I/O using text files
    • Searching (Linear search, Binary search)
    • Sorting (Insertion sort, Selection sort, Quick sort, Bubble sort)
    • Debugging techniques
    • Linear Data Structures (Stack & Queue & Circular Queue)
    • Recursion (Direct, Indirect, Alternatives to recursion)
  2. UNIX Topics
    • An overview of UNIX System
    • Logging in/out, simple commands; intro to the UNIX directory structure.
      UNIX editor (vi), editor command and text input modes; memory buffer; exit (w or w/o saving)
    • More UNIX commands; script, ls, cd, cp, mv, rm, cat, more, lpr, mkdir, etc.
    • Using buffers in vi editor, cut and paste, and moving around in vi.
    • I/O redirection, pipes, simple filters (grep and sort), and filename substitution.
    • Find command; head, tail, wc, echo, make, tar, ar, shell and environment variables.
    • Simple shell programming, profile, alias, and protection modes using chmod.
    • Command line parameters argc, argv, exit.

Programming Fundamentals III
COSC-2336 (Data Structures)

Course Objectives

This is a course about further applications of programming techniques, introducing the fundamental concepts of data structures and algorithms. Topics include recursion, fundamental data structures (including stacks, queues, linked lists, hash tables, trees, and graphs), and algorithm analysis.

Student Learning Outcomes 

Students who successfully complete the course will be able to demonstrate the ability effectively to use the following techniques:

  • Create useful software architecture documentation at the program, class, method, and block levels.
  • Develop correct and efficient programs to implement software.
  • Debug implemented software in a proficient manner.
  • Demonstrate familiarity with searching and sorting algorithms for (non-)linear structures.
  • Define and distinguish among frequently used discrete structures such as lists, trees, and graphs to computer science problems.
  • Use elementary concepts of combinatorics, probability, and statistics to analyze and evaluate the efficiency of algorithms.
  • Demonstrate basic understanding of asymptotic notations and time complexity.
  • Design efficient algorithms and compare competing designs.
  • Demonstrate basic understanding of some design approaches such as greedy algorithms, dynamic programming and divide-and-conquer.

COSC 2336 Topics

  • Recursion – review
  • Generics
  • Lists, Stacks, Queues, and Priority Queues
  • Sets and Maps
  • Developing Efficient Algorithms
  • Sorting
  • Implementing Lists, Stacks, Queues, and Priority Queues
  • Binary Search Trees
  • Hashing
  • Perfectly Balanced (AVL) trees
  • Graphs and Applications
  • Weighted Graphs and Applications
  • Multithreading and Parallel Programming