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.

Presequel: Basics on OOP

This MOOC includes some presequel videos and slides about Object-oriented Programming (OOP) for newbies French version and English version.

Join the 2019 Mooc run

Fourth run started 6th of May 2019. Join, have fun and learn (check the testimonies below).

News

We are working on a new version of the videos and exercises for Pharo 80 (planned for Spring 2020). The Pharo MOOC image now uses Pharo 8.0 (cf. download).

April 2019

For its third run, the Pharo Mooc got more than 3200 participants with around 500 active learners from more than 100 countries with 181 participants that obtained the attestation by answering quiz.

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

February 2018

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.

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

Testimonies

This Mooc is demanding but rewarding - check below what the participants are saying :) Thank you for these messages, they boost us!
I have just completed week seven of the Pharo Mooc (beginner and object oriented tracks) I am starting a redo of the Mooc with the web track (TinyBlog project). I have already learned so much ! I have spent the last 20 years or so in software development and, following this Mooc, I realized I hadn’t really grasped the essence of object oriented design. - Anonymous
« Really one of the best mooc I have ever attended. And I have attended quite a few (openSAP, openHPI). As an old fashioned ABAP developer I want to be reborn as Pharo developer in my next life :-) » - Anonymous
Hi! I finished the MOOC some weeks ago and I would like to congratulate everybody involved! After a decade+ of Python programming I think I found my new favorite language :). I'm making a small Teapot server for Slack command bots, I'm goona push it to Github (yay Iceberg), if anyone is interested. - EduardoPadoan
I just completed the @pharoproject Mooc the best investment I have ever made of my time. MAQBOOL
Hey all - I've just finished the Mooc - thanks for an excellent course and a thouroughly interesting look at a new way to program :smile: Looking forward to starting to play with Pharo on some upcoming ideas I've had. - Tieryn
As much as I thought I understand object-orientation, it is very clear NOW that without a truly useable Smalltalk, which Pharo is, it is impossible to really understand and exercise object-orientation. Thank you all soooo much. - Mike D. 06/12/2020
I finished the Pharo MOOC a few days ago. Thank you very much to Damien, Stephane, and Luc for their work on the material! I enjoyed it very much - Anonymous
Hey all - I've just finished the Mooc - thanks for an excellent course and a thouroughly interesting look at a new way to program :smile: Looking forward to starting to play with Pharo on some upcoming ideas I've had 👌3 - Anonymous
I already had previous Smalltalk experience, but yes, I'm extremely happy Chapter 7 has been extremely fulfilling - Anonymous
A general comment I wanted to make is that the MOOC so far has been great. Impressed with the quality and content, and grateful that it is available and free. Many thanks! - Aryeh
IMHO the videos were very well done. I would even say shockingly well done… for a bunch of programmers who are supposed to be clueless about design - SeanDeNigris - 10/26/2017
The more I learning about @pharoproject the more I appreciate it's beauty and simplicity, finally, object-oriented programming is done right - MAQBOOL
Mooc absolument remarquable. Superbe voyage autour de Pharo. Le paradigme objet qui (re)prend enfin du sens ! - Anonymous - 01/03/2019

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

You can follow the MOOC during the next session on France Université Numérique because you will be able to discuss with other learners.

