The Pharo MOOC

Welcome to the Pharo Mooc (a set of videos, exercises, challenges, and miniprojects). The Pharo Mooc is fully dubbed in french and english. It comes with subtitles in Japanese, english, french and spanish. This web site contains all the material of this Mooc in free access. In addition, in average every 18 months the Mooc is proposed and run on the France Universitรฉ Numรฉrique platform (Even if the platform is french the mooc is run in both languages). When you participate to the mooc you get access to the quizz and the credit validation.

Join the Fall 2018 Mooc run

Third run will start 8th of October 2018. Join, have fun and learn (check the testimonies below). This year we have some presequel videos about OOP for newbies French version and English version.

February 2018 News

For its second run, the Pharo Mooc got more than 2500 participants with around 500 active learners from 92 countries with 176 participants that finished it. This Mooc is demanding but rewarding - check what the participants are saying :) All the Mooc material is freely available at

We would like want to thanks our sponsors: Unit, Unisciel, and the LearningLab of Inria.


We would like to share some testimonies with you about the Mooc.

About this course

If you are either a beginner or an expert in object-oriented programming, this MOOC will change the way you program with objects: come and learn or rediscover object-oriented programming with Pharo!

Pharo is a pure object-oriented programming language in the tradition of Smalltalk. It offers a unique developing experience in constant interaction with live objects. Pharo is elegant, fun to use and very powerful. It is very easy to learn and enables to understand advanced concept in a natural way. When programming in Pharo, you are immersed in a world of live objects. You have immediate feedback at any moment of your development on objects representing web applications, code itself, graphics, network. Moreโ€ฆ

Pharo is also a very powerful open-source environment used by companies to develop web applications.

In this MOOC, we will present more specifically Pharoโ€™s Web stack which changes the way you build web applications.

In addition we will present fundamental programming concepts and how Pharo uses them. We will present some coding idioms and Design Patterns to better design object-oriented applications. Such concepts can be applied to any object-oriented programming language.

This MOOC is intended for people with a programming experience but everyone motivated could follow the course thanks to the numerous resources proposed. This MOOC will also have an interest for computer programming teachers: Pharo is a good teaching tool for object-oriented programming and the course will discuss object-oriented design principles (e.g. polymorphism, message sending, self/super, design patterns).

Throughout this MOOC you will :

  • learn how to program in Pharo,
  • be immersed in a live environment and live a new programming experience,
  • develop a web application to apply the different aspects of Pharo presented in the course.

This MOOC will also provide a new vision of the fundamental principles of object-oriented programming, i.e. polymorphism and late binding.

This course lasts 7 weeks.

Each week is composed of several sequences containing a video lecture, quizzes and other videos proposing application exercises and programming demonstrations.

This course is proposed in french and in english. Videos are in french with french and english subtitles. Pdf course documents (in english only) will be available. All other materials (quizzes, explanation textsโ€ฆ) will be offered in both languages.

Obtaining the MOOC

We strongly suggest to follow the MOOC during the next session on France Universitรฉ Numรฉrique that will start October 16th, 2017 because you will have support from the teaching team.

