carpentries-incubator / julia-novice

A lesson exploring the Julia language
https://carpentries-incubator.github.io/julia-novice
Other
15 stars 20 forks source link

cut the trebuchet stuff? and other feedback from 2022-12-14 #42

Open snotskie opened 1 year ago

snotskie commented 1 year ago

Taught this yesterday, jotting down my feedback here:

  1. I moved the project management (ep 8) stuff more up front (right after ep 4), going with the strategy of teaching the things that Julia does differently than other languages first, and ending with the things that are similar to eg. Python, since my learners were all coming from a Python/R/etc. background. We might be able to combine ep 8 and ep 4 together.
  2. I think we need to spend more time on the type system, in particular how it relates to error messages. Julia has notoriously hard to understand / unhelpful error messages. Making sense of them requires a pretty good sense of Julia's type system, multiple dispatch, and the motivations the Julia community had behind those design decisions
  3. I think we need to spend more time talking about the relationship between Julia, Github, and the community-driven nature of Julia. A good place for that is when we talk about package management, generating projects, etc.
  4. I found the Trebuchet "project" distracting and hard to explain the motivations behind it. I found myself spending a lot of time trying to switch gears from language-level stuff to what the goals behind modeling the trebuchet were. I ended up cutting that mid-lesson and instead just quickly motivating each remaining piece (functions, flow control) separately
  5. I ran out of time to mention tests
  6. The learners really appreciated the REPL modes discussion, and they really appreciated the discussion about the unintuitive parts of Julia's type system for folks coming from other languages
  7. It seems really jarring to start the type system episode with structs. I think we should work up to that instead
  8. In the type system episode, we should mention syntax like "x::Number = 3" and spell out the non-intuitive parts of what that is doing
  9. Also in the type system episode, or in a new episode, we should mention vectors, multi-dimensional vectors, and the unexpected thing that Vector{Int64} is not a subtype of Vector{Number}. Similarly, we should mention dictionaries
  10. In the type system episode, my learners had a question about why the word Abstract shows up so much in the type tree. That's answered in the lesson, it was a good question, worth noting that it's something that stood out to them right away
  11. Is this aimed at folks new to programming, or coming to Julia from another language? Those feel like two different workshops to me, since what you talk about, in what order, and in what depth change a lot between those two cases
giordano commented 1 year ago

Thanks for your comments, very helpful! I haven't had the occasion for running the workshop yet, but I agree with you on point 4 that the trebuchet may not be the easiest example to bring as a motivation for this lesson, especially for a wide audience who may not understand the problem very well. Alas, I haven't thought much about alternatives, so I can't offer better suggestions.

BeastyBlacksmith commented 1 year ago

Indeed, much appreciated feedback, thanks!

Is this aimed at folks new to programming, or coming to Julia from another language?

As discussed in #12, it's more aimed at people coming from another language.

snotskie commented 1 year ago

I haven't thought much about alternatives, so I can't offer better suggestions.

it's more aimed at people coming from another language.

Since they're coming with some prior understanding, I think a classic learning exercise might work fine, like an apple cart. You want to track the apples (some green, some red) you sell, etc. We can talk about variables, types, different data structures, control flows, functions, the Plots library, and the DataFrame library pretty easily with that I think, without much problem setup. There's toy datasets eg., https://www.kaggle.com/datasets/raykleptzo/classification-data-apples-oranges and https://www.kaggle.com/datasets/kapatsa/apple-prices-in-russian-regions

(Not suggesting apples specifically, just something silly and grokkable regardless of background. Trebuchet I felt out of my depth because my physics and calc are rusty)

BeastyBlacksmith commented 1 year ago

I can see the topic being overly specific and niche. But I think its the interesting part here to deal with an actual problem instead of a generic toy example. I do think it would be beneficial to also have a more general lesson for julia than this one, but I also think that should live in a seperate lesson. One option here would be to revive https://github.com/carpentries-incubator/julia-data-workflow.