Advanced Computer Programming


Prof. Lyle N. Long
The Pennsylvania State University

Office Hours: Room 233 Hammond Bldg.

214 Boucke Bldg.
Tues. & Thurs., 12:05 - 1:20 PM

Teaching Assistant: TBD
Office Hours:

This course presents an advanced view of computer programming, mainly using C++. The use of current operating systems (e.g. Linux and Unix) and compilers (e.g. gcc) will also be presented. Object Oriented Programming will also be discussed in detail. Object Oriented Programming is quite different than functional or procedural programming, and it is difficult to learn on your own. The differences and similarities between Java and C++ will also be discussed. Hands-on programming will be a key part of the course. As Robert Glass says in his "Facts and Fallacies" book, it will be important for you to be able to read codes (as well as write them).

The goal of this course is to introduce and study key concepts related to computer programming for scientific and engineering applications.

This is an important course, and should be quite valuable for you, whether you plan to do computational science or robotics or .... in my opinion every undergrad and grad student at Penn State should take a course like this. I have had numerous graduate students tell me that this was the most useful course they had at Penn State. These students were from many different departments: Meteorology, Mathemtics, Astrophysics, Chemical Engineering, etc.

Programming is difficult learn. It requires practice. But with this many students, it is very difficult to assign and critique lots of code. I'll do the best I can, but you need to put in your time to really learn this stuff.

Keep in mind that it takes most people at least five years to really become proficient in a particular computer programming approach.

If you are already quite familiar with C++ and OOP this is not the course for you. Consider taking CMPSC 450, CSE 557, or NucE 530 instead of this course.

Outcomes: Students who successfully complete this course will be able to:

  1. Apply and develop object oriented code.
  2. Develop software for a variety of architectures (e.g. Windows, Unix, and Linux).
  3. Choose an appropriate computer language (e.g. C++, Java, Ada) for a given project.
  4. Demonstrate basic knowledge of parallel programming concepts (e.g. MPI, OpenMP, threads, etc.) (covered more fully in CMPSC 450, CSE 557 and NucE 530)
  5. Demonstrate basic knowledge of software engineering concepts (covered more fully in AERSP 440)

AERSP 424 can be used to help satisfy the requirements for the Graduate Minor in Computational Science .

This course can also be used for the Undergraduate Minor in IST for Aerospace Engineering .

The Detailed course notes are only available to students in course. .


  • Introduction
    • Computers available for this course
    • The History of Computing
    • The Future of Computing
    • Trends in Programming Languages
  • Linux
  • Utilities: vi, emacs, dbx, make, cvs, and IDE's
  • Brief Introduction to Software Engineering
  • C++
    • Intro to C++
    • Basics
    • Control and Arrays
    • Pointers
    • Structures, Classes, and Objects
    • Operator Overloading
    • Input / Output
    • Templates
    • C++ vs. Java
  • Brief Discussion of Java, C#, and Objective-C
  • Parallel Computing
    • MPI
    • OpenMP
    • Threads
  • Conclusions

Course Homepage:
(only available to students in course)

Required Textbooks: "C++ and Object-Oriented Numeric Computing", by D. Yang

Other useful sources:

  1. "JAVA for Scientists and Engineers," 2nd Edition, by S. Chapman, Prentice-Hall
  2. Running Linux, 4th Edition, Welsh, Kaufman, Dalheimer, and Dawson
  3. Core C++, by Shtern, Prentice Hall
  4. "Core Java," by Horstmann and Cornell, Prentice Hall
  5. "Software Engineering," by Ian Sommerville
  6. "Facts and Fallacies of Software Engineering," by Robert L. Glass
  7. "Code Complete," by Steve McConnell
  8. "The Mythical Man Month,": by Frederick P. Brooks
  9. "Parallel Scientific Computing in C++ and MPI," by Karniadakis and Kirby
  10. "Parallel Programming with MPI," by Pacheco

Required Compilers: C++ compiler (g++)


    You should also get an account on the PSU Linux Cluster

Course Conduct:

    There will be (roughly) weekly homework assignments and three midterm exams (no final final exam).

Grading :

         20% Homework 
         70% Highest two exams
         (we will not have a final exam)
    When I grade homework problems or exam questions, I use a scale like this:
                         90-100 A
                         80-90  B
                         60-80  C
                         40-60  D
                         <40    F
    And if lots of people have A's at the end of class, that is OK (but it doesn't usually happen). If the final scores end up being a lot lower than expected, I might shift the curve so that the average is a B+.


    Homework will be posted on: Angel website

    Make sure you do all the reading assignments listed on the course webpages also.

    The exams will test whether you did these. They won't take that much time, do them and learn all you can in the process!

    We will use Angel dropboxes for the homework ( ). You can work in groups of two (but no more than two). If you need help, please send me or the TA the proper info, otherwise we cannot help you.

    You will loose 10% for each day your homework is late.

  • Please, Please Please!!!!
    • Be on time for class !!! It is very disruptive to have people walk in late. You will be penalized for coming in late.
    • Turn off all cell phones!!! If your cell phone goes off in class, you'll be asked to bring cookies for the whole class for the next class period!
    • Don't talk during class unless we are having a discussion
    • Do not bring a laptop to class, you cannot concentrate on the course if you have a laptop
    • You need to have a pad of paper and a pen. You need to take notes. No one can remember everything discussed in class.

    Academic Integrity:

      Faculty Senate Rule 49-20 states, in part, "Academic integrity is the pursuit of scholarly activity free from fraud and deception and is an educational objective of this institution."

    Class Attendance:

      Class attendance is required; the lectures will include material not included in the webpages. Therefore, if you miss class, you will need to get notes from a classmate.

    Prerequisites: CS 201C or equivalent

    See Also: AERSP 440: Introduction to Software Engineering

    Required statement: Penn State welcomes students with disabilities into the University's educational programs. Every Penn State campus has an office for students with disabilities. The Office for Disability Services (ODS) Web site provides contact information for every Penn State campus: For further information, please visit the Office for Disability Services Web site:

    In order to receive consideration for reasonable accommodations, you must contact the appropriate disability services office at the campus where you are officially enrolled, participate in an intake interview, and provide documentation: If the documentation supports your request for reasonable accommodations, your campus’s disability services office will provide you with an accommodation letter. Please share this letter with your instructors and discuss the accommodations with them as early in your courses as possible. You must follow this process for every semester that you request accommodations.

    Last modified: Thursday, 07-Sep-2017 13:43:41 EDT