Join the discord channel mooc on the Pharo community (Invitation at

But, you can also access all resources of this MOOC offline on:

How to follow this MOOC?

We propose five profiles to follow this MOOC at different speed and levels. The Mooc sequences will be tagged according to these profiles. The profiles are not exclusive: to become a pharo expert you need to start as a newbie and grow up. Of course, you can also follow the full MOOC.

Download & Install Pharo for this MOOC

During this MOOC, we assume that you use exacty this MOOC specific version of Pharo.

Automatic Installation Using PharoLauncher (simplest method)

  1. Download and install the Pharo Launcher for your OS
  2. Execute Pharo Launcher and select create image menu entry in the contextual menu of Pharo Mooc
    Pharo Launcher
  3. Select your newly downloaded Pharo Mooc image in the right pane and click on the green play button on the uppper right button bar
    Pharo Launcher

Manual Installation

During this MOOC, we assume that you use exacty this MOOC specific version of Pharo. To install it, please follow these steps:

  1. Download the Pharo Virtual Machine (VM) for your Operating System: Mac OsX Windows GNU/Linux

    The Pharo VM is 32bits. It works on 64bits OS if you correctly install dependencies libraries in 32bits (cf. Linux 64).

  2. Download the MOOC specific PharoWeb Image: PharoWeb Image
  3. Download the Pharo source file (if needed): Pharo Source
  4. Run the Pharo image using Pharo VM

    • On OsX: drag and drop the image (PharoWeb.image file) on the virtual machine ( which may be stored in your /Applications folder to be correctly executed depending on your OsX version.
    • On Windows: drag and drop the image (PharoWeb.image file) on the virtual machine (Pharo.exe).
    • On Linux and other Unixes: pass the image as parameter to the virtual machine (./pharo PharoWeb.image).

Week 1: Welcome on Board and Syntax Discovery

Download the slides, videos, english videos and exercises.

  1. ๐Ÿฅ Lecture Objectives of this MOOC
  2. ๐Ÿฅ Lecture Pharo: an Immersive Object-Oriented System
  3. ๐Ÿฅ Lecture Pharo Vision
  4. ๐Ÿฅ Lecture Pharo Object Model in a Nutshell
  5. ๐Ÿฅ Lecture Pharo Syntax in a Nutshell
  6. ๐Ÿฅ Lecture Class and Method Definitions
  7. ๐Ÿฅ Live Selecting and executing expressions
  8. ๐Ÿฅ Live Learn Pharo with Prof Stef
  9. ๐Ÿฅ Live Syntax Highlighting gives Feedback
  10. ๐Ÿฅ Live Learn Keyboard Shortcuts
  11. ๐Ÿฅ Redo Coding a Counter
  12. ๐Ÿฅ Exercise Expressions and Messages
  13. ๐Ÿฅ Exercise TinyBlog: Presentation and Model
  14. ๐ŸŒถ Challenge Challenge 0

Week 2: Pharo Syntax, Blocks and Inspector

Download the slides, videos, english videos and exercises.

  1. ๐Ÿฅ Lecture Understanding Messages
  2. ๐Ÿฅ Lecture Messages for Java programmer
  3. ๐Ÿฅ Lecture Messages: Composition and Precedence
  4. ๐Ÿฅ Lecture Understanding Messages: Sequence and Cascade
  5. ๐Ÿฅ Live Finding Methods with Finder
  6. ๐Ÿฅ Live GTInspector 1: Inspect and Interact with Objects
  7. ๐Ÿฅ Lecture Introduction to Blocks
  8. ๐Ÿฅ Lecture Loops
  9. ๐Ÿฅ Lecture Booleans and Conditions
  10. ๐Ÿฅ Lecture Parenthesis vs Square Brackets
  11. ๐Ÿฅ Lecture Yourself
  12. ๐ŸŽ Lecture The Essence of Dispatch through an Exercise
  13. ๐Ÿฅ Live Nautilus 1: First Meet with the Code Browser
  14. ๐Ÿฅ Live Nautilus 2: Packages, Tags and Groups
  15. ๐Ÿฅ Live Nautilus 3: Inheritance view
  16. ๐Ÿฅ Redo Coding a Counter in the Debugger
  17. ๐Ÿฅ Exercise Solution: Expressions and Messages
  18. ๐Ÿฅ Exercise Expression Results
  19. ๐Ÿฅ Exercise TinyBlog: Extending and Testing the Model
  20. ๐ŸŒถ Challenge Solution: Challenge 0
  21. ๐ŸŒถ Challenge Challenge 1

Week 3: Design, Class Methods and Collections

Download the slides, videos , english videos and exercises.

  1. ๐Ÿฅ Lecture Essence of Dispatch: Taking Pharo Booleans as Example
  2. ๐Ÿฅ Lecture Essence of Dispatch
  3. ๐Ÿฅ Lecture Variables
  4. ๐Ÿฅ๐ŸŒ Lecture A Simple HTTP Application: a Pretext to Revisit Pharo Syntax
  5. ๐Ÿฅ Live Nautilus 4: How to Become a Super Pharo Developer: Understanding Sender and Implementors
  6. ๐Ÿฅ Live Nautilus 5: Navigating Fast Inside Classes
  7. ๐Ÿฅ Lecture Class Methods
  8. ๐Ÿฅ Lecture An Overview of Essential Collections
  9. ๐Ÿฅ Live Spotter 1: Find and Browse a Class
  10. ๐Ÿฅ Live Spotter 2: Filter Results by Category
  11. ๐ŸŽ Lecture Iterators
  12. ๐Ÿฅ Lecture Stream Overview
  13. ๐Ÿฅ Lecture Understanding Return
  14. ๐Ÿฅ Redo Coding a Little Domain Specific Language
  15. ๐Ÿฅ Exercise Solution: Expression Results
  16. ๐Ÿฅ Exercise Rewriting Expressions
  17. ๐Ÿฅ Exercise TinyBlog: A Simple Teapot Web Interface
  18. ๐ŸŒถ Challenge Solution: Challenge 1
  19. ๐ŸŒถ Challenge Challenge 2

Week 4: Inheritance & Lookup and Web Development

Download the slides, videos, english videos and exercises.

  1. ๐Ÿฅ Lecture Inheritance Basics
  2. ๐Ÿฅ Lecture Inheritance & Lookup: Lookup
  3. ๐Ÿฅ Lecture Inheritance & Lookup: Super
  4. ๐Ÿฅ Lecture Inheritance & Lookup: DoesNotUnderstand:
  5. ๐ŸŒถ Lecture Inheritance & Lookup: Lookup in Metaclasses
  6. ๐ŸŽ Lecture Class Methods at Work
  7. ๐ŸŒ Lecture Overview of Pharo Web Stack
  8. ๐ŸŒ Lecture Seaside: an Innovative Web Application Framework
  9. ๐ŸŒ Lecture Seaside: Rendering Components
  10. ๐ŸŒ Lecture Seaside: a Glance at MetaData and REST
  11. ๐ŸŒ Lecture Voyage: NoSql Object Database
  12. ๐Ÿฅ Live How to load code from repository
  13. ๐Ÿฅ Live How to load projects
  14. ๐ŸŽ Live Nautilus 6: An overview of Refactorings
  15. ๐ŸŽ Live Nautilus 7: Using the Quality Assistant and Code Critic
  16. ๐Ÿฅ Exercise Solution: Rewriting Expressions
  17. ๐ŸŒ Exercise TinyBlog: Data Persitency using Voyage and Mongo
  18. ๐ŸŒ Exercise TinyBlog: Building a Web Interface with Seaside
  19. ๐ŸŒ Exercise Building a Simple Contact Book Application
  20. ๐ŸŒถ Challenge Solution: Challenge 2
  21. ๐ŸŒถ Challenge Challenge 3

Week 5: Exception, Debugging and Reflection

Download the slides, videos, english videos and exercises.

  1. ๐ŸŒ Lecture Seaside: Composing Components
  2. ๐ŸŽ Lecture Really Understanding Class Methods
  3. ๐Ÿฅ Lecture Common Errors
  4. ๐ŸŒถ Lecture Powerful Exceptions: an Overview
  5. ๐Ÿฅ Lecture Debugging in Pharo
  6. ๐Ÿฅ Lecture SUnit: Unit Tests in Pharo
  7. ๐ŸŒถ Lecture Files in Pharo
  8. ๐Ÿ”ฎ Lecture Reflection: Basic Introspection
  9. ๐ŸŒถ Lecture Benchmarking in Pharo
  10. ๐Ÿฅ Live Spotter 3: Scoping and Reducing Search
  11. ๐Ÿฅ Live Spotter 6: Search, Navigate and Preview Files
  12. ๐Ÿฅ Live Learning the Debugger
  13. ๐Ÿฅ Live How to find a bug?
  14. ๐Ÿฅ Live GTInspector 2: Inspect Files and Directories
  15. ๐ŸŒ Exercise TinyBlog: Building an Admin Seaside Web Interface with Magritte
  16. ๐Ÿฅ Exercise TinyChat
  17. ๐ŸŒถ Challenge Solution: Challenge 3
  18. ๐ŸŒถ Challenge Challenge 4

Week 6: Rethink Lookup and Advanced Object-Oriented Design

Download the slides, videos , english videos and exercises.

  1. ๐ŸŽ Lecture Did You Really Understand Super?
  2. ๐Ÿฅ Lecture Understanding the Implementation of ifTrue:ifFalse:
  3. ๐ŸŽ Lecture Dice new vs. self class new
  4. ๐ŸŽ Lecture Message sends are plans for reuse
  5. ๐ŸŽ Lecture Hooks and Templates
  6. ๐Ÿฅ Lecture Runtime Architecture
  7. ๐Ÿฅ Lecture Characters, Strings and Symbols
  8. ๐Ÿฅ Lecture Dynamic Vs. Literal Arrays
  9. ๐Ÿฅ Live Understanding Images and Changes Files
  10. ๐Ÿฅ Live Using the Pharo Launcher to manage your Pharo images
  11. ๐ŸŒถ Live Diffing and Merging in Pharo
  12. ๐Ÿฅ Live GTInspector 4: Build Custom Tab Views for your Objects
  13. ๐ŸŒ Exercise TinyBlog: Deployment
  14. ๐ŸŒถ Challenge Solution: Challenge 4
  15. ๐ŸŒถ Challenge Challenge 5

Week 7: More on Object-Oriented Design and Testing

Download the slides, videos , english videos and exercises.

  1. ๐ŸŒถ Lecture Advanced Points on Classes
  2. ๐Ÿฅ Lecture Variable Size Objects
  3. ๐Ÿ”ฎ Lecture Understanding Metaclasses
  4. ๐Ÿ”ฎ Lecture Reflective Operations for Live Programming
  5. ๐Ÿ”ฎ Lecture DoesNotUnderstand: a Precious Hook
  6. ๐Ÿ”ฎ Lecture Reflection: Stack as an Object
  7. ๐ŸŽ Lecture Avoid Null Checks
  8. ๐Ÿฅ Lecture A Journey in Pharo: A Bright Future
  9. ๐ŸŒถ Live Spotter 4: The Preview pane
  10. ๐ŸŒถ Live Spotter 5: Search in Playground History
  11. ๐ŸŒถ Live GTInspector 3: Understand Pharo Internals by Inspection
  12. ๐ŸŒถ Challenge Solution: Challenge 5


You can find free and online resources in the Documentation page. We recommend the Updated Pharo by Example book, the Pharo cheat-sheet, and the new book Learning Object-Oriented Programming, Design and TDD with Pharo on


Damien Cassou

Damien Cassou

Damien Cassou received his PhD degree in Computer Science from the University of Bordeaux, France. He is working as associate professor (maรฎtre de confรฉrences) at the University of Lille, France, and is a member of the RMoD research group (Inria, CRIStAL). Damien is working on dynamic programming languages (most notably around traits and modules) and software engineering (mainly tools for developers). Damien has co-organized many events (including ECOOPโ€™14 and ESUG many times) and co-wrote several books. Because he loves programming, Damien is also an active member of the Smalltalk and Emacs-Lisp communities. Finally, he maintains many packages for NixOS.

Stรฉphane Ducasse

Stรฉphane Ducasse

Stรฉphane Ducasse is directeur de recherche at Inria. He leads the RMoD team. He is expert in two domains: object-oriented language design and reengineering. His works on traits have been introduced in AmbientTalk, Slate, Pharo, Perl-6, PHP 5.4 and Squeak. They have also influenced JavaScript, Scala and Fortress. Stรฉphane is also expert on software quality, program understanding, program visualisations, reengineering and metamodeling. He is one of the developers of Pharo. He is also one of the developers of Moose, an open-source software analysis platform. He created Synectique a company building dedicated tools for advanced software analysis. Stรฉphane wrote several books on programming learning and other topics such as web programming.

Luc Fabresse

Luc Fabresse

Luc Fabresse received his PhD in computer science in 2007 from the University of Montpellier 2, France. He is currently an associate professor in the CAR research theme at Mines Douai, Mines-Telecom Institute. Luc is the co-author of several research papers advocating the use of dynamic and reflective languages such as Pharo to support live programming of mobile and autonomous robots in an efficient way. Luc's long-term vision is to be able to use Jedi mind trick on mobile robots ;-) Meanwhile, he concretizes all his ideas (models and tools) in the PhaROS platform (a Pharo client for the Robotics Operating System) to develop, debug, test, deploy, execute and benchmark robotics applications. Each year, Luc gives many computer science lectures and co-organizes events (technical days, conferences, ...). He also promotes Smalltalk (ESUG board member) and participates to its open-source implementation Pharo.

The Partners