Join the discord channel mooc on the Pharo community (Invitation at http://discord.gg/QewZMZa)

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 the PharoWeb image in a specific version (currently Pharo 8.0). To install this version, we recommand using the PharoLauncher as described below.

  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

Week 1: Welcome on Board and Syntax Discovery

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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 Live A: Selecting Expressions
  8. 🐥Live Live B: Prof Stef
  9. 🐥Live Live C: Syntax Highlighting gives Feedback
  10. 🐥Live Live D: Learn Keyboard Shortcuts
  11. 🐥Redo Redo 1: Packages, classes and methods
  12. 🐥Redo Redo 2: Adding some unit tests
  13. 🐥Redo Redo 3: Looking back at method creation
  14. 🐥Redo Redo 4: Save your code with Iceberg
  15. 🐥Redo Redo 5: Object initialization
  16. 🐥Redo Redo 6: Better printing with printOn:
  17. 🐥Redo Redo 7: Looking a commit history and changes with Iceberg
  18. 🐥Exercise Expressions and Messages
  19. 🐥Exercise TinyBlog: Presentation and Model
  20. 🌶Challenge Challenge 0

Week 2: Pharo Syntax, Blocks and Inspector

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  1. 🐥Lecture Understanding Messages
  2. 🐥Lecture Messages for Java programmer
  3. 🐥Lecture Messages: Composition and Precedence
  4. 🐥Lecture Understanding Messages: Sequence and Cascade
  5. 🐥Lecture Introduction to Blocks
  6. 🐥Lecture Loops
  7. 🐥Lecture Booleans and Conditions
  8. 🐥Lecture Parenthesis vs Square Brackets
  9. 🐥Lecture Yourself
  10. 🎁Lecture The Essence of Dispatch through an Exercise
  11. 🐥Live Live A: Finding methods with the Finder
  12. 🐥Live Live B: Look closer at objects with the Inspector
  13. 🐥Live Live C: Browsing a class
  14. 🐥Live Live D: Working with scoped operations
  15. 🐥Redo Redo 1:Xtreme TDD
  16. 🐥Exercise Solution: Expressions and Messages
  17. 🐥Exercise Expression Results
  18. 🐥Exercise TinyBlog: Extending and Testing the Model
  19. 🌶 Challenge Solution: Challenge 0
  20. 🌶 Challenge Challenge 1

Week 3: Design, Class Methods and Collections

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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. 🐥 Lecture Class Methods
  6. 🐥 Lecture An Overview of Essential Collections
  7. 🎁 Lecture Iterators
  8. 🐥 Lecture Stream Overview
  9. 🐥 Lecture Understanding Return
  10. 🐥 Live Live A: Understanding Implementor/Senders
  11. 🐥 Live Live B: Understanding class references
  12. 🐥 Live Live C: Find information using Spotter
  13. 🐥 Redo Redo 1: Implementing Die mechanics
  14. 🐥 Redo Redo 2: Implementing a Die handle
  15. 🐥 Redo Redo 3: Finalizing the DSL
  16. 🐥 Exercise Solution: Expression Results
  17. 🐥 Exercise Rewriting Expressions
  18. 🐥 Exercise TinyBlog: A Simple Teapot Web Interface
  19. 🌶 Challenge Solution: Challenge 1
  20. 🌶 Challenge Challenge 2

Week 4: Inheritance & Lookup and Web Development

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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 Live A: Git: New project creation
  13. 🐥 Live Live B: Git: Creating a remote repository to an existing project
  14. 🐥 Live Live C: Loading a project with Metacello
  15. 🎁 Live Live D: Applying Refactorings
  16. 🎁 Live Live E: Quality checker in action
  17. 🐥 Exercise Solution: Rewriting Expressions
  18. 🌐 Exercise TinyBlog: Data Persitency using Voyage and Mongo
  19. 🌐 Exercise TinyBlog: Building a Web Interface with Seaside
  20. 🌐 Exercise Building a Simple Contact Book Application
  21. 🌶 Challenge Solution: Challenge 2
  22. 🌶 Challenge Challenge 3

Week 5: Exception, Debugging and Reflection

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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 Live A: Advanced Spotter actions
  11. 🐥 Live Live B: First look at the Debugger actions
  12. 🐥 Live Live C: Find a bug with the debugger
  13. 🌐 Exercise TinyBlog: Building an Admin Seaside Web Interface with Magritte
  14. 🐥 Exercise TinyChat
  15. 🌶 Challenge Solution: Challenge 3
  16. 🌶 Challenge Challenge 4

Week 6: Rethink Lookup and Advanced Object-Oriented Design

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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 Live A: Customized tabs in the Inspector
  10. 🌶 Live Live B: Personalize your image startup
  11. 🌐 Exercise TinyBlog: Deployment
  12. 🌶 Challenge Solution: Challenge 4
  13. 🌶 Challenge Challenge 5

Week 7: More on Object-Oriented Design and Testing

Download the slides and exercises, EN videos, FR videos, Subtitles(french, english, spanish and japanese). Watch EN videos or FR videos.

  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. 🌶 Challenge Solution: Challenge 5

Resources

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 http://books.pharo.org

About

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