Hey everyone, I am organizing a workshop on numerical simulations in biophysics for the research group I’m part of. Most of the people that will attend are biologists with limited coding experience (i.e. they know how to do some basic data analysis in either R or Python but not much more). All of them have zero experience with Julia.
The workshop is mostly of practical interest, in that I will try to teach them how they can use some tools that I developed (in Julia) for my own research, but that could be useful for all of them.
The workshop will last around 7 hours and will be composed of three parts:
Generic introduction to numerical simulations in biophysics (whys and hows, some simple differential equations, chemical reaction networks, brownian motion…, mostly stuff related to our research). This part will be completely theoretical, and will last not more than 1 hour.
Julia crash course. Here I would like to give them a very quick “theoretical” introduction to Julia (no more than 15 minutes) and move to hands-on introduction to the very basic stuff they will need for the rest of the day. Not sure how much time would be needed for the hands-on introduction, maybe 1 hour is enough? The things they will explicitly use later are: control statements, arrays, functions, dispatch.
Deep dive on various tools (4~5 hours)
So, given this bit of context, there’s a few question I would like to ask. Consider that I have never done anything like this before.
I would like to make this experience as smooth and effortless as possible. What is the best way to make sure that everyone can properly set up their environment without strict guidance (there’s quite a few packages we will use)? There will be both Windows and Mac users while I have been a Linux-only guy since I was a kid, so I would like to also limit the chance of having os-specific issues that I would not be able to tackle on the spot. My idea was to setup a github repo with a Project and Manifest file and just ask them to clone and instantiate it on their machine; would this work? Is there a better way?
What is the best approach to the hands-on sessions? For the “crash course” we will just use the REPL. Then for the latter part, I will hand them some working scripts that they can play around with. I am not a fan of notebooks in general but I feel like a notebook session might “feel” more interactive to them than a script to include on the repl. Pluto notebooks are cool but they pose some limitations and I fear they might be unintuitive for beginners; also there’s the (maybe minor? not sure) drawback that we will need to recompile packages and stuff for every different “exercise”.
As I anticipated, the parts of the language they will need to (at least superficially) understand are control statements, arrays, functions and dispatch. But again, I have no previous experience teaching this kind of stuff to people; is there something important that I should include for beginners? What are the topics with which beginner coders usually struggle in Julia? Any insight on this, and links to material with a similar scope, would be greatly appreciated.
I will appreciate any further tip, recommendation, suggestion, comment, what have you. Thank you
My experience is that trying to avoid telling students about Revise and VSCode just complicates things latter. I currently just teach them a nice workflow with these tools from start.
And if you guide them on the creation of an environment with your packages, with 1.9, the experience will be quite smooth.
I think trying to avoid these steps for simplicity ends up being a headache and a bad first experience for the students.
I’d say that’s overkill here - if I understand OP correctly the aim is to enable participants to use some existing packages for their own analysis. For this I’d say you want to run things in a notebook where you create an environment at the beginning (with a short explanation of what they are and why they are useful), add the relevant packages, and then dive into an application workflow, eg acquiring data with CSV.jl/XLSX.jl/whatever is common in biology, some data wrangling, analysis using the domain specific packages, and plotting.
Yes indeed the main goal would be not to thoroughly teach them Julia, but to show them some tools and approaches that they could integrate in their work.
I would say that in this case Julia is a “side-effect” just because it is what I happen to use.
I do see the value in both approaches. I’m just not sure which one fits better this situation, given that I don’t expect them all to become Julia users after the workshop.
While I get the value of Revise, that is definitely something out of the scope here.
But setting up the environment on the spot is not a bad idea in itself; in most cases it is super-straightforward and does not take more than a few minutes (we will have a fast internet connection available). I’m just a bit scared of possible OS-specific issues I might be unaware of.
For example, I remember there was a time (not more than 2 years ago) where it was impossible for me to use VSCode with environments containing DifferentialEquations.jl because it would unavoidably get stuck on “indexing packages” for hours. This is what I want to avoid.
In my experience, creating a GitHub repository with a README with all the installation instructions can be very useful and you can circulate it before the workshop so they can install all the tools beforehand. In the repo include a Project.toml file and tell the users to run a command like:
julia --project -e 'using Pkg; Pkg.instantiate()'
To precompile and install all the packages you want to use before/during the beginning of the session so they can just wait for it to finish while you are covering some of the theory. I would also include Revise.jl in this Project.toml but you don’t have to explain to them how it works. Some of the students I taught had extremely low powered machines and precompilationtook the majority of the session, even for the students who had installed everything beforehand, and really slowed things down. Giving this to the people in the workshop before can make using it quite smooth and if they have any issues you can address them later in the session.
In terms of what to use, I would recommend VS Code as it has nice syntax highlighting and autocomplete (that sort of works) and a nice integration with the REPL. You can just make the REPL full screen too if you want to focus on that. Teaching a few things like the command palette to start the REPL, and a few shortcuts like Ctrl+Enter (or Cmd+Enter) on Mac, can be quite helpful. This has the benefit of working cross-platform as well.
Exactly, that’s my point. Then you should think: what do I do to use these tools comfortably. And my experience in teaching is that trying to simplify that initial step only drives people apart later. In particular I think Revise is a fundamental tool from the start, and it is not an overkill for anything except few-lines exploratory playing.
VSCode is attractive, particularly for non-coders. People feel empowered by the integrated interface, they are not scared by it, on the contrary. The other alternative is notebooks, but then one needs to think if one is comfortable doing that in notebooks, and manages to find a nice workflow for the task in question with them. I’m not, so I don’t recommend them in general.