Course Outline
Weekly schedule
Pre-requisites
Work Load
Homeworks and exams
C and C++ compilers
Sample Programs Used in the class
References
Tips and guidelines for good programming
Academic dishonesty policy

Ramana Isukapalli's Columbia University Page


Day/Time: Wednesdays 9:00 - 11:00AM.
Location: 834 Seeley W. Mudd Building.

TA: Ashwath Narasimhan; an2355@columia.edu
TA's Office: 122A Mudd Building
TA Office hours: Monday 1-2 PM

First Lecture is on Sep 10.

My contact information

I work at Alcatel-Lucent.

Mailing address:
67, Whippany Road
Lucent Technologies, Bell Labs Innovations
Whippany, NJ 07981

Columbia email:

Course outline

This course covers C++ from an "Object Oriented Programming" (OOP) perspective. At a high level, we will cover the concepts of classes, objects, data encapsulation, inheritance, polymorphism, etc. in C++. This will be a hands on course --- we will see many programming examples throughout the course. Homework assignments are intended to make the students familiar and confident of writing C++ programs. The aim of this course is to make students design and write C++ programs in the area of their study/research.

Weekly schedule

    Date Topics Notes
    Sep 10
    • Course highlights
    • Overview of C
    • C data types, statements, expressions
    • Usage of if, else, for, while, do, etc.
    • functions and pointers.
    Lecture1
    Sep 17
    • Design principles of C++.
    • Class, object, data and methods.
    • Constructor and destructor.
    • Data encapsulation.
    Lecture2
    Sep 24
    • Inheritance and polymorphism
    • virtual functions, abstract classes
    • friend functions/classes
    Lecture3
    Oct 01
    • const functions
    • passing arguments by value or reference
    • Templates
    Lecture4 Midterm
    Oct 08
    • Operator overloading
    • namespaces
    • STL: vector, list classes, iterators.
    • Using a debugger.
    Lecture5
    Oct 15 No lecture No lecture
    Final Exam

Pre-requisites

  • It is highly recommended that students taking this class know C programming or Java programming.
  • If not, they should be good with any other programming language and should be capable of learning C "quickly" (less than a week).

Work load

  • Four programming assignments: 60%
  • A midterm: 15%
  • A final exam: 25%

Homeworks and exams

  • Homeworks will be posted on my web page (this page). Please complete them and submit them in Courseworks. Please DO NOT mail them to me.
  • Each programming assignment is due by 9 AM the following Wednesday.
  • Late submission policy: I don't encourage late homeworks. But, from the past experience of students facing the issues of setting up their accounts, getting familiar with the compiler in a relatively short time, etc., every student can have a total of 7 late days to submit his/her homeworks. For example, you can use 3 extra days for your first homework, 3 days for your second homework and 1 day for your third homework. Please use this extra period only in unavoidable circumstances. All the homeworks need to be submitted before Oct 11. .


C and C++ compilers

You need to have access to C and C++ compilers for this course. The compilers that I recommened are the GNU C and C++ compilers. You can invoke GNU c compiler using the command "gcc" and GNU C++ compiler using the command "g++". You can get access to the using any of the methods listed below:
  • If you have access to cunix (cunix.cc.columbia.edu) account, you can use the GNU C and C++ compilers on that.
  • If you have your own Windows based PC/laptop, you can download "cygwin" from the site http://www.cygwin.com. It gives a complete UNIX environment with "bash" (unix shell) and also GNU C and C++ compilers.
  • If you have any linux based computer, chances are that it comes with GNU C and C++ compilers. Type the above two commands and see if the compilers are available.

Sample Programs Used in the class

As requested by some students in the class, I am giving access to the sample programs that I used in the class. Please note that these programs are kept simple intentionally, to explain the concepts. Programs used in:

References

There are many textbooks available on C++; there is a lot of material available on the web. Any of these should be fine. Lecture notes will be provided prior to each lecture. In addition to these, you can use the following material:

Tips and guidelines for good programming

Here are some tips you may find useful when writing code. Please follow these when you submit your homeworks.
  • Include comments wherever you can. Make sure that your code can be easily understood by others (and you yourself, in future).
  • Use meaningful names for variables and constants.
  • If some code segmenet ( e.g., computing the outcome of some mathematical functions like factorial or exponent) has to be used in several places, it is better to have a separate function for it. In general, the same piece of code should, in general, not appear twice anywhere in your code. If you have to change it future, it is much easier to change it in one place, than in many places.
  • If a constant (like "pi") value has to be used in many places, define it as a const variable once ( e.g., const double pi) instead of using the value (3.1415..) in many places.

Academic dishonesty policy

The aim of the course is to learn C++ in a relaxed and informal atmosphere. If you have problems following the course material or doing any homeworks, please discuss with me. Go through the academic dishonesty page and please do not cheat in the homeworks or in the exams. I will be forced to follow the rules strictly if such a situation arises.
Ramana Isukapalli
Last modified: Sun Mar 9 23:35:14 EDT 2008