COS 333: Advanced Programming Techniques Robert M. Dondero, Ph.D. Princeton University 1
Agenda Introductions General Information Topics Assignments Project (briefly) Schedule Policies The Programming Environment 2
Introductions Lead Instructor Bob Dondero Teaching Assistants Cole Schlesinger Rob Dockins (second half only) Students Please sign attendance sheet Please complete questionnaire during class 3
General Information See "General Information" Web page Browse to www.cs.princeton.edu Click on "Academics" Click on "Course Schedule" Click on "COS333" 4
General Information Course description Advanced Programming Techniques: The practice of programming. Emphasis is on the development of real programs, writing code but also assessing tradeoffs, choosing among design alternatives, debugging and testing, and improving performance. Issues include compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop skills in these areas by working on their own code and in group projects. Two 90-minute lectures. 5
General Information Course goals Learn programming (tools and techniques) as practiced by contemporary programmers Build a bridge from the academic world of programming to the "real world" of programming Help you do well in job interviews! 6
General Information How? Lectures Small assignments Larger project During 1 st half ~1.5 weeks per assignment All semester Work intensifies during 2 nd half 7
General Information: Books Required The Practice of Programming (Kernighan & Pike) In bookstore On reserve in Eng Library 8
General Information: Books Recommended Core Java Programming Volumes I and II (Horstmann and Cornell) On reserve in Eng Library Python in a Nutshell (Martelli) On reserve in Eng Library Learning PHP, MySQL & JavaScript (Nixon) Available through Library as e-book 9
Topics See "Topics" Web page Also shows sources of info for each topic Subject to change... 10
Topics Programming languages A course on programming must cover programming languages! C, Java, Python And later PHP, JavaScript, and a little C++ Lectures will hit highlights, show examples, compare and contrast Most learning on your own 11
Topics Databases and database programming Relational DBs and DBMSs Relational DB design The MySQL DBMS Database programming (Java and Python) 12
Topics Graphical user interface programming Components Layout managers Event handling In Java Swing/AWT and Python Tkinter 13
Topics Concurrent programming Concurrent processes (C) Communication between processes (C) Concurrent threads (Java and Python) Thread synchronization (Java and Python) Communication between threads (Java and Python) 14
Topics Network programming Network fundamentals Network programming at the socket-level Object serialization In Java and Python 15
Topics The Web Static web programming HTML HTTP (Missing: CSS) 16
Topics Server-side Web programming CGI programming (in Java and Python) Stateful CGI programming URL rewriting Hidden form fields Cookies Authentication and authorization Programming the web server (in JSP and PHP) 17
Topics XML programming XML XML DOM programming XML SAX programming In Java and Python 18
Topics Client-side Web programming JavaScript Java Applets AJAX 19
Topics Programming paradigms Structured programming Object-based programming Programming with ADTs Object-oriented programming Functional programming Logic programming 20
Topics Advanced programming language features (as time allows) Inheritance Generics Namespaces Exception handling Component programming Internationalization 21
Topics Software engineering Requirements analysis Functional analysis Design (UML, design patterns) Implementation Debugging Testing 22
Topics Software engineering (cont.) Evaluation Maintenance (refactoring) Management (lifecycle models) Empirical software engineering 23
Topics Note: I am not an expert on all those topics! Nobody could be an expert on all those topics!!! Please contribute when you can 24
Assignments See "Assignments" Web page All in teams of two... 25
Assignments Assignment 1 Regular expressions Java and Python Regular expressions, programming languages, testing 26
Assignments Assignment 2 Registrar's office app (database version) Java or Python Database programming Modularity 27
Assignments Assignment 3 Registrar's office app (GUI and networked version) Java or Python Enhancement/redesign of previous Graphical user interface programming Multithreaded programming Network programming 28
Assignments Assignment 4 Registrar's office app (Web version) Enhancement/redesign of previous Server-side Web programming Java or Python or PHP 29
Assignments Assignment 5 Possibly! If time! Registrar's office app (AJAX version) Client-side web programming AJAX programming JavaScript and [Java or Python or PHP] 30
Assignments: Observation Observation: Assignments get easier as work on project ramps up 31
Assignments: Suggestion Suggestion: Note "Java track" and "Python track" How to decide which language? Which do you like better? Assignment 1 should help Which might you use in the future? Which best supports your project? Depth (=> Java) vs. breadth (=> Python)? Can switch, but maybe with backtracking 32
Assignments: Suggestion Suggestion: Invest time in Assignment 2; make it modular Modularity => ease of enhancement 33
Assignments: Suggestion Suggestion: Choose your Assignment 2 partner wisely Difficult to switch for Assignments 3 and 4 (and 5) Assignment 1 is available now
Project See "Project" Web page Highlights: Teams of 3-5 Three-tier application Deliverables throughout the semester Start now More details in lecture soon 35
Schedule See "Schedule" Web page; generally... First half: Assignments Lectures that are pertinent to assignments Decide what to do for project Second half: Project Lectures covering more unconstrained topics 36
Policies See "Policies" Web page Lecture attendance Assignment late submission Assignment conduct Electronic communication Grading: assignments (40%), project (50%), class participation (10%) 37
Policies I ask reluctantly and apologetically... Please don't use computers, phones, etc. during lectures Thanks! 38
The Pgmming Environment For assignments: Use penguins.cs.princeton.edu cluster tux and opus Or, use your own computer MS Windows, Mac, or Linux See course instructors for setup help But, eventually must port to penguins Use CS MySQL DBMS Run "submit" command Make sure your program works for grader 39
The Pgmming Environment For your project: Whatever makes sense Subject to approval of your TA advisor Must provide a way for us to test your system 40
Pgmming Env Action Items Required: Make sure you have a CS account Log into penguins.cs.princeton.edu Use a terminal emulator program with ssh Windows PuTTY, Mac Terminal If necessary, submit form at https://csguide.cs.princeton.edu/requests/account Specify Bash as default shell 41
Pgmming Env Action Items Recommended: Make sure your default shell is Bash "printenv SHELL" should write /bin/bash If necessary, e-mail csstaff@cs.princeton.edu 42
Pgmming Env Action Items Recommended: Configure your environment Copy.bashrc and.bash_profile files from /u/cos333 to your home directory Copy.emacs file from /u/cos333 to your home directory 43
Pgmming Env Action Items Required: Make sure you have a MySQL loginid/password and database Issue command "mysql loginid --host=publicdb --user=loginid --port=3306 password" Then type your MySQL password If necessary, submit form at https://csguide.cs.princeton.edu/requests/db 44
Pgmming Env Action Items Required: Subscribe to cos333 listserv Browse to this page: https://lists.cs.princeton.edu/mailman/listinfo/cos333 and follow instructions Please subscribe using your full first and last names 45
Summary Introductions General Information Topics Assignments Project (briefly) Schedule Policies The Programming Environment 46