Florida Tech, CS: Software Development II (Fall 2021) CSE 1002: Software Development II (Fall 2021) General info Instructor Ryan Stansifer Office hours Check my WWW page for up to date information. Lectures Class meets at at 9am in OLS 129 (Zoom link on Canvas LMS) Lab sections Lab sections meet on TR at 12:30pm, and 5pm. Overview We review basic Java programming and recursion, introduce object-oriented programming, generics, and study simple data structures. We review sorting and algorithmic analysis---both analytic and empirical. We assign programming exercises in various application domains like image processing, audio synthesis, Monte Carlo methods, and web page ranking. Prerequisites Basically, the prerequisite for cse1002 is the ability to read and write Java programs using static methods and fields. Students should already know most of the Java statements, operators, and primitive types. An important difference in cse1001 compared to cse1002 is the difference between static and non-static. Textbook The textbook for the class is: Sedgewick Robert Sedgewick and Kevin Wayne. Introduction to Programming in Java: An Interdisciplinary Approach, second edition. Addison-Wesley, 2017. ISBN-13 978-0-672-33784-0, 758 pages. Related textbooks for the class: Sedgewick Robert Sedgewick and Kevin Wayne. Introduction to Programming in Java: An Interdisciplinary Approach. Pearson Addison-Wesley, 2007. ISBN-13 978-0-321-49805-2, 723 pages. Sedgewick Robert Sedgewick and Kevin Wayne. Computer Science: An Interdisciplinary Approach. Addison-Wesley, Boston, 2017. ISBN-13 0-13-407642-3, 1146 pages. A 20-part lecture series by Robert Sedgewick is available for about $30 at informit. Lecture Topics and Notes Lecture notes Overview and Introduction Lecture notes Program Development Lecture notes Computer Files Lecture notes Implementation of High-Level Language Lecture notes I/O streams Lecture notes Anatomy of main Lecture notes Data Two's-complement system (cf. Two's complement at Wikipedia) Lecture notes Unicode Expressions, Statements Lecture notes Correctness Methods Lecture notes Recursion Lecture notes Unicode Lecture notes lexicographic order Lecture notes classes Lecture notes references Lecture notes object-oriented Lecture notes Exception handling Lecture notes analysis of algorithms Lecture notes Generics Notes from the Textbook Here are the authors' PDF lecture slides based on the old book: Chapter 1: Elements of Programming. 1.1, 1.2, 1.3, 1.4, 1.5, 1.6. Chapter 2: Functions and Modules. 2.1, 2.2, 2.3, 2.3 factorial, 2.3 gcd, 2.4. 2.4 DFS, Chapter 3: Object-Oriented Programming. 3.1, 3.2, 3.3, 3.4. Chapter 4: Algorithms and Data Structures. 4.1, 4.2, 4.3, Reference Material Java Classes one should know for cse1002. Algorithms Read input Read until EOF. Line-by-line: CopyText8.java, number-by-number: CopyInt8.java, token-by-token Read until sentinel value. Horner's Method Matrix multiplication (used in page rank) Recursion: Towers of Hanoi, recursive flood fill (used in percolation) Base conversion: Base.java, Root finding: Newton's method for square root, recursive bisection Lexicographic ordering Lexicographic.java, recursively Searching: linear search, recursive binary search RecursiveBinary.java, iterative binary search Binary.java, and generic binary search GenericBinary.java. Sorting arrays: Sort.java (API), Insertion.java, Selection.java, Merge.java (recursive, divide and conquer), Quick.java, and Quick.java. Other links Ring buffer or Circular Buffer -- an array-based implementation of a queue. See lab "Guitar Hero". Animations of linear search, binary search, insertion sort, selection sort, quick sort, stacks, and queue. Animated Sorting Algorithms from Professor Robert Stärk of ETH Animations Animations Stack animation, array-based stack Queue animation Circular buffer Linked_list, doubly-linked list Animations of sorting algorithms sorting-algorithms.com: Insertion, Selection, Merge, Quick Visualization of sorting algorithms in dance created at Sapientia University of selection sort on , quick sort 7min on , merge sort on ; Extra Practice codingbat.com -- basic Java exercises Project Euler -- challenging mathematical/computational problems Kattis -- thousands of problems at different levels of difficulty, most requiring cse2010 Google Kickstart, HackerRank If you have any question about your standing in the class, or if some score has been recorded wrong, please contact me or the lab instructor in a timely fashion. We tend to grade exam questions and projects using the entire scale and not just the top end, so scores look lower than you may be used to. Since the tests are not standardized, your grade is determined mostly by how you do compared to the rest of the class, not by the magnitude of your numeric scores. The average numeric score is roughly equivalent to a B- letter grade. Hence, the approximate way to tell how you are doing in the class is: above average numeric score means A or B, below average means C or D. The letter grade for the class will be assigned at the end of the semester. Cutoffs based on the weighted sum of these numeric scores will determine the letter grade. Sometimes we have to make some very tough choices; invariably someone in the class must receive the highest B, the highest C, etc in the class. Your best strategy is to not make it close, i.e., study! Students are expected to take the common final exam at the regularly scheduled time during finals week. --> Projects All students need a Florida Tech "Tracks" account to work in the lab. All Java programs must compile with Java 16 of the compiler. All projects must adhere strictly to the style guide and have the appropriate header. Strive to turn in beautiful programs; don't turn in the first draft. Projects will be submitted electronically using the submit server. You must follow all submission procedures precisely. If the failure to follow procedures makes it difficult to evaluate the project, then you can expect to receive no credit for the project. Even for simple programs it is hard to find bugs. We can test your program and see if it has bugs, but we cannot easily find the bug in your program. Learn to test to the programs yourself, so that it has fewer bugs; don't turn in your program without thoroughly testing it. Important Notices Academic Support Please take advantage of the support services provided by the CS help desk and the office of Academic Support. Cheating Do not cheat on the exams; do not ask for or give code to others; do not buy or sell the solutions to the projects. Do not make solutions publicly available. The penalty for academic misconduct is a grade of 'F'. The objective of the class is developing code, not finding code. Discussions with your classmates, with teaching assistants, at the help desk, or academic support center are encouraged. Know how to do exercises, know how to ask for help, and know how to help each other. Compare the following pairs of questions: Would you give me your Olympic gold medal? How do I become an Olympic swimmer? What is the code for today's programming exercise? How do I compute the base three of a number? If you receive ideas, code snippets, or help from any source, be sure to give proper credit and acknowledgment. Programs that are significantly the same as others will receive a score of zero. Please note, that copies of some work (homework, projects, exams, etc) for undergraduate classes may be kept on file. This is done for two purposes. For review by ABET, for the purposes of maintaining the accreditation of the CS program, and to detect plagiarism. Title IX JavaScript required to view Title IX statement. Calendar and Important Dates Consult the Florida Tech academic calendar for important dates for all classes. Syllabus Introduction: What is a Computer Science? What is a computer? RAM, disk, CPU, ALU, registers, memory hierarchy What is an operating system? Interface layers: hardware, operating system, application What is the Java platform? Programming languages and translators Development of Java programs, IDEs Files, streams, pipes Java language review Data types, declarations, statements Characters and text, arrays subprocedures, recursion Object-oriented programming Classes as data structures Static versus non-static Sharing and mutable Extending classes, subclass polymorphism, inheritance Overriding and dynamic dispatch Abstract classes, Interfaces, Iterable, Comparable and Comparator Java collection classes API Exception handling try/catch Checked and unchecked exceptions try/catch/finally try resource statement Generics, parametric polymorphism Generic classes Generic methods Generic interfaces: Comparable and Comparator Data Structures and Algorithms lexicographic ordering Linked lists, stacks and queues Algorithms analysis, big-oh, tilde notation, empirical and mathematical Sorting (bucket, selection, insertion, merge), searching (binary search)