Instructor: Professor Rozier

E-mail: kyrozier@iastate.edu

Office: 2335 Howe Hall

Office hours:
T/R 11:50am--12:30pm or by appointment


Guest Lecturer: Christopher Johannsen

Email: cgjohann@iastate.edu

Office: 0238 Howe Hall

Office hours: by appointment


Teaching Assistant: Ashley K. Behrendt

Email: akb01@iastate.edu

Office: 0241 Howe Hall

Office hours: M 9:00am-11:00am or by appointment


Teaching Assistant: Gage Harris

Email: gharris@iastate.edu

Office: 2362-8 Howe Hall

Office hours: M/W 1:00-2:00pm or by appointment


Teaching Assistant: Alec E. Rosentrater

Email: alecrose@iastate.edu

Office: 0238 Howe Hall (Lab)

Office hours: F 10:00am-12:00pm or by appointment


Teaching Assistant: Benjamin J. Turner

Email: bjturner@iastate.edu

Office: 2234-7 Howe Hall

Office hours: M 12:30pm-2:30pm or by appointment


Reach all of us together at: 361ta@temporallogic.org


Class Location: Hooover Hall 1213

Meeting Time: TR 11:00am--11:50am


AER E 361

Course Summary

In this course you will be introduced to the fundamentals of C programming, the Linux operating system environment, development of computational tools for aerospace analysis and design, and technical report writing. The emphasis of the course is on learning best practices that form the basis for modern professional engineering. Therefore, the course will use the tools and processes that are most common in industry today, emphasizing good documentation and version control.

This course is intended to be a fun, interactive introduction to applying computational analysis in the context of real-world systems. Hands-on learning, through the use of industrial techniques in labs/homeworks, will be emphasized. We will learn the computational tools and techniques used at NASA, Boeing, Rockwell Collins, Honeywell, Airbus, Mathworks, and others with an emphasis on professional workflow and engineering best practices.

Course Syllabus and University Integrity Policy

Textbooks

Required; Use this for:
  • git and github
  • bash scripting
  • linux operating system/command line overview
  • debugging with gdb
  • makefiles, libraries, linking, and build management with make
  • prototyping
  • machine numbers and the IEEE 754 floating-point standard

Required; Use this for:
  • all things related to C programming!
  • scientific computing implementation

Optional; Use this for:
  • supplemental material and exercises related to C programming
  • This is one of many optional supplemental books available.
  • Do not buy this book; it is available free through ISU library!

Optional; Use this for:
  • supplemental material related to computing (versus calculating), memory, and computer organization (and how these affect the execution, performance, and correctness of programs)
  • This is one of many optional supplemental books available.
  • This (short) book is available free HERE!
Many students ask about books for learning C++.

Tools

Git (and github)

http://github.com/
Ubuntu Linux: Run the following command in a terminal: sudo apt-get install git-all
Mac OS: Download HERE
Windows: Download HERE
Additional info: if you want a deeper understanding of git, there are many online courses.

LaTeX

https://www.latex-project.org/
Ubuntu Linux: Run the following command in a terminal: sudo apt install texlive-latex-extra
Here is a nice tutorial from NASA!
Mac OS: Download HERE
Windows: Download MikTeX or proTeXt or TeX Live
Kile GUI (for any OS): Download HERE

gcc, the GNU Compiler Collection

https://gcc.gnu.org/
Ubuntu Linux: Run the following command in a terminal: sudo apt install gcc
Mac OS: Download HERE
Windows: Download HERE

GNU Emacs

https://www.gnu.org/software/emacs/
Ubuntu Linux: Natively installed; for issues read HERE
Mac OS: Download HERE
Windows: Download HERE


GNU DataDisplayDebugger

https://www.gnu.org/software/ddd/
GNU DDD is a graphical front-end for command-line debuggers such as GDB, the bash debugger bashdb, the GNU Make debugger remake, or the Python debugger pydb. Besides ``usual'' front-end features such as viewing source texts, DDD has become famous through its interactive graphical data display, where data structures are displayed as graphs.


