Previously known as “50.new Secure Software Engineering”
Course Description
In this module, students will learn about data representation, programming and compilation. In the first part, we will learn how binary is used to encode values (data) and instructions (code). We will then learn how to create complex data types and how object oriented programming works behind the scenes. In the second part, we will work on the different aspects of compilation, including lexical and syntaxic analysis, parsing and programming language design. Students will complete four small projects (2 individual and 2 group assignments) about memory management in C, C++, and compilation (lexical and syntaxic analysis and parsing). By gaining this knowledge, students will be able to understand how programming languages are designed.
Pre-requisite
Learning Objectives
- Program in C and C++
- Design a compiler for an imperative programming language
- Understand how data/instructions are stored and represented in the computer’s memory
- Understand the link between imperative and object-oriented languages
- Understand the compilation process
Measurable Outcomes
- Understand how memory is used to store data and instructions on a computer
- Ability to program in C and C++
- Understand the imperative programming paradigm
- Understand the compilation process
- Ability to learn any imperative programming language
Recommended Texts and Readings
- SEI CERT C Coding Standard, Rules for Developing Safe, Reliable, and Secure Systems
- C Programming Language, (Kernighan & Ritchie)
- A Complete Guide to Programming in C++, (Kirch-Prinz & Prinz)
- Introduction to Compilers and Language Design (Thain, chapters 1-8)
Topics Covered
- Binary Operations
- Data Representation
- C programming
- C++ programming
- Memory management
- Compilation
- Pre-processing & lexical analysis
- Top-down and bottom-up parsing
- Semantic analysis
Course Instructor
Prof Simon Perrault, Prof Matthieu De Mari