Line

Advanced Computer Programming
AERSP 424

Line

The Pennsylvania State University
Fall, 2008

Prof. Lyle N. Long

This course presents an advanced view of computer programming, mainly using Java, C++, and Ada95. 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++ and Ada95 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.

Objectives: 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. (this is covered more fully in CSE 557 and NucE 530)
  5. Demonstrate basic knowledge of software engineering concepts. (this is covered more fully in AERSP 440)

This course has evolved a great deal over the last 15 years. It has been taught as an experimental course under titles such as "Parallel programming for engineers and scientists," "object oriented computing," and "Java and Linux." It is now simply called "advanced computer programming."

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

AERSP 424 is also a prerequisite for NuCE 530: Parallel and Vector Computing.

We also plan to make this course part of the proposed Undergraduate Minor in IST for Aerospace Engineering .

Instructor:

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

Classroom: 262 Willard Building

Days/Times: M W F, 9:05 - 9:55

Teaching Assistant: none

Outline:

  • 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
  • Java
    • Introduction to Java
    • Java Applications
    • Java Applets
    • Control Structures and Arrays
    • Methods
    • Object-Oriented Programming
    • Graphics
    • Graphical User Interfaces
    • Exception Handling
    • Threads
    • Files and Streams
  • Intro to Ada
  • Message Passing Interface (MPI and Parallel Computing)
  • Conclusions

Lectures:

  • Some class periods may meet in a student computer lab

  • I have had numerous requests from students and faculty to "sit in" on the course or audit it. I find this too disruptive, and therefore am not allowing it. There are already too many students in the course.

Course Homepage: http://www.personal.psu.edu/lnl/424/
(only available to students in course)

Required Textbooks:

  1. "C++ and Object-Oriented Numeric Computing", by D. Yang
  2. "JAVA for Scientists and Engineers," 2nd Edition, by S. Chapman, Prentice-Hall

Other useful sources:

  1. Running Linux, 4th Edition, Welsh, Kaufman, Dalheimer, and Dawson
  2. Core C++, by Shtern, Prentice Hall
  3. "Core Java," by Horstmann and Cornell, Prentice Hall
  4. Ada Home and AdaCore
  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
  11. Software Carpentry
  12. CrossTalk

Required Compilers:

  1. Java Software Development Kit
  2. C++ compiler (e.g. IBM xlC, Borland C++, or g++)

Computers:

  1. I will get you accounts on our new IBM P590 computer
  2. You should also get an account on the PSU Linux Cluster and the IBM RS6000 cluster

Course Conduct:

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

Grading (tentative) :

    Homework 25% and three Midterm exams roughly 25% each (we will not have a final exam)

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

Line
You are the 722nd visitor since Sept. 30, 2006.
Last modified: Tuesday, 11-Mar-2008 02:53:19 EDT
Line