Concepts of Programming - CSPP 50101

Contents

  1. Course Description
  2. Administrivia
  3. Tutorials, References
  4. Books
  5. Academic Integrity
  6. Homework
  7. Course Software
  8. Syllabus

Description

This course is an introduction to programming -- no prior programming knowledge or experience is required. The goal is to familiarize students with the fundamental components of structured programming -- memory management, algorithms, data structures, modular design, etc. The course emphasizes fundamental concepts and elementary program design. Upon completion of the course, students should be well prepared to branch out into more modern, application-specific, and/or higher-level programming models.

Administrivia

Tutorials, References

Books

Most of these books are available at the Seminary Co-op Bookstore. You can visit the Eckhart library and glance through a reserve copy to determine which books would be best for you. Log on to Chalk to see the list of books on reserve for this course, including one available electronically. Please let me know what other books you find helpful, so I can list them here as well.

Academic integrity

Students are expected to have read and understood the University's policy on Academic Integrity, as detailed in the Student Manual of University Policies and Regulations.

Homework

Some homework assignments will be from the primary required text, System Programming with C and Unix. For problems which don't result in a full program, write up your experiences in a sentence or two, including code snippets and error messages where appropriate. Typically, homework due Monday will include concepts or practices which will help with the programming assignment due Friday. Homeworks are due Friday by 11:59pm and Monday by 5:29pm. Late homework will result in reduced or no credit, depending on my mood. Keep my mood positive by turning in homework before it's due.

Submit homework assignments using the unix command, hwsubmit, available on departmental Linux computers.

  1. Read the Unix Tutorial for Beginners.
  2. Create a directory with a descriptive name (e.g., "hw1"), and create all relevant files in that directory. For programming assignments, that would include your Makefile, source code (.c) and header (.h) files, and any data files used for testing. Do not include object files (.o) or compiled programs (eg. a.out). They are large, and recreatable, so it is wasteful to submit them (and it puts me in a bad mood!). For short answer assignments, plain text files with numbered answers are appropriate. Do not submit documents in MS Word or RTF format. If you feel that text formatting (bold, italic, yellow), or page layout (centering, tables, margins) are critical to your submission, use LaTeX, HTML, or if necessary, PDF.
  3. Change to the directory directly above the one you created. (cd ..)
  4. Type hwsubmit cspp50101 YOUR_DIRECTORY_NAME, and you should see a response in the terminal indicating that the directory has been sent to the grader.

Homework FAQ

These are answers to questions that may not have been asked, but should have been. Read carefully, or invoke my wrath!

  1. Homework submissions should contain only the files you want the grader to consider. When you run hwsubmit, it shows which files have been sent. If there are more than you expected, make adjustments and resubmit. Here's a list of files which have been submitted which we don't need to see:

    .abc.sh.swp abc.sh,v .bash_history bonus.sh~ ch1prob8.sh~
    .directory filecounter.sh.save filelist.sh~ Home.desktop
    hw1_Part2~ hw1.txt~ hw1.txt~,v hw1.txt,v HW2_1~ HW2_2.sh~
    hw2ch1pr5.txt~ hw2ch9pr5.sh~ HW2_Question1_p41_num5~ hw2.txt~ .lesshst
    .nfs00000000000130cc00000009 num_files.sh.save #question6# .question6.swp
    .saves-4710-altair.cs.uchicago.edu~ .swp System.desktop testing.sh.save
    testing.sh.save.1 testing.sh,v trash.desktop .viminfo
  2. Your scripts and program must compile and/or run on CS machines. They should compile and/or run without any warnings or errors. If there are warnings or errors that you don't know how to solve, email the mailing list. If you still don't know, write in a README file which things you're still having trouble with. I'm ok with giving 0 points to "solutions" which don't run and aren't documented.

  3. Bash scripts and C code must be in separate files, not embedded in the README file. This is so we can compile and/or run them.

  4. Make sure you give the proper argument to hwsubmit. For instance, hw1 or hw2, not ~/cspp50101 or ~!

  5. When in doubt, add a README file, explaining any deviations from the requirements of the assignment.

  6. When compiling C code, use -Wall -std=gnu99 options to gcc.

  7. When using a makefile, include the standard compilation options, and write all, test and clear targets so that make, make test, and make clean all run without any warnings or errors.

Course Software

We will use GCC on the departmental Linux computers. On your own machine running MS Windows you may be interested in Open Watcom, Visual C++ 2010 Express, or another free C/C++ Compiler, but your code will be evaluated on the departmental systems.

Syllabus

This is a rough plan for what we'll try to cover, and the order I hope to do it in. Topics may get shuffled, added, or removed as necessary.

Week Date Topics
1 21 June Review of Unix basics: logging in, bash, filesystem
More Unix: version control with rcs
2 28 June Unix/bash: review, processes, bash scripting, edit/debug cycle
High-level intro to C: comparison to other languages
3 08 July Basic C: program syntax, basic types, operators, expressions, control flow
Unix: tools for C programming
4 12 July Control flow; functions: recursive and iterative
5 19 July Types: representation, constructors (array, string); Command-line arguments
6 26 July Pointers; Structures
7 02 August Recursive Data Structures
8 09 August Memory management
9 16 August Separate compilation units; Linking; Libraries
10 23 August File I/O; Signals
11 30 August Function pointers; Function types
06 September Labor Day -- no class
12 13 September Review for final; Project due date
13 20 September Final Exam

Valid XHTML 1.0 Transitional Valid CSS!