Proposed Software Engineering Courses

A. Software Carpentry

Software Carpentry is an intensive week-long course that teaches scientists and engineers how to use computers more effectively in scientific research. Originally developed for Los Alamos National Laboratory, it focuses on skills that are directly applicable to simulation, data analysis, and scientific software development.  The course is highly modular, and can easily be adapted to match students' backgrounds and needs. Topics typically include:


  • Version control
  • Testing and validation
  • Task automation
  • Program design
  • Agile development practices
  • Integrating legacy code
  • GUI construction
  • Working with text, images, XML, and relational data

Students should have some prior knowledge of Python and the Unix
shell.  For more information, see:


B. C++ Level 1

(Profile Consulting -
The Object Model Member Functions: Access Control; Object Management: Constructors, Destructors, Dynamic objects (new, delete); C++ as a Better C: Stream I/O, Const Inline, Functions Default, Arguments, Function Overloading: Specialization: Public Inheritance, Pointer Conversion, Heterogeneous Collections; Polymorphism: Virtual Member, Functions, Dynamic Binding Abstract Base; Production Programming Mechanisms: Static Members, Protected and Friend, Arrays of Objects, Linkage Issues; Production Programming Techniques: Dynamic Object Ownership, Header Files; Operator Overloading: Unary/Binary Operators, Operator Functions, Reference Type; Value Semantics: Object State, Assignment, Initialization; Templates: Type Parameterization, Collection/Container Classes, Implementation Issues; Template Library: Iterators, Collections, Algorithms; Multiple Inheritance: Protocol Inheritance, Multiple and Dynamic Classification, Virtual Base Classes; Exceptions: Handling Policies, Exception Mechanism, Case Studies.  Prerequisite: Experienced with intermediate level programming in C. Programmers should be comfortable with structures, pointers, arrays, dynamic memory allocation, string handling, and the C preprocessor. Familiarity with object-oriented programming is not a prerequisite.

C. Java Programming Interm/Adv

(Profile Consulting -
Topics include: INTERFACES: Class, Abstract Class, Interface & Implements, Instance of Casting, Multiple Interfaces, Extensions ; EXCEPTION HANDLING: Motivation, Throw Statement, Class Exception, Throws Clause, Exception Specialization, Try-catch-finally, Checked versus Unchecked Exceptions; THREADS: Intro &  Motivation, Thread Creation, Class Thread, Lifecycle, Priorities, Yield, Thread Groups; JAVA.IO PACKAGE: Taming, OutputStream, Decorator Pattern, Input-Output Symmetry, Byte-char Symmetry,  Class File; JAVA.NET PACKAGE: Internet Basics, Connection-oriented Communication, Client/Server Side-Class Socket, Connectionless Communication, Class DatagramSocket; Hybrid Examples; INNER CLASSES: Caveats & Motivation, Coupling, Inner Class Semantics, Binding, Ambiguity, Anonymous Classes, Examples; WEB & SWING PROGRAMMING. Pre-requisites: Skilled in basic, introductory level Java Progrmming.

D. Java Programming Level 1

(Profile Consulting -
Basic introduction to object-oriented technology using the Java language. Concentrates on understanding the central concepts of object-oriented programming: data abstraction, inheritance and polymorphism, and how these are supported in the Java language. Topics include: PRI: Java Primitives - Background and Basics; PRO: Procedural Programming - More Language Basics; OOP: O-O Programming - Data Abstraction, Classes and Objects; WWO: Working with Objects - Gaining Comfort Using Objects; EXT: Extending Classes - Basic Inheritance and Polymorphism; COL: Collections - Managing Collections of Objects; EXM: O-O Examples - Case Studies; FUN: The Fun Stuff - GUIs and Applets. Indepth module descriptions available at Profile Consulting Web Site:  Targeted towards professional programmers who do procedural programming but haven't yet done object-oriented (O-O)programming. This course teaches the fundamental concepts of object-oriented programming and enough of the Java language to express objects, in approximately equal measures. This is NOT an Introduction to Programming course.


This 2-day course, originally developed as a precursor to the Software
Carpentry course, introduces scientists and engineers to the Unix operating system.
Students will learn:

* the fundamentals of the Unix file system and process model
* how to manipulate data files using standard Unix tools
* how to combine tools and create new ones using the pipe-and-filter model
* how to use SSH and relatec technologies to make their work more secure
* how to automate repetitive tasks using Make

Students must have some prior exposure to programming, but no previous
experience with command-line tools or the shell is required.