This course covers Internet application programming, including client-server and peer-to-peer networking. 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.
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.
Textbooks and Online Resources
You do not need to buy a textbook for this class. Instead, you should be able to learn everything from lecture notes and online materials.
We will use the languages that are most popular for networking: C/C++ and Python. The course is designed to require you to quickly adapt to a new language and conventions, using available online materials, much like computer scientists do in practice. You should be ready for this and plan ahead as appropriate.
Below are some sources I use for the material in this class:
A great book that explains everything you need to know about programming with the Linux operating system. This includes file I/O, threads, sockets, signals, and much more.
This has been the definitive reference for network programming for more than a decade, and has been recently updated. In addition to sockets, this book covers threads, concurrent architectures, and many network programming details.
We will use C/C++ for some labs, so it will be helpful to have a good reference. I strongly recommend using an online tutorial or buying a book if you are not confident in your C/C++ coding.
We will use Python for some labs and for processing and graphing data. I list some free online references below, plus a book in case you want one.
I also suggest that you become familiar with the official Python documentation.
We will be using a Linux environment for this class. You can use the Linux labs, use a live USB to boot into Linux, or setup a virtual machine running Linux. We will be using Python 2.7 or Python 3.5, along with various packages. You are strongly encouraged to become familiar with Linux, its software, and the command-line environment. Being fluent in multiple computing environments is an important part of a CS education.
You may use a MacOS machine, but you will need to figure this out on your own, and there are several labs, particularly for synchronization, that do not have compatible libraries. Your code will be expected to run on a Linux machine when you submit it. Be sure to test your code in a Linux environment. You will not have success using Windows in this class, so you should use a Linux VM in this case.
I personally use emacs and Sublime, and I know many others use vim. You may also want to check out Brackets and Atom. I highly recommend a code editor and not an IDE, so that you learn to compile and run code using the command line. This will come in handy when you need to do remote system administration.
You should store your code in a private Git repository. Bitbucket provides free private repositories.
Assignments and Grading
Attendance and participation in class is expected.
The assignments for this class will consist of homework, labs and exams. Homework will involve short assignments that will be checked in class. Grading will be based on a short assessment of full, partial, or no credit. Participation is required for these sessions.
Labs must be written in the assigned language and must compile and run on a typical Linux machine. Labs will typically include a series of tests and a short lab report. We will provide test code so you can check all test cases prior to submitting your code for grading. You can submit your code only once per lab. All labs will include a grading sheet explaining how the lab 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 are due on the day indicated. To accommodate difficulties in your schedule, you can turn in work late, but you will be penalized 10% for every 2 days, up to a maximum of 30% off. No late work will be accepted after 6 days. Weekends and holidays are counted. No late work can be turned in after the last day of classes.
You may avoid late penalties due to a medical excuse by making an arrangement in advance with the instructor. I will also happily make exceptions for those with a documented disability.
All homework must be completed individually. You are encouraged to collaborate as much as possible, including discussing solutions and solving problems together, as long as you do your own work (e.g. do not copy someone else's solution or code directly).
You may work on labs either alone or using pair programming. If you choose to use pair programming, the partners must trade off in the two positions (at the keyboard, over the shoulder) during each lab. Each pair will turn in the same assignment and will indicate in every assignment who their partner is. By turning in paired assignments you agree that you have participated equally. If you are unable to contribute equally, you should leave the partnership as soon as this becomes evident. You will be most successful in a paired situation with a partner who has roughly equal skills.
Regardless of whether you choose to work alone or in a pair, 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 use of sources (ideas, quotations, paraphrases) must be properly acknowledged and documented.
All exams must be completed individually. Exams are open note and open Internet, but you may not receive help from any person.
Most of the help for this course will be provided online. If you need assistance, you may:
Discuss your problem with other members of the class. See the collaboration policy above.
Use online resources. See those listed above.
Ask questions in Piazza. Other students are welcome to answer your question. The instructor will try to answer all questions as soon as possible.
Make an appointment to see me for individual help. Since I cannot predict which hours will work best for students, all office hours will be by appointment.
The first injunction of the BYU Honor Code is the call to be honest. Students come to the university not only to improve their minds, gain knowledge, and develop skills that will assist them in their life’s work, but also to build character. President David O. McKay taught that "character is the highest aim of education" (The Aims of a BYU Education, p. 6). It is the purpose of the BYU Academic Honesty Policy to assist in fulfilling that aim. BYU students should seek to be totally honest in their dealings with others. They should complete their own work and be evaluated based upon that work. They should avoid academic dishonesty and misconduct in all its forms, including but not limited to plagiarism, fabrication or falsification, cheating, and other academic misconduct.
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. Students are also expected to adhere to the Dress and Grooming Standards. Adherence demonstrates respect for yourself and others and ensures an effective learning and working environment. It is the university’s expectation, and my own expectation in class, that each student will abide by all Honor Code standards. Please call the Honor Code Office at 422-2847 if you have questions about those standards.
Preventing Sexual Harassment
Title IX of the Education Amendments of 1972 prohibits sex discrimination against any participant in an educational program or activity that receives federal funds. The act is intended to eliminate sex discrimination in education. Title IX covers discrimination in programs, admissions, activities, and student-to-student sexual harassment. BYU’s policy against sexual harassment extends not only to employees of the university, but to students as well. If you encounter unlawful sexual harassment or gender-based discrimination, please talk to your professor; contact the Equal Employment Office at 422-5895 or 367-5689 (24-hours); or contact the Honor Code Office at 422-2847.
Students with Disabilities
Brigham Young University is committed to providing a working and learning atmosphere that reasonably accommodates qualified persons with disabilities. If you have any disability which may impair your ability to complete this course successfully, please contact the Services for Students with Disabilities Office (422-2767). Reasonable academic accommodations are reviewed for all students who have qualified, documented disabilities. Services are coordinated with the student and instructor by the SSD Office. If you need assistance or if you feel you have been unlawfully discriminated against on the basis of disability, you may seek resolution through established grievance policy and procedures by contacting the Equal Employment Office at 422-5895, D-285 ASB.