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 database application, using either a relational or no-SQL database.
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.
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.
To learn HTML and CSS, see:
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, along with various packages such as matplotlib and LaTeX. 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, if you are talented and persistent, figure out how to setup a MacOS machine with the required software. I cannot provide help with this, and your code will be expected to run on a Linux machine when you submit it. There are a number of areas, particularly for synchronization, where the libraries are different for MacOS and Linux. Be sure to test your code in a Linux environment.
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 Policy
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 self-assessment of pass/fail. Participation is required for these sessions.
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. Each student will run test cases for themselves and for two othre students, roughly one week after each lab is due. This will give you an opportunity to see how someone else's code works and to learn from how they have written their code. Scores will be assigned by the instructor, taking into account test cases as well as a short lab report.
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.
Most assignments for this class must be done individually. You are, however, strongly encouraged to discuss solving the homeworks, labs and any programming problems you encounter generally. The primary requirement is that 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 to four students. Students in a group should work on problems and programs together, and each student should perform a roughly equal amount of work.
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.