Any recent usage polling on Jupyter Lab vs. Notebook usage?

I’ll try to give a complete explanation here (sorry for the length of the post). I’ll start by summarising how I typically proceed:

  1. I create course content as Jupyter notebooks for a “real” in-person course that I have to give. The material usually ends up in a Github repository. Note that these courses are “crash-courses” of 1-2 days for people with some Python experience but not necessarily with Jupyter.
  2. For the live course, I set up a JupyterHub with all the course material (TLJH + nbgitpuller) and students can just login. At the beginning of the course, I go through notebooks super-basics, just so that people can execute and modify code.
  3. The course itself is a mix of me going through notebooks/live coding and exercises that students can do in the notebook. In that sense, I see notebooks as “in the background”. They are just a medium to offer content and a a simple platform to start coding immediately.
  4. I try to make the course available and runnable to anyone using Binder.
  5. I try to give instructions on how to run the course locally, usually using conda

Here are a few examples of courses:

Now I have two main reasons for which I tend to use the classic notebook interface:

  1. It offers notebooks as simple documents which look just like on GitHub or nbviewer with the additional option that one can run things. This makes the user experience (especially for beginners) very consistent. If there are “other things” on the page, people get naturally distracted and/or confused.
  2. Installation: in general people want to try to install things locally at some point. Given that ranting about difficulties of installing things in Python is a popular activity, I try to show people how simple it is, and usually tell them to install miniconda and then provide an environment.yml file (often the same as for Binder) for installation. That works usually great. But here comes the JupyterLab drawback: installing extensions can be a pain. First, they cannot be added to the environment.yml file (if I’m wrong about that, I’d be super happy to learn about a solution!). Second, the installation is not straightforward: they need to be built, then one has often to restart, sometimes there a version problems and extensions work only with a certain Jupyterlab version etc. As I said, I enjoy working with JupyterLab, and those problems can be overcome with a bit of experience, but I think it can scare away people who have been primed with the “Python is difficult to install” moto. In some cases, one even runs in true issues: I really struggled for example at some point with installing extensions on a JupyterHub because somehow there was a limit on “build size” and I had to use some additional options.

I’m not entirely sure about how valid my point 1. is, and it rests more on an impression. The Dask course that I gave was on Jupyterlab and in the end people were not very confused (but probably these were more experienced users). So if the extension installation process was easier I would probably tend to use Jupyterlab most of the time. In my opinion some should actually be included by default (like matplotlib widgets, ipywidgets, table of content etc.), but I’m not at all familiar with the technology behind them to know if that’s feasible at all. I know that there is the extension-manager, but I sometimes ran into trouble with it. Maybe it has become more stable now and this is the way to go?

I’m completely aware that there’s no major “objection” in what I wrote for using JupyterLab and I often hear from experienced users that those are minor issues. But beginners get frustrated very easily, and my goal is to make them use Python so that they see all the benefits before they run into those issues.

I hope that helps! Sorry again for the length of the post!

3 Likes

As an update to my previous comment (which was moved elsewhere because it was technical), after a couple of weeks, I couldn’t solve the problem until someone suggested I disable all my ad blockers [I had only been ‘whitelisting’]. [Apologies to everyone else who had tried to help me]

[My wish still stands - an indepdent installer as JupyterLab develops.]

However - after fixing this, JupyterLab is looking more promising, indeed!
[users may have to live without ad-blockers, though]

Thanks @guiwitz for the extensive answer. It is actually helpful - you seem to be pragmatic and facing the same general question of “how do I quickly on-board ‘normal’ students?” By “normal” I mean students who are at least somewhat motivated about the subject, but probably not about software installation.

This is perhaps part of the reason that I am more positive on JupyterLab - at UC Berkeley I worked on a standard campus VM, and now I work at Gigantum where we use Docker for everything. I assume repo2docker can solve your issue as well, but definitely, Gigantum will allow an expert to install arbitrary software using arbitrary Linux commands in the “advanced” section. For example, here’s a short post about Dask Dashboards in Gigantum (I hesitate somewhat here, as I don’t want to be a skeezy self-promoter - I welcome PMs or comments here to that concern!). With these kinds of fully virtualized methods, you learn to pay a somewhat substantial up-front cost, but then you get superior on-the-same-page-ness from that point forwards.

But switching tracks, and answering this query:

I think as long as you’ve got nodejs installed, it’s not so hard to install extensions via the JupyterLab extension manager… It’s quick to try! It’s on-by-default now in JupyterLab 2.1. While that’s actually a minor annoyance to me - as I want to support JupyterLab for naive users without nodejs - your use-case helps me see the wisdom in that choice :slight_smile:

So, I think virtualization solves some of your issues. It seems that changes in the JupyterLab extension manager may also sufficiently solve some of your issues. As always in Jupyter-land, there are ever-expanding sets of choices!