LMU | CMSI 673
CONCURRENT AND DISTRIBUTED PROGRAMMING
Syllabus • Fall, 2005
Ray Toal
rtoal@lmu.edu
Doolan 110
310.338.2773
Wednesday Evenings
6:30 p.m. – 9:30 p.m.
Doolan 222
3 semester hours

Objectives

To master the principles of concurrent and distributed programming and become proficient in applying these principles through programming exercises in multithreading, networking and simulation. Students will develop code using distributed and concurrent facilities that are provided by the operating system (case study: WinAPI with C API and C++ wrappers), language intrinsic (case studies: Java, Perl, and Ada 95), and threading libraries (case study: pthreads)

Prerequisites

Mastery of a high-level programming language such as C++ or Java; expert knowledge of data structure and algorithm design; familiarity with object-oriented programming, computer hardware, and operating systems; some mathematical maturity (this is a graduate class).

Readings

There really isn't any required textbook for this course, but I very strongly recommend you get the book by Ben-Ari and read it; you can also get one of the books from Garg and skim it. Also, as there will be many programming assignments throughout the course, those of you that learn best from books will want to pick a few of the language-specific texts mentioned below as well. In general, read as much as you can from the list below: it might improve your grade!

Theory: You'll want some solid, academic, treatment of distributed algorithms, models for concurrency and distribution, and distributed programming languages. Classic textbooks and journal papers are your best bet here. Examples:

Java: It seems like most non-trivial Java programs use threads or networking. Fortunately the language was designed with multithreading in mind, and networked code is easy to write.

Ada: Although not as widely used as it was several years ago, Ada remains one of the best case studies for a language that directly supports distributed, concurrent, and real-time features.

WinAPI Processes and Threads: You'll need to get good at consulting the online documentation for Windows threads; there aren't too many books, but the one by Beveridge and Weiner is pretty good.

Perl: I don't know of any good books or papers specifically covering Perl threads, but several presentations are online. As always with Perl, check out the tutorials and references on perl.org especially perlthrtut

Miscellaneous Papers: Here are a few papers we'll look at. They aren't classics.

Additional papers and readings will be assigned throughout the course (including my own course notes, practice problems, and sample code). If you have projects or papers to work on, you'll have to find some additional readings on your own. Use judgment when researching on the web; a fair amount of information is often wrong, and much of the so-called sample code is especially atrocious. Regardless, you must take the time for effective self-study that includes practicing the craft of programming.

Assignments and Grading

You'll have several homework sets containing in-depth theoretical questions and non-trivial programming problems, and quizzes and a final exam with less difficult material. To help prepare you to meet industry expectations for college graduates, most assignments will take the form of open source software products. Unless otherwise specified, you are required to keep all work in your CVS repository and prepare all homework solutions with LaTeX document preparation system. Exams will cover material from lectures not previously assigned for homework: don't whine about this.

Generally, coursework may be done in groups of no more than two students; however, while only one solution set is turned in per group, both students are responsible for understanding all of its content and may be asked at any time for an oral explanation of any solution. Collaboration with other groups is fine but must be limited: you may share ideas and approaches but nothing resembling a solution (not even pseudocode). You must also acknowledge any help received. Academic dishonesty may result in expulsion; be certain your work meets the standards set forth in the LMU Honor Code.

Your final grade will be weighted as follows:

Homework sets
45 pts.
 
Quiz 1
12 pts.
 
Quiz 2
16 pts.
 
Final Exam
27 pts.
 

Letter grades are figured according to the usual scale: 90% or more of the total points gets you an A, 80% a B, 70% a C, and so on. These are minimal requirements; for example, if you get 82 points you are guaranteed a B- or better, though you might still get an A since 82 may be the top score.

Homework is due at the beginning of class; late assignments are docked 30% per class. Missing class just to get an assignment done on time will not be tolerated; the only good excuses for missing class are excellent surf conditions, family problems, sickness, and personal emergencies. Skipping class just puts your fellow students at an advantage: we often spend class time going over things that will be "on the exam".

Your programming style will play a huge part in determining your score on the programming assignments. I will not hesitate to assign D's or F's to working programs which are poorly structured, under-commented, have poor identifier names and abbreviations, contain inappropriate hard-coded values, or are not easily maintainable. Appearance of the grading policy in this syllabus constitutes fair warning of the consequences of poorly written code.

Topics and Tentative Schedule

This is a tentative schedule.

University Links

All students will want to acquaint themselves with the useful information found in the following sources: