Live Object Programming in Pharo

Learn or rediscover object-oriented programming in a pure, live, immersive environment. Videos, slides, exercises, challenges and mini-projects, freely available.

  • 7 weeks
  • Dubbed in English & French
  • Subtitles EN · FR · ES · JA
  • Quizzes & certificate
  • Valid for Pharo 14

Follow the MOOC on France Université Numérique

Enrollment is permanent: register and start at any time, at your own pace. Even if the platform is French, the course is fully available in English and French.

  • Excellent quizzes let you check that your understanding of each lecture is correct.
  • Obtain a certificate by answering the quizzes.
  • Since 2016, thousands of learners from more than 100 countries have followed this MOOC.

Discuss with other learners on the mooc channel of the Pharo Discord. The videos are also on CanalU.

Enroll on FUN

About this course

Whether you are a beginner or an expert in object-oriented programming, this MOOC will change the way you program with objects. Pharo is a pure object-oriented language in the tradition of Smalltalk: elegant, fun to use and very powerful. You are immersed in a world of live objects, with immediate feedback at every moment of your development.

New to objects? Start with the presequel on the basics of OOP, in English or French.

More about the course

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.

What learners say

This MOOC is demanding but rewarding. Thank you for these messages, they boost us!

The week 3 Pharo MOOC videos are excellent, thanks for the recommendation. The idea that sending a message is making a choice is interesting and I'm now starting from week 1 and I hope to keep learning.
J'ai trouvé ça très intéressant, beaucoup plus que prévu ! je regrette de ne pas m'y être mis plus tôt. J'ai enfin l'impression de vraiment faire de la POO ! Ou à l'inverse je me rend que je n'en faisais pas vraiment...— Anonymous, 2019
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
More testimonies
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
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

Choose your path

Five profiles to follow the MOOC at different speeds and levels. Lectures are tagged with these icons. The profiles are not exclusive: to become an expert, start as a newbie and grow.

🐥

Total newbies

Focus on the beginning of the lectures; you can skip Seaside/Mongo and TinyBlog. Take it easy, and spend time on the navigation tools (senders and implementors).

🌐

Looking for Web

Start with the syntax, then the Seaside/Mongo combo. For exercises, focus on TinyChat and TinyBlog.

🎁

Refresh your OO perspective

Even Booleans and collections are plain objects: you send a message to a collection to loop, and to a Boolean to branch.

🌶

Wanna be a Pharo expert

Have a look at everything. Drop the Web and Black Magic parts if you are in a hurry.

🔮

Looking for Black Magic

Reflection, metaclasses, meta-programming: what makes Pharo a unique OO language. Requires almost everything except the Web part.

Install Pharo

The MOOC was recorded with Pharo 8, but its content is still fully valid in Pharo 14: the language, the object model and the design lessons have not changed. The user interface in the videos is older, so some menus and tools look slightly different.

  1. Download and install the Pharo Launcher for your OS.
  2. Run Pharo Launcher and select create image in the contextual menu of Pharo Mooc. Creating the Pharo MOOC image in Pharo Launcher
  3. Select your new Pharo Mooc image in the right pane and click the green play button in the upper-right toolbar. Launching the Pharo MOOC image in Pharo Launcher

Lectures, week by week

Every lecture comes with its slides and its video in English and French. Prefer streaming? Watch the playlists on YouTube:

LectureLiveRedoExerciseChallenge 🐥 Newbies · 🌐 Web · 🎁 OO · 🌶 Expert · 🔮 Magic

Week 1Welcome on Board and Syntax Discovery

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🐥Objectives of this MOOCSlides EN FR
  • Lecture🐥Pharo: an Immersive Object-Oriented SystemSlides EN FR
  • Lecture🐥Pharo VisionSlides EN FR
  • Lecture🐥Pharo Object Model in a NutshellSlides EN FR
  • Lecture🐥Pharo Syntax in a NutshellSlides Erratum EN FR
  • Lecture🐥Class and Method DefinitionsSlides EN FR
  • Live🐥Live A: Selecting ExpressionsEN FR
  • Live🐥Live B: Prof StefEN FR
  • Live🐥Live C: Syntax Highlighting gives FeedbackEN FR
  • Live🐥Live D: Learn Keyboard ShortcutsEN FR
  • Redo🐥Redo 1: Packages, classes and methodsEN FR
  • Redo🐥Redo 2: Adding some unit testsEN FR
  • Redo🐥Redo 3: Looking back at method creationEN FR
  • Redo🐥Redo 4: Save your code with IcebergEN FR
  • Redo🐥Redo 5: Object initializationEN FR
  • Redo🐥Redo 6: Better printing with printOn:EN FR
  • Redo🐥Redo 7: Looking a commit history and changes with IcebergEN FR
  • Exercise🐥Expressions and MessagesEN FR
  • Exercise🐥TinyBlog: Presentation and ModelEN FR
  • Exercise🐥Developing a Simple Counter (companion of Redo 1–7)EN
  • Challenge🌶Challenge 0EN FR

Week 2Pharo Syntax, Blocks and Inspector

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🐥Understanding MessagesSlides EN FR
  • Lecture🐥Messages for Java programmerSlides EN FR
  • Lecture🐥Messages: Composition and PrecedenceSlides Erratum EN FR
  • Lecture🐥Understanding Messages: Sequence and CascadeSlides EN FR
  • Lecture🐥Introduction to BlocksSlides EN FR
  • Lecture🐥LoopsSlides EN FR
  • Lecture🐥Booleans and ConditionsSlides EN FR
  • Lecture🐥Parenthesis vs Square BracketsSlides EN FR
  • Lecture🐥YourselfSlides Erratum EN FR
  • Lecture🎁The Essence of Dispatch through an ExerciseSlides EN FR
  • Live🐥Live A: Finding methods with the FinderEN FR
  • Live🐥Live B: Look closer at objects with the InspectorEN FR
  • Live🐥Live C: Browsing a classEN FR
  • Live🐥Live D: Working with scoped operationsEN FR
  • Redo🐥Redo 1:Xtreme TDDEN FR
  • Exercise🐥Solution: Expressions and MessagesEN FR
  • Exercise🐥Expression ResultsEN FR
  • Exercise🐥TinyBlog: Extending and Testing the ModelEN FR
  • Challenge🌶Solution: Challenge 0EN FR
  • Challenge🌶Challenge 1EN FR

Week 3Design, Class Methods and Collections

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🐥Essence of Dispatch: Taking Pharo Booleans as ExampleSlides EN FR
  • Lecture🐥Essence of DispatchSlides EN FR
  • Lecture🐥VariablesSlides EN FR
  • Lecture🐥🌐A Simple HTTP Application: a Pretext to Revisit Pharo SyntaxSlides EN FR
  • Lecture🐥Class MethodsSlides EN FR
  • Lecture🐥An Overview of Essential CollectionsSlides Erratum EN FR
  • Lecture🎁IteratorsSlides Erratum EN FR
  • Lecture🐥Stream OverviewSlides Erratum EN FR
  • Lecture🐥Understanding ReturnSlides EN FR
  • Live🐥Live A: Understanding Implementor/SendersEN FR
  • Live🐥Live B: Understanding class referencesEN FR
  • Live🐥Live C: Find information using SpotterEN FR
  • Redo🐥Redo 1: Implementing Die mechanicsEN FR
  • Redo🐥Redo 2: Implementing a Die handleEN FR
  • Redo🐥Redo 3: Finalizing the DSLEN FR
  • Exercise🐥Solution: Expression ResultsEN FR
  • Exercise🐥Rewriting ExpressionsEN FR
  • Exercise🐥Crafting a Simple Embedded DSL for Dice (companion of Redo 1–3)EN
  • Challenge🌶Solution: Challenge 1EN FR
  • Challenge🌶Challenge 2EN FR

Week 4Inheritance & Lookup and Web Development

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🐥Inheritance BasicsSlides EN FR
  • Lecture🐥Inheritance & Lookup: LookupSlides EN FR
  • Lecture🐥Inheritance & Lookup: SuperSlides EN FR
  • Lecture🐥Inheritance & Lookup: DoesNotUnderstand:Slides EN FR
  • Lecture🌶Inheritance & Lookup: Lookup in MetaclassesSlides EN FR
  • Lecture🎁Class Methods at WorkSlides EN FR
  • Lecture🌐Overview of Pharo Web StackSlides EN FR
  • Lecture🌐Seaside: an Innovative Web Application FrameworkSlides EN FR
  • Lecture🌐Seaside: Rendering ComponentsSlides EN FR
  • Lecture🌐Seaside: a Glance at MetaData and RESTSlides EN FR
  • Lecture🌐Voyage: NoSql Object DatabaseSlides EN FR
  • Live🐥Live A: Git: New project creationEN FR
  • Live🐥Live B: Git: Creating a remote repository to an existing projectEN FR
  • Live🐥Live C: Loading a project with MetacelloEN FR
  • Live🎁Live D: Applying RefactoringsEN FR
  • Live🎁Live E: Quality checker in actionEN FR
  • Exercise🐥Solution: Rewriting ExpressionsEN FR
  • Exercise🌐TinyBlog: Data Persitency using Voyage and MongoEN FR
  • Exercise🌐TinyBlog: Building a Web Interface with SeasideEN FR
  • Exercise🌐Building a Simple Contact Book ApplicationEN
  • Challenge🌶Solution: Challenge 2EN FR
  • Challenge🌶Challenge 3EN FR

Week 5Exception, Debugging and Reflection

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🌐Seaside: Composing ComponentsSlides EN FR
  • Lecture🎁Really Understanding Class MethodsSlides EN FR
  • Lecture🐥Common ErrorsSlides EN FR
  • Lecture🌶Powerful Exceptions: an OverviewSlides EN FR
  • Lecture🐥Debugging in PharoSlides EN FR
  • Lecture🐥SUnit: Unit Tests in PharoSlides EN FR
  • Lecture🌶Files in PharoSlides EN FR
  • Lecture🔮Reflection: Basic IntrospectionSlides EN FR
  • Lecture🌶Benchmarking in PharoSlides EN FR
  • Live🐥Live A: Advanced Spotter actionsEN FR
  • Live🐥Live B: First look at the Debugger actionsEN FR
  • Live🐥Live C: Find a bug with the debuggerEN FR
  • Exercise🌐TinyBlog: Building an Admin Seaside Web Interface with MagritteEN FR
  • Exercise🐥TinyChatEN FR
  • Challenge🌶Solution: Challenge 3EN FR
  • Challenge🌶Challenge 4EN FR

Week 6Rethink Lookup and Advanced Object-Oriented Design

All slides & exercises All EN videos All FR videos Subtitles

  • Lecture🎁Did You Really Understand Super?Slides EN FR
  • Lecture🐥Understanding the Implementation of ifTrue:ifFalse:Slides EN FR
  • Lecture🎁Dice new vs. self class newSlides EN FR
  • Lecture🎁Message sends are plans for reuseSlides Erratum EN FR
  • Lecture🎁Hooks and TemplatesSlides EN FR
  • Lecture🐥Runtime ArchitectureSlides Erratum EN FR
  • Lecture🐥Characters, Strings and SymbolsSlides EN FR
  • Lecture🐥Dynamic Vs. Literal ArraysSlides EN FR
  • Live🎁Live A: Customized tabs in the InspectorEN FR
  • Live🌶Live B: Personalize your image startupEN FR
  • Exercise🌐TinyBlog: DeploymentEN FR
  • Challenge🌶Solution: Challenge 4EN FR
  • Challenge🌶Challenge 5EN FR

Week 7More on Object-Oriented Design and Testing

All slides & exercises All EN videos All FR videos Subtitles

Resources

Free online resources are on the Pharo documentation page. We recommend the updated Pharo by Example, the Pharo cheat sheet, and Learning Object-Oriented Programming, Design and TDD with Pharo on books.pharo.org.

The teachers

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

We thank our sponsors Unit, Unisciel, and the LearningLab of Inria.

logo inria recherche logo Université de Lille logo IMT Nord Europe (formerly IMT Lille Douai) logo investissement d'avenir logo utop logo unit logo unisciel logo CanalU