David Teller: Teaching
C2i
Management
I am in charge of the implementation of the Certificat de Compétences Informatiques for the Faculty of Sciences of Bourges. Due to technical issues in University of Orléans, implementation has been postponed by one year.
Compilation
Lectures + Labs
I am currently in charge of lectures and lab courses of Compilation for students in first year of Master of Computer Science Engineering, using the C language. As an exercices we are building a compiler for the GNU Make language.
- Introduction
- What is compilation ?
- Compilers vs. interpreters vs. virtual machines vs. code rewriters vs. preprocessors
- The compilation process.
- Makefile
- Role
- Syntax
- Rules
- Patterns
- Variables
- Lexers
-
- Role
- Relation with regular languages
- FLex
- Writing a Flex lexer for Makefiles
- Parsers
-
- Role
- Relation with regular languages
- Bison
- Writing a Bison parser for Makefiles
- Abstract Syntax Trees
-
- Role
- Defining ASTs
- Designing ASTs for Makefiles
- Analysis
-
- Static analysis
- Dynamic analysis
- Optimizations
- Finding root targets
- Producing code
-
- Intermediate languages, bytecodes and machine code
- Spitting out the code !
Mathematics for Computer Science
Lectures + Labs
I am currently in charge of lectures and lab courses of Mathematics for Computer Science, for students in second year of Licence of Mathematics and Computer Science.
- Booleans
- The minimal boolean algebra
- Common operators
- Proving things with truth tables
- Binary numeration
- Boolean algebras
- Counting with boolean operators
- Powersets as boolean algebras
- Logic
-
- Terms, propositions and formulas
- Valuations
- Formal proofs
- Proofs on proofs
- Application to mathematical proofs
- Proofs vs. type systems
- Induction and structural induction
-
- Defining a set by structural induction
- Proving things by structural induction
- Defining a function by structural induction
- Peano's arithmetics
- Algorithmic complexity
-
- The notion of algorithmic complexity
- Big O, small o, theta
- Proving complexity by induction
- Complexity of common algorithms
Functional programming
Lectures + Labs
I am currently in charge of lectures and lab courses of Functional Programming, using Objective Caml, for students in second year of Licence of Mathematics and Computer Science. Lecture notes are available in French as a wikibook. The students have a personal project to design and implement during the term. In addition, as a support for lectures, during the term, we design a Game of Life using OpenGL.
- Introduction
- About OCaml (lecture 1)
- Why OCaml ? (lecture 1)
- Bases of OCaml
- OCaml as a calculator (lecture 1)
- Values (lecture 1)
- Functions (lecture 2)
- Currification (lecture 2)
- Recursion
- Abstract functions
- When mathematicians are in charge
- Data structures
- The role of data structures
- The type system
- Simple types
- Type definitions
- Type constraints
- Cartesian products (tuples and structures)
- Labelled union (sum types)
- Pattern-matching
- Modules
- Modules and compilation
- Private types
- Higher-order modules
- Types and sets
- Computing with state
-
- Monads
- Error-handling (exceptions vs. error monads)
- State (references vs. state monads)
- Side-effects (i/o vs. io monad)
- Graphics
-
- Introduction to OpenGL
- Dots
- Shapes
- Curves
- The third-dimension
- Parsing (if time permits)
Databases
Lectures / Labs
During the first term of year 2007-2008, I have been in charge of combined lecture-lab classes of database management systems, for students in Master 2 Pro of Science and Technology with no prior knowledge of programming or computer science. Each student had to design, implement and document a database for inventory management during the term. In addition, we designed during the classes a database for, er, management of wanted bandits in the world of Lucky Luke.
- Information.
-
- The notion of information
- Real-world information inside a computer
- From syntax to semantics
- Finding information from other information
- Finding information from physical objects
- Dangers of information
- Dangers for information
- DataBase Management Systems
-
- History
- Various models of information storage
- The ideal of application-independence
- The role of hardware, software and intelligence
- Existing solutions
- Everyday DBMSes
- Relations
-
- The relational model
- Data types, data representations and value sets
- Attributes
- Labels
- Primary keys
- Foreign keys
- Role and management of constraints
- Normal Forms
- Representing sets of values within the Relational model
- The Data Definition Language
- MySQL
-
- About MySQL
- Limitations of MySQL
- Distribution
- Utilities
- Remote usage of MySQL
- The command-line
- Information again
-
- Syntax of information
- Adding, removing and altering information
- The Data Manipulation Language
- Viewing information
- Locating information
- Combining information (aka the relational algebra)
- Information that won't fit
- What about loops ?
- Users, consumers and intruders
-
- Sometimes, people just don't like you
- Social engineering
- The last barrier: the log
- The first barrier: the OS
- Somewhere in-between: the user interface
- The main barrier: least privilege discipline
- The Data Control Language
- Miscellanea
-
- Backups and exports
- Introduction to transactions
- Designing efficient user interfaces
- Microsoft Access, OOBase and the others
- Using SQL from a programming language
Web pages
Lectures / Labs
During the first term of year 2007-2008, I have been in charge of combined lecture-lab classes of web pages, for students starting their Licence of Science. Each pair of students was to design and compose a web page during the term.
- The Internet.
-
- History
- Protocols
- Open standards
- Internet vs. The web
- Content.
-
- Structure of a web page
- Resources
- URIs
- XHtml
- Webography for the web developer
- Images
- Standards, non-standards, versions and incompatibilities
- Encodings, entities
- Validation
- Evolution of XHtml
- Quoting sources
- Style.
-
- Cascading Style Sheets
- Properties and values
- Selectors, elements and pseudo-elements
- Inline styles
- Webography for the web developer
- Validation
- Action.
-
- Introduction to JavaScript
- Variables
- Functions
- Events
- Recursion
- Arrays
- Elements of the Document Object Model
- Spotting and fixing errors
Object-Oriented Programming
Lectures + Labs
During the first term of year 2007-2008, I have been in charge of lectures of Object-Oriented Programming using Java, for students in their second year of Licence of Mathematics and Computer Science. During the term, as support for the lectures, we designed a version of Tetris.
At the end of the term, the class had one full day to cooperatively implement that Tetris. They succeeded.
- Java
-
- Why Java ?
- Java vs. other languages
- A quick recap of classes
- A quick recap of fields, methods, arguments, variables and
this - A quick recap of variables and functions
- A quick recap of constructors
- A quick recap of usual statements
- A quick recap of types
- Design by interfaces
-
- Interfaces
- Specifying interfaces
- Implementing interfaces
- Thinking with interfaces
- Documenting interfaces
- Packages
-
- The notion of package
- Forming packages
- Importing packages
- Public vs. package-protected
- Dividing a project into packages
- Packages + interfaces = modularity
- User Interfaces
-
- Toolkits
- Swing and AWT
- Frames
- Components
- Layouts
- Colors
- Resources
- Type safety
-
- Why type safety ?
- Privacy
- Typesafe enumerations
- Typesafe unions
- A first look at collections
- Exceptions
-
- Exceptional circumstances
- Fatal errors vs. stronger
returns - Throwing and catching
- When to catch and when not to
- Common exceptions
- Creating new exceptions
- Cleaning-up resources
- Input/Output
-
- Working with files
- Input streams, output streams
- Iterating upon streams
- Combining streams
- Stream buffers
- Readers and printers
- Class hierarchies
-
- Reusing and specializing
- Inheriting
- Construction
- Polymorphism
- Hierarchies
- Run-time class information
- Swing, Exceptions, I/O hierarchies
- Miscellanea
-
- High-level loops
- Hash tables
- Working with trees

