Instructor: David Augenblick
Office: U Crossings 134
Course Webpage:
Office Hours: TBD

You can ask me questions during class, right before or after class, or during my office hours. Use the discussion board for questions on material, or general administrata.

An appropriate use of email would be to ask for a meeting, or, e.g., to let me know you'll miss class because you find yourself in the hospital.

Teaching Assistant:

To address all of the TAs (appropriate when you don't know which graded a particular problem), email . — the Cyber Learning Center website. Click on your course to see TAs who would be able to help (including yours).


Course Description:

Introduction to the basic principles of programming practice: testing, debugging, portability, performance, design alternatives, and style. Application in a variety of programming languages, programming environments, and operating systems. Introduction to tools used in the software development process for improving program functionality, performance, and robustness.

Course Goals:

To provide students with the skills needed to effectively design, develop, implement, debug, test, and maintain programs and more generally to solve problems using a computer. The course will teach these skills through the use of different programming languages, tools, and environments, though the general principles are independent of any particular language, tool, or environment. General themes include clarity, simplicity, generality, and automation.

Course Objectives:

This course will acomplish several things. You will:


This is a required sophomore level course for Computer Science students. A graduate version of the course is available as a pre-core course for those students who are not sufficiently comfortable developing, debugging, testing, tuning, and porting programs.


It is expected that you have had at least 6 credits of a higher-level programming language, and that you know some C++ (CS172 or equivalent).

Since we're studying Unix, you all need to activate your account on the department's servers. See to create one, if you missed lab 1.

I will mail grades for assignments to your Drexel account (e.g.,, so you should have that enabled and check that, or forward it somewhere.

Please note that, while high school algebra isn't listed as a prerequisite, it is a prerequisite for the BS program in CS.


  1. The Unix Programming Environment - basic commands, editor, shell, file
  2. system, filters
  3. Program development tools - context sensitive editor, make, cvs, debugger
  4. Scripting languages - Awk, Perl
  5. Programming style and Interfaces
  6. Design and implementation (C, C++, Java)
  7. Testing and debugging programs
  8. Performance and portability
  9. Metaprogramming - notation, macros, templates, little languages

Course Requirements and Grading:

Weekly labs 25%
3-4 assignments 40%
10 pre-lecture quizzes 20%
Final Exam 15%

Assignment evaluations will have a 20% reduction for each day they are late. Labs and assignments will have a 2-day hard deadline.

Last date to withdraw with a "W" grade:

Extra Credit


There are weekly labs. In general, you will be given time in class each week to work on your labs, where you can bounce ideas off each other, and ask your professor questions.

You will submit your own, original work.


You must know your section number. Use flashcards, if you have trouble. You may not ask your neighbor, nor look at your phone during an exam.

You will have a weekly quiz, online (Blackboard), to be completed by 10:00 Monday each week. Note, that's in the morning.

The quizzes will check to see that you've done the reading for the coming week, and might go a little more in-depth into the previous week's material. So, look over the lecture notes and reading in the text, as appropriate, before class, and ask good questions during class.

The lowest 2 quiz scores will be dropped from the final calculation. This covers any quizzes missed due to medical issues, as well as technical difficulties.

Exams are closed-book. No notes, phones, computers, etc.


In lab, you guys may explore together, but you must hand in your own work. Assignments, and programs for labs, are to be done entirely on your own. This course is not to teach you to take other people's work, but to learn to provide your own solutions.

Do not pull stuff off the Web. Odds are decent you'll get a 0, or be given an F for the course.

Most of your work will be in electronic format.  The format of each assignment will be specified. 

You are expected to abide by the deadlines. If you missed submitting by 2 minutes, then it's late. If submission closed 2 minutes before you tried to submit, you were late by 2 days and 2 minutes. We will not accept it.

Under no circumstance will you email your work, w/out prior consent.

Target Platform

Because there are differences, even between flavors of Unix, all projects will be graded on the department Linux workstations (accessed through You have several options (keep reading) for development, but you should test your stuff on tux before submitting.

The department Unix machines

You all have an account on the CS servers. Click here to activate your account, if you've not already done so.

You can access your files and have shell access to tux from anywhere on the Internet.

The department has a Web server where you can post content that we may play with at some point.

On my front page are some links for basic Unix commands, and a quick reference for using the vi editor. Please also visit the Resources frame on this site.

Installing cygwin on your machine

Another fine alternative is to install an environment such as cygwin on your Microsoft machine. This gives you the g++ compiler, GDB (the gnu debugger), and a make utility, along with the bash shell, and other common utilities, such as vim (an improved vi editor), cvs, a source versioning system, and some other neat things.

MobaXterm provides a Cygwin environment, an X-server, and a nice, tabbed SSH client.

Some IDEs for g++

I don't know if cygwin comes w/this, but there are some IDE's that will ride atop the gnu compiler that you can download, giving you a GUI editor and a debugger, along w/other common tools (navigation, etc.). Let's see, KDeveloper or Eclipse.

Macintosh machines

Apple OS 10 already have a BSD (Unix) subsystem in place. You'll want to install gnutools, coreutils, something like that. You get many of them when you install XCode. That'll certainly get you gcc, the C compiler.


All the flavors of Linux are fine, too. Just test on tux.

If you're gonna be programmers, you're going to have to get used to working on different platforms. Of course we have personal preferences, but that doesn't stop us from working where we need to. If you have your files on the CS servers (or on dunx1) you'll be able to access them from anywhere on the Internet, even if you don't have your personal machine w/you. An Internet connection and secure-shell (SSH, free from Drexel's download site, or PuTTY, a free small stand-alone) program are all you need.

Classroom Attendance

By the laws of most states, you've reached the age of consent. If you don't want to come to class, I won't cramp your style. But you are responsible for getting notes from someone other than myself.

You are expected to be in class. I might be moved to take attendance.

Quizzes and labs are mandatory. See Exams for a discussion of excused absences.

In general, you are responsible for anything I say, write on the board, and all assigned reading, unless I specify otherwise.

I will announce all homeworks and quizzes ahead of time; generally assignments, homeworks and times are posted on Bb Vista, and on your class page.

A simple observation: while there have been exceptions, generally (more than 95% of the time) students who don't come to class regularly don't do as well on exams, and often receive poor grades, often lower than that student, in my estimation at least, could've done.

Classroom Participation

Again, your grade is not affected directly by how often you raise your hand. However, I strongly encourage you to do so, either to respond to my questions, or to ask your own.

Do not think your question is not worthy. That would be my call. I may, at times, defer your question until I can give it better attention. And while we all know platitudes about best intentions, I try never to insult anybody. If I do, blame my ignorance, at least until you tell me about it and hear my side.

In short, I need feedback, I need to know if you're bored or you're lost (those 2 expressions look oddly similar), and the class (and hence, the learning process) goes much better, and is more fun (and doesn't seem to take as long), if the classroom interaction isn't clearly one-sided, but more energetic. I will occasionally make mistakes on the board (always intentional, of course); I expect you to catch them out and call me on them.

Academic Honesty