See also dynamic analysis tools like Valgrind: a memory analysis/pointer debugger and Callgrind: a call-graph generator.





You may either install these tools on your local machine or run them on ISU 's Virtual Machines (VMs) or remote linux servers. Every student in the class is assigned a personal VM with all of the above installed, named aere361-xx.ece.iastate.edu (for some value of xx). All assignments will be graded from within the provided VM environment so make sure to test your code there. The tools can also be run via a remote desktop connection (e.g., ssh -Y -X) to linuxremote1.engineering.iastate.edu thru linuxremote5.engineering.iastate.edu. There are also two aerospace linux servers that tend to have more free cycles: linuxremote-1.aere.iastate.edu and linuxremote-2.aere.iastate.edu. You must be on-campus or connected to the VPN from off-campus to reach these systems. For example, 'gcc' and 'emacs -nw' and 'bash' run from the command line.

Laboratory Projects

Lab 1 (Git, Markdown, and LaTeX): distributed from HERE -->

Lab 2 (Operating System Essentials): distributed from HERE

Lab 3 (Scripting with Bash): distributed from HERE data.tar.gz file needed for the lab is HERE
Demo: The Power of Dot Files
Demo: Debugging Bash Scripts

Lab 4 (Hello, C!): distributed from HERE
Reading for this lab: C Programming Language, 2nd Edition:
Chapter 1 A Tutorial Introduction
        Section 1.1 Getting Started
        Section 1.3 The For Statement
        Section 1.5 Input and Output
        Section 1.7 Functions
Chapter 2 Types, Operators, and Expressions
Chapter 3 Control Flow
Chapter 7 Input and Output

Lab 5 (More C ... and Complexity): distributed from HERE
Reading for this lab: C Programming Language, 2nd Edition:
Chapter 7 Pointers and Arrays
Chapter 7 Input and Output

Lab 6 (Debugging with gdb): distributed from HERE
Reading for this lab:
Introduction to Scientific and Technical Computing:
Chapter 5: Debugging with gdb
Chapter 10: Prototyping

C Programming Language, 2nd Edition:
Chapter 7 Pointers and Arrays

Lab 7 (All About Pointers): distributed from
Reading for this lab: C Programming Language, 2nd Edition:
Chapters 4, 10, 17

Lab 8 (Makefiles, Libraries, and Linking): distributed from HERE
Reading for this lab: Introduction to Scientific and Technical Computing:
Chapter 6: Makefiles, Libraries, and Linking
Chapter 7: Linking and Interoperability
Optional: Managing Projects with GNU Make

Lab 9 (Machine Numbers and the IEEE 754 Floating-Point Standard): distributed from HERE
Reading for this lab: Introduction to Scientific and Technical Computing:
Chapter 2: Machine Numbers and the IEEE 754 Floating-Point Standard

Lab 10 (The Matrix): distributed from
HERE Reading for this lab:
Introduction to Scientific and Technical Computing:
Chapter 15: Libraries for Linear Algebra
C Programming Language, 2nd Edition:
Section 5.7
Lecture: The Matrix, Part 1
Lab Video: The Matrix
Lecture: A Complete Input Validation Library!

Lab 11 (Systems of Linear Equations): distributed from HERE
Introduction to Scientific and Technical Computing:
Chapter 15: Libraries for Linear Algebra
C Programming Language, 2nd Edition:
Section 5.7
Lab Video: Lab 11
Lab Video Transcript: Lab 11
Lecture: Sparse Matrices, Part 1: Introduction and COO Algorithm
Lecture: Sparse Matrices, Part 2: Coding COO
Lecture: Sparse Matrices, Part 3: CSR
Slides from Sparse Matrix Lectures COO + CSR

Lab 12 (Pair Programming): distributed from HERE
Reading for this lab: C Programming Language, 2nd Edition:
Lecture: Sparse Matrices, Part 4: Writing Generic Code & Debugging
Lecture: Generic Code & Git Review
Slides from Generic Code Lecture
Lab Video: Lab 12
Lab Video Transcript: Lab 12
Lab Sample Implementation Video: Lab 12

Lab 13 (Circuit Solver): distributed from
Reading for this lab: C Programming Language, 2nd Edition: Section 6.6 Table Lookup
Lecture: Introduction to Circuit Solvers: Laying out the Algorithm
Lab Video: Lab 13
Lab Video Transcript: Lab 13
Lecture: Parse My CSV into Current and Voltage Equations

Lab 14 (ODE Solver): distributed from HERE
Reading for this lab: C Programming Language, 2nd Edition:
Lecture: Lab 14 Part 1
Lecture: Lab 14 Part 2
Lecture: Lab 14 Part 3
Lecture: Lab 14 Part 4
Lab Video: Lab 14
Lab Video Transcript: Lab 14
Lecture: Lab 14 Algorithm

LaTeX Resources

Course Resources

Feedback is encouraged! You can help with the continuous improvment goals of this course by providing feedback like suggestions for in-class exercises or corrections to typos in the lab manual. Note that feedback needs to folow the ISU guidelines for providing useful and constructive feedback -- sending feedback in the form of insults about the personal characteristics of the TAs or professor will not be tolerated; vague over-generalizations like "did not make sense to most of the class" are not helpful. Instead, send your personal feedback including constructive comments like "I am struggling the most with debugging, particularly with pointers, so could you please add another in-class exercise where we debug programs with memory errors together to learn more effective debugging strategies." Here is another example: rather than sending the (unhelpful) comment "the lab manual isn't detailed enough" send a comment like "The textbook chapter did not have any examples of X and I found it hard to come up with one from the general definition there, so could you please add an example demonstrating the construction of X in Exercise 2 of the lab manual?"

Fun with automating software reliability
  (because writing robust code is hard):

  • Static Code Analysis is a (semi-)formal method for automatically analyzing C programs with verified tools that find bugs and security vulnerabilities. Splint was previously used by students in this class, however there are many Static Source Code Analysis Tools for C.
  • Software Model Checking is a formal method for proving properties about programs. There is a Competition on Software Verification (SV-COMP) that links to downloads and benchmarking data on all of the latest software model checking tools.
  • NASA BugView (ARC-16790-1): Bugview is a Web-based graphical user interface (GUI) service that provides software developers and analysts the ability to configure and execute off-the-shelf static code analysis tools and securely manage imported code releases and analysis results. The service: 1) presents a single interface from which multiple static code analysis tools can be configured and executed; 2) offers a means to automate consistent periodic analysis of each code release; 3) affords the capability to track code changes and identified code issues through progressive build releases: and 4) provides tools for identifying and rejecting false-positive results.
  • Exploiting Defect Prediction for Automatic Software Repair (Fixie): Software is now at the heart of almost everything we do in the world. This software remains largely handmade, and as such, is prone to defects. Testing detects only a sub-set of software defects with the rest laying dormant, sometimes for years. When these defects emerge in software systems the safety and business consequences can be severe. Software failures and their damaging consequences are regularly reported in the press. Finding and fixing defects has been an intransigent problem over many years. The traditional approach to this problem relies on finding defects during testing then developers manually fixing those defects afterwards. In this project we establish a new technique to automatically fix predicted defects in software code before testing.
  • The Cerberus project is developing semantic models for a substantial fragment of C. The Cerberus web interface lets one interactively, randomly, or exhaustively explore the behaviour of small sequential C test programs in the Cerberus semantics. The Cerberus BMC web interface lets one explore the behaviour of small concurrent C test programs with respect to an arbitrary axiomatic concurrency model.

Want to test your coding skills? Try your hand at Code Jam!

Or compete in CODEWARS!!!

Check out NASA's Software Catalog HERE .

Links
Research
Blog
Publications
Home