This course covers Internet application programming, including client-server and web applications. At the end of this course, students should be able to:
Use the BSD socket API to develop network applications.
Understand and use concurrent programming to develop a thread-safe server, including both thread pool and event-driven architectures.
Use experiments to conduct an in-depth performance evaluation of network software to better understand design tradeoffs and operating system overhead.
Use a common web application framework to build a web databanse application, with both relational and no-SQL databases.
Understand security issues for network software and be able to write code that is secure against common attacks.
Have the confidence and ability to quickly learn a new language and libraries.
For the lecture material, I will draw from various books and online materials. Where possible, I will provide links to online materials. Since there is no good and comprehensive book for this class, I will not require you to buy one. Instead, I will list a set of good books and you are welcome to buy any you think you may need:
Computer Networking: A Top-Down Approach Featuring the Internet: This textbook covers the entire network stack from application layer down to the link layer. If you want to have a textbook that explains how the Internet works, this is the one to buy. We will only use a small part of this book in this class, but you should buy this book if you intend to take CS 460 since it is required for that class.
Web Protocols and Practice: HTTP/1.1, Networking Protocols, Caching, and Traffic Measurement: This is a good book on HTTP and web caching, but has too narrow a focus to serve as a general textbook for the class. I will get some of my lecture material on the Internet, HTTP, web proxies, web server architectures, and web workload characterization from this book.
- Unix Network Programming, Volume 1: The Sockets Network API, 3rd Edition: This has been the definitive reference for network programming for more than a decade, and has been recently updated. I will provide all of the necessary information in the lectures, but if you want a reference on socket programming, this is a great book to buy and one you will use for many years if you do socket programming. In addition to sockets, this book covers threads, concurrent architectures, and many network programming details.
We will use C++ for the client-server programming projects, so it will be helpful to have a good reference. I strongly recommend getting one of these if you don't already have one.
We will use Python for scripting some performance evaluations, processing and graphing data, writing a peer-to-peer program, and for web database programming. I list some free online references below, plus a book in case you want one.
Assignments and Grading Policy
The assignments for this class will consist of labs and exams. Labs must be written in the assigned language and must compile and run on the department's Linux machines.
Labs will be graded by the TA or instructor. For some labs, the scoring will be based on running your code. In these cases, we will publish a grading sheet before each assignment is due, listing the tests we will run and how many points each test is worth. For other labs, the scoring will be based on a report you write. For these labs, the assignment will indicate how the report will be scored.
Grading for exams will be on a scale of 0 to 10 for each problem, with a final score based on the total possible points. A score of 10 indicates your answer is completely correct (A), and a score of 5 indicates your answer is entirely wrong but you made a reasonable effort (E). Grades in between indicate very good (9), good (8), adequate (7), and poor (6). Failure to make a reasonable effort to answer a question scores a 0.
Your final grade will be computed by weighting all scores as follows:
Labs: 70% Exams: 30%
Labs are due on the day and time indicated. Late work will receive a 10% penalty for the first week, with no late work accepted after then. If you have a medical or serious personal issue, please see the instructor to make arrangements. You may always turn in partial work if you are not finished and you will be graded on what you have accomplished. No work can be turned in after the university's last day of instruction.
Most assignments for this class must be done individually. You are encouraged to discuss solving the labs and any programming problems you encounter generally, but you must write your own code and should not view any other student's code. When producing written work, your writing must be your own thoughts. Your use of sources (ideas, quotations, paraphrases) must be properly acknowledged and documented.
Group work is permitted only where specified clearly in the assignment. Group work is meant to be done jointly with a team of two students. Students in a group should work on problems and programs together, and each student should perform a roughly equal amount of work. When you turn in group work, turn in a single copy, with each group member signing his or her name. By signing your name, you are attesting that you have invested an equal amount of time in the assignment.
Honor Code Standards
In keeping with the principles of the BYU Honor Code, students are expected to be honest in all of their academic work. Academic honesty means, most fundamentally, that any work you present as your own must in fact be your own work and not that of another. Violations of this principle may result in a failing grade in the course and additional disciplinary action by the university.
Policy on Harassment
Harassment of any kind is inappropriate at BYU. Specifically, BYU's policy against sexual harassment extends not only to employees of the university but to students as well. If you encounter sexual harassment, gender-based discrimination, or other inappropriate behavior, please talk to your professor, contact the Equal Employment Office at 422-5895 or 367-5689, or contact the Honor Code Office at 422-2847.
Students with Disabilities
BYU is committed to providing reasonable accommodation to qualified persons with disabilities. If you have any disability that may adversely affect your success in this course, please contact the University Accessibility Center at 422-2767. Services deemed appropriate will be coordinated with the student and instructor by that office.