Programming Fundamentals I, II, III

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

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

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,
Objects and Classes,
Strings and Text I/O,
Thinking in Objects.

COSC 1337 Programming Fundamentals II

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:
1. Create useful software architecture documentation.
2. Develop correct and efficient programs to implement software, and demonstrate a basic understanding of the concept of algorithm analysis.
3. Debug implemented software in a proficient manner.
4. 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.
5. Describe standard simple sorting algorithms such as the bubble sort, insertion sort, and selection sort.
6. Demonstrate familiarity with standard linear and binary search algorithms, as well as the simplest, array‐based, linear data structures (stacks and queues).
7. Make appropriate choices in data, methods, style, structure, and information hiding while designing and constructing Object Oriented Programs.
8. Demonstrate basic understanding of the Linux/Unix operating system.
9. 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.

COSC-2336 Programming Fundamentals III (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:

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

COSC 2336 Topics

1. Recursion – review,
2. Generics,
3. Lists, Stacks, Queues, and Priority Queues,
4. Sets and Maps,
5. Developing Efficient Algorithms,
6. Sorting,
7. Implementing Lists, Stacks, Queues, and Priority Queues,
8. Binary Search Trees,
9. Hashing,
10. Perfectly Balanced (AVL) trees,
11. Graphs and Applications,
12. Weighted Graphs and Applications,
13. Multithreading and Parallel Programming.