Computer Science 23 - Spring 08
Software Design and Implementation


schedule and notes    lab assignments   class reading    project   other resources

Course

The ORC: Techniques for building large, reliable, maintainable, and understandable software systems. Topics include UNIX tools and filters, programming in C, software testing, debugging, and teamwork in software development. Concepts are reinforced through a small number of medium-scale programs and one team programming project.

More specifically: The course teaches Linux, C and shell programming,  the use of GNU development tools (gcc, dgb, make, gprofile, cvs) and design and implementation techniques. As part of the course we will design and implement a simple search engine as part of a series of programming assignments. The course includes a group project based on programming embedded linux robots.

Note, there is a significant amount of programming in this course requiring a significant time commitment on the part of the student.

The course breaks down into seven or eight weeks of lectures and labs with the remaining time held over for group projects. The projects will be organized around a design review, code review and demo or die event.


What we will learn: Some linux, shell programming, C programming,  programming tools, how to design, implement and debug a complex software system by working together in small groups. We hope that the skills learnt and experience gained will reflect what you would expect in the software industry when working in small teams.

This should be fun and exciting and challenging. You will develop a search engine as a thematic set of laboratory programming excercises - yes, you can be google too!

You will program embeded linux robots (the garcia below) and learn about sensors that the robot will interact with as it roams around the building on a treasure hunt, searching for what ...  some photos from the CS23 bot treasure hunt and bot race here.

               



When and Where

10 am-11.15am Mon, Wed, Fri (Kemeny Hall 007)

12.00-12.50pm X-hour  Thursday  (Sudikoff Lab 001)

Team

Andrew T. Campbell (Instructor)
campbell AT cs.dartmouth.edu
260 Sudikoff
Office Hours:  Thursday 4-6 PM. (or just drop by. My rule is that if my door is open and I'm not in a meeting then I'm happy to talk).

Wei Ping (TA)
pway AT cs.dartmouth.edu
158 Sudikoff
Office hours in Lab 001: Saturday 4-6 PM, Thursday 12-1 PM, Sunday 6-8 PM.

Mirco Musolesi (Tutor)
musolesi AT cs.dartmouth.edu
147 Sudikoff

Grading

10% - Class contribution

There will be a discussion in class regarding the course reading material. Active involvement in that discussion will help toward the class contribution part of the grade.


50% - Laboratory exercises

There will weekly laboratory programming assignments for the first seven weeks. These are designed to help you learn the languages, tools, and design skills you will need for your final project. These assignments are to be done individually unless otherwise stated in the assignment.


We will provide source code solutions to all labs. The code will be put on the lab assignment webpage one week after you have submitted your solutions. The TA will grade your solutions and write up a grade sheet on the correctness, simplicity, and clarity of your code. The instructor will review the TA's grading and grade sheets. Your grade and grade sheet will be mailed to you one week after the lab assignment is turned in. If you have questions about the grade or grade sheet please talk to the TA first. If you are still have concerns see the instructor.

40% - Team project

The project is made up of a small team (three or four people) and requires strong collaboration and a problem solving mindset to get the job done. The instructor will put the teams together with each member being responsible to deliver against a part of the overal system design, implementation, testing and integration.  The goals of this activity are to help you develop the confidence, skills, and habits necessary to write large computer programs while part of a multi-person team. You will become conversant in software engineering paradigms, and be exposed to various public-domain and open source tools that make the software development process easier. In addition, you will develop vital skills in self-directed learning, problem solving, and communication. The project will have a design and code review as well as the demo. A project report that captures the design and implementation will be submitted as part of the assesment.

Policy for Late Assignments

Unless prior arrangements have been made, or in case of medical or family emergencies, or specific disabilities, all assignments are subject to the following policy regarding late submissions:

Programming assignments must be submitted according to the schedule; if late, the following grade penalties are assessed:

Late < 8 hours
    Ten percent (10%) will be deducted from the final score.
Late ≥ 8 hours and < 24 hours
    Twenty percent (20%) will be deducted from the final score.
Late ≥ 24 hours and < 48 hours
    Forty percent (40%) will be deducted from the final score.
Late 48 or more hours
    Speak to the lecturer.

One free pass for 48 hour extension with no penalty.

Caveat: This course is still under development in terms of the programming assignment so while the grade penalties seem set in stone they are
not. Please talk to me if you are running behind. The most important thing for you to do is to to finish the programming assignment and not worry
about being late so much.

Lab Access

In order to obtain access to Sudikoff after hours, and to get into Sudikoff's Lab 001, you will need to have your Dartmouth ID card activated for the appropriate access. To do this, stop by and see Kelly at 101 Sudikoff on a weekday between 8:30am-12:00pm, or 1:00-4:00pm, and bring your Dartmouth ID card. Inform Kelly that you are taking CS23, and require access to Lab 001. You will have to fill out and sign a form stating that you understand the various policies about access to the labs in Sudikoff.

Keep in mind that it may take 24 hours for access to be activated, so please plan ahead!

You will also require a computer account on the CS Linux machines. Contact Andrew Campbell, via email, informing him of your preferred (new) account name.

Please note that the exterior doors of Sudikoff are automatically locked after 6:00pm weekdays, and also every weekend and holiday. In addition, the laboratory doors are locked at all times. You will need your access card to pass through locked doors.

Books

There is no one book that caters for the material in the course.  However, we do recommend a book on the C language:



A First Book of ANSI C, Fourth Edition by Gary J. Bronson

We do not recommend you buy any other books for the course. But If I were to recommend a book on design and programming for Unix and C it would be this classic text:

 

The Practice of Programming (Addison-Wesley Professional Computing Series)  by Brian W. Kernighan, Rob Pike

If I where to recommend a hands on book on Linux and shell programming  it would be this one (lots of good stuff in this):

A Practical Guide to Linux Commands, Editors, and Shell Programming by Mark G. Sobell

Another really good book covering, debugging, processes, threads, and socket programming in clear and easy manner to grasp:

Linux Programming

Beginning Linux Programming, 4th Edition by Neil Matthew, Richard Stones

Just to make things clear. Buy the ANSI C book for the course. But if you are interested in hacking C, shell scripts, Linux you might like the other books for your library. They are all really nice books - I love them.

Policy on Joint Work and the Dartmouth Honor Code

The assignments and project are all about writing great code - shell scripts and C. Here is the policy for joint work in CS23:

First, you may discuss and help each other (e.g., help in debugging, sharing knowledge, giving moral support, getting coffee, etc.) - I promote that as the type of team spirit and joint problem solving skills that is the essense of the course and necessary to do a great project. However - there if always a however or but, right, - you cannot work jointly on coding up (i.e., writing) your programming assignments. You can talk, discuss solutions, even show snippets of code on the white board (not the computer) to solve a problem but you cannot jointly work on the code development and writing. Submitted code for the labs has to be yours and yours alone.

The project phase is different. You can work jointly on writing code. But you cannot take code from anywhere (e.g., the web or any other source). It has to be the joint product of the team. One caveat: no sharing of code between teams. As above, teams can discuss code, show each other snippets on the white board, but not share source code. The project phase of the course is a friendly competition so there isn't a lot of incentive to share code.

We hate to state this since you all know it but it is necessary to be explicit here (citation - culled and extended from CS8 Policy on joint work):

You would be amazed at how easy it is to tell when people work together on problem sets, particularly coding exercises. Think about the simple shell commands we can run against your source code from labs and projects, or, the shell script we can use to compare your lab assignments and projects against every other assignment and project ever submitted to us - it would take less that a millisecond to run these checks - no effort on our behalf. Similarly, we know how to use google too. You should not under any circumstance look at or use code from previous terms' CS23 assignments and projects. Our scripts are smarter than that. The message is - please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at Dartmouth are severe, starting with suspension and including expulsion. If you are unsure about anything, please ask.

We take the Honor Code very seriously, so please, if you are unclear on any matter regarding this policy, do not hesitate to see me in office hours, and we will be more than happy to answer your questions.