Secure Software Engineering (TBC)
				 Course title and code to be confirmed.   Course information updated as of March 2022. Course InformationIn 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-requisites  10.014 Computational Thinking for Design   Knowledge of Python 
Learning ObjectivesAt the end of the term, students will be able to: 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  Understand the imperative programming paradigm  Understand the compilation process  Ability to learn any imperative programming language 
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(s) Prof Simon Perrault   Image Credit  			
			