CPAC I - NYU Computer Science Department

Professor Evan Korth
Fall 2014
Road Map for Today
• Welcome to PAC I!
• Course Description
– What material will we cover?
– What am I getting myself into?
• Administrative Issues
– Course Web Page, Text Book, Exams, Office Hours,
Homework, Grading, Cheating Policy, etc.
• Syllabus
• Survey
• Start covering material
Course Prerequisites
• Prerequisite:
– Programming experience in any language
– Moderate math sophistication is expected
• Who should be taking this course:
– Applicants to the master’s programs who have
insufficient background in computer science, but are
otherwise admissible are referred to PAC.
– Other graduate students who want a solid foundation
in CS
• Who should NOT be taking this course
– Students that know Java and data structures
PAC Description
Applicants to the master’s programs who have
insufficient background in computer science, but
are otherwise admissible are referred to PAC. These
two courses (part one, which is offered in the fall,
and part two, offered in the spring) are designed to
fulfill the minimum prerequisites for beginning a
master’s program in computer science or
information systems. Those admitted to the M.S.
program with the requirement to complete PAC are
considered M.S. degree students while they are
enrolled in PAC courses, although the credits for the
courses do not count toward the M.S. degree.
Course Description
• An accelerated introduction to the fundamental concepts
of computer science for students who lack a formal
background in the field. Topics include algorithm design
and program development; data types; control structures;
subprograms and parameter passing; recursion; data
structures; searching and sorting; dynamic storage
allocation and pointers; abstract data types, such as stacks,
queues, lists, and tree structures; generic packages; and an
introduction to the principles of object-oriented
programming. Packages are emphasized as a means to
develop skills in effective software design and
development. Students should expect an average of 12-16
hours of programming and related course work per week.
What the class is really about
The main goals of this course:
Foundations of Java
We will focus on Java’s object orientated concepts.
II. Foundations of Algorithm Development
III. Foundations of Software Development
IV. Foundations of Abstract Data Types (ADT)
What is a data structure?
Examples of data structures and their real world uses.
Foundations of Asymptotic Analysis
How do we rate the efficiency of an algorithm?
How does choosing the right ADT effect an algorithm's
1. Foundations of Java Programming
• Java is a popular programming language, widely
used in industry.
• We will learn all the specifics of how to program in
• This includes all the rules that are specific to Java.
• First we will cover Java’s implementation of the
fundamentals: Variables, Arithmetic, If / Else, For
Loops, While Loops, Methods, Arrays, etc.
• Then will then cover Java’s object orientated
2. Algorithm development
• We will look at problem solving methods that
involve analyzing the problem and designing
an algorithm before we start to write code.
3 Learn the Principles of Software Development
• Building high quality software is very difficult.
• The course presents the syntax and concepts of
programming, and also presents strategies for
building real software that address real problems.
• I will also try to bring my real-world industry
experience to class.
4 Foundations of Abstract Data Types
• An abstract data type (ADT) is a set of
objects together with a set of operations. For
– Stack
– Queue
– Dictionary
– Tree
– Priority queue
5 Introduction to Algorithm analysis
• Basically, we want to solve any given problem
using the fewest possible computer instructions.
– Two algorithms may solve the same problem. One may
take a few seconds while the other takes a few years.
We will analyze our data structures to see why one
works better than the other for a given set of data.
• For example, we will learn several sort algorithms
and analyze the efficiency of each.
Insertion sort
Merge sort
Quick Sort
Heap sort
Administrative Matters
Course Web Site
• Course web site is available at:
Web site contains the following information:
Administrative information
Course Syllabus
Homework assignments
Class notes
Class programs
Link to the class mailing list
Class mailing list
• First assignment is to join it. Do it today!
• Go to:
and follow the instructions
• All assignments and news will be sent to the class list
• Homework questions should be sent to the list and
answered by students when possible.
Course Text Book
• Introduction to Java
Programming (10th
Edition) Brief Version
• Available at the NYU
• Book includes a CD-ROM
with Java programs and
other supplemental
• Lecture notes will follow
the book.
• Please keep up with the
Course Text Book
• Object-Oriented Data
Structures Using Java, Third
Edition By Nell Dale, Daniel T.
Joyce, and Chip Weems
- "NYU version" 978-1-44969295-7
- "regular version" 978-1-44961354-9
• Should be available at the NYU
• Please keep up with the
• For the course, you may use any IDE you are
comfortable using. I will use one or more of the
following in the classroom:
JCreator (Note: this IDE has no debugger)
I will also use the command line
• All these products can be downloaded from the
web for free.
• If you do not have your own computer, the
computer labs on campus have the software.
• Your grade will be determined as follows:
– Programming assignments(30%)
– Midterm (and quizzes) (35%)
– Final Exam (35%)
• Class participation will help your grade!
If you do not do the homework programs, you cannot pass the
If home work is late, 25% is deducted.
After one week of lateness, home work will not be accepted.
Style counts.
Submit the program via email to the IA (more on this later)
Back-up your files: For you own good you must save all
programs in several places (make back-up copies!!). Computer
crashes or lost programs are not valid excuses for not handing in
an assignment.
A Word About Cheating
• For the purposes of this class, cheating is
defined as by the CS Department’s academic
integrity policy
– Discussing homework concepts is fine, but you
must submit your own work.
• If you are caught cheating, you will receive an
immediate FAILURE for the course.
Student Civility
• In an effort to make this class enjoyable for
– Please be on time to class!
– Please do not talk to your friends and neighbors in
class! It disturbs everyone, and makes it hard to
concentrate. If you have a question, just ask me!
– Please turn your pagers and cell-phones off!
Getting Help
• Help is always available!
• Option 1: Come to my Office Hours
– Tuesday 9:00 - 10:00pm (I may change
the time of my office hours)
– Location: Room 319 Warren Weaver Hall
– I get bored when nobody visits!
– If you cannot make my office hours, I will be
happy to make an appointment with you.
Please try to give me advance warning when
you need an appointment.
• Option 2: Write to the class mailing list. Please do
not send homework code to the list.
• Option 3: Our TA.
Java syllabus
• Java from the Liang book:
Chapter 1 Introduction to Computers, Programs, and Java
Chapter 2 Elementary Programming
Chapter 3 Selections
Chapter 4 Mathematical Functions, Characters, and Strings
Chapter 5 Loops
Chapter 6 Methods
Chapter 7 Single-Dimensional Arrays
Chapter 8 Multidimensional Arrays
Chapter 9 Objects and Classes
Chapter 10 Object-Oriented Thinking
Chapter 11 Inheritance and Polymorphism
Chapter 13 Abstract Classes and Interfaces
Chapter 18 Recursion
data structures syllabus
• Here is a tentative list of the topics we will
cover (note: this is most of the second text
– we may not cover all these topics):
– Recursion
– Asymptotic Analysis of Algorithms: We will just scratch the surface as we
look at the efficiency of some of our structures and algorithms
– Lists
– Stacks
– Queues
– Trees
– Heaps
– Sorting & Searching
– Hashing
– Priority Queues
– Graphs
– Huffman Codes
• This class has a mandatory recitation. If you
are not registered for the recitation, you must
do so.
• Recitation will be led by our IA. His name is
Randy Shepherd.
• Quizzes will be held in recitation
approximately every other week.
• HW will be discussed in recitation.
• Recitation starts next week!
Object Orientated Programming
• Objects
– Reusable software components that model items in the
real world
– Meaningful software units
• Date objects, time objects, paycheck objects, invoice objects,
audio objects, video objects, file objects, record objects, etc.
• Any noun can be represented as an object
– Very reusable
– More understandable, better organized, and easier to
maintain than procedural programming
– Favor modularity
 Prentice Hall, Inc. All rights reserved.
History of Java
• A group of 13 Sun employees including
James Gosling started the “Green Project”
in 1991 with the intention of planning for
the next wave in computing.
• They designed the *7 which was “an
interactive, handheld homeentertainment device controller
with an animated touchscreen user
• Gosling’s contribution to the project was an
entirely new processor independent
language call “Oak”.
History of Java (continued)
• To make a long story short, people at Sun decided
to use this new language for the web.
• At the Sun World conference in May 1995, Marc
Andreessen of Netscape announced an
agreement to integrate Java into its browser – in a
nutshell - webpages were no longer going to be
• Over the next few years, java became very
popular for writing applets (small programs
included on webpages)
• Today in addition to writing applets, Java is used
for writing large applications as well as
applications for mobile devices
• For more on the history of Java, check out:
Basics of a Typical Java Environment
• Java programs normally undergo five phases
– Edit
• Programmer writes program (and stores program on disk)
– Compile
• Compiler creates bytecodes from program
– Load
• Class loader stores bytecodes in memory
– Verify
• Verifier ensures bytecodes do not violate security
– Execute
• Interpreter translates bytecodes into machine language
 2003 Prentice Hall, Inc. All rights reserved.
Phase 1
Program is created in
an editor and stored
on disk in a file ending
with .java.
Phase 2
Compiler creates
bytecodes and stores
them on disk in a file
ending with .class.
Phase 3
Class Loader
Phase 4
. ..
Class loader reads
.class files
bytecodes from
disk and puts
those bytecodes
in memory.
Bytecode verifier
confirms that all
bytecodes are valid
and do not violate
Java’s security
. ..
Phase 5
. ..
 Prentice Hall, Inc. All rights reserved.
Interpreter reads
bytecodes and
translates them into
a language that the
computer can
possibly storing
data values as the
program executes.
Typical Java