Project-centric learning

Cover image: Designed by vectorjuice / Freepik

In this post I would like to describe a project-centric approach to learning which I currently use as a freelancer.

I first tried this approach on my own probably almost 20 years ago as a teenager, but at that time I was driven mostly by curiosity and didn’t give it any name. Several further projects were done in a similar manner as part of my freelance experience in 2014 and later on. Now I deliberately use project-centric learning because it works so well (at least for me).

The main idea of project-centric learning is to create an interesting challenge and connect several different fields of knowledge. It works very well for learning new things when the curriculum is not structured and the learning is not immediately needed for the job (nor is it paid by the client/employer, so there is no sense of urgency).

How to find projects

The first step is to get an influx of fresh ideas. I have subscribed to several sources which constantly provide technical news, promote ideas etc. For example, there is a nice Telegram channel which automatically collects new articles about R. At some moment of time I even developed a mild impostor syndrome after reading this news feed . Many great developers create awesome packages and it is virtually impossible to keep track with all new features.

I try to collect new ideas which are interesting or seem potentially relevant to the job. Probably some kind of mind map would be the best way for storing them, but it requires extra efforts and currently my list is a bit messy.

R/Shiny example

When I learned Shiny I didn’t simply create yet-another-dashboard. Instead, I went through the list of ideas and tried to figure out how to connect several programming topics at once. Take a look at the Shiny parser example: this is a no-code tool which allows users to parse page data and re-use custom settings.

Shiny parser example

During the work on this project I had to learn multiple things at once:

  • Create dynamic Shiny UI elements
  • Try out several new R packages which I never used before
  • Learn to structure R/Shiny code in functions
  • Learn Rvest package
  • Get familiar with XPATH rules
  • Understand how pages are downloaded: server response codes, page headers, page encoding
  • Update knowledge of JS and CSS
  • Get familiar with YAML format
  • Create webm video tutorials using OBS Studio and Shotcut
  • Learn a couple of Rmarkdown features
  • Understand how HTML code can be efficiently added to the Shiny app (not only via Iframe or by downloading the 7Mb all-in-one HTML output from Rmarkdown)

Some of these learning goals were foreseeable, but at least half appeared after the start of the project.

One important aspect of learning is the feedback. I didn’t ask to check my code specifically, but showed the app to several members of a Russian-speaking R community. Some drawbacks of the Shiny Parser became immediately obvious, as a result the app was almost completely re-written.

Even though this project wasn’t a part of my work and didn’t provide immediate value, it was still an interesting challenge. I was able to close several knowledge gaps, learn popular Rvest package, socialize with fellow R developers and much more.

If you liked this post, let’s discuss the project-centric learning on on LinkedIn.

Here are some other posts:

Updates in June 2021
Updates in June 2021

Image attribution, parallax effect in blog posts, meta tags for social pages

2021-07-07 · 6 mins

A truly static blogdown website
A truly static blogdown website

How to create and deploy a custom static Hugo site with blogdown R package.

2021-05-30 · 8 mins

Moving to Hugo
Moving to Hugo

Finally got some free time to learn blogdown package. Here is a story of converting my website from Wordpress to Hugo.

2021-05-29 · 2 mins