swcarpentry / python-novice-gapminder

Plotting and Programming in Python
http://swcarpentry.github.io/python-novice-gapminder/
Other
164 stars 431 forks source link

Feedback and general suggestions from learners #432

Open dvalters opened 5 years ago

dvalters commented 5 years ago

Hello. I'd just thought I'd share a couple of comments/feedback from students after delivering this lesson while it is still fresh in my mind.

General feedback

The lesson was generally well received, with students liking the balance of teaching:exercises (And I like delivering this lesson as there is less talking for me to do, and more interaction.)

Feedback from one of the students was: (I taught the SC git novice course afterwards):

I thought the git course was a lot more polished than the Python one...it flowed better

Understandable, as the git one has been around longer. But some concepts and syntax are introduced without explanation before they are covered in detail (Lists, Conditionals), and a reordering of certain lessons may help?

I like this lesson personally from an instructor point of view, and prefer it to the Numpy heavy, "Programming with Python" for our particular audience, who often deal with tabular data.

Comments on specific episodes or issues.

  1. "Fill in the table" style exercises were not popular with the learners. It was not immediately clear what it was meant by 'create a table' - by hand? or in Python somehow? (Possible confusion later on from Pandas Dataframes being table-like). Also having some variables as undefined in the solution was seen as a bit of a 'trick question'.

e.g. Episode Variables, Ex 1 (Also comments are introduced here without explanation.)

  1. In Episode 7: Reading Tabular Data, the exercise "Reading Files in Other Directories" uses made up data and directories, which meant the students could not try this exercise to see for themselves. (It was commented that it would have been better to actually be able to run some code here to see the result.)

As a general comment, students did not seem to like 'thought' exercises as much as ones where they could type some code (particularly if the exercise would have easily lent itself to a working example.

  1. Lists introduced in Episode 9, Plotting, but without explanation (as sample data for a matplotlib plot.). Previously students have only used square-bracket notation as indexing or slicing notation ([...,...])

  2. Plotting. Matplotlib within Jupyter notebook. Some students were puzzled here with the behaviour of the Jupyter notebook and whether the calls to plt.something would remember the previous state of the plot. I had to digress here to explain a bit about the way the figure object in matplotlib will remember it's previous state in certain circumstances (If calls are run within the same cell for example.), and later on how it 'remembered' the previous plt calls when looping throught datasets.

  3. Episode 11, Lists. Lists are finally introduced, but the Python 'gotcha' regarding the way lists point to objects, rather than copies, (Covered in #370) came up and surprised students. It required a bit of digression and some on the fly demoing of how lists exhibit this behaviour, beyond the brief exercise "Copying (or not)" in this episode.

  4. Episode 12. Loops. Students were confused particularly by exercise "Identifying Variable Name Errors". Conditional/control statements are introduced without much explanation here, and before the episode that covers them. Some students also (reasonably) tried to solve this by defining the undefined variable a.

  5. Episode 18 Style. Students were a bit baffled by the "String Machine" exercise, the code being (intentionally) difficult to read, but also a few remarked it seemed to be a bit 'abstract' (It didn't really appear to do much other than move some characters around... I think is what they were getting at.)

I'm happy to work on some of these issues and submit specific issues or PRs for things not already covered in existing issues, just thought I would write down this feedback for reference.

alee commented 5 years ago

Thanks for the detailed feedback!! This is extremely helpful, and thoughts from others who have taught the lesson would be much appreciated.

We would welcome PRs for any of these issues..

For #5, I'm not a huge fan of the matplotlib API & imperative style personally and #405 has been a place to discuss a switch to plotnine / ggplot2's grammar of graphics style of plotting. I would like to move #405 forward but haven't had the bandwidth to deal with it lately due to the start of the semester and numerous other projects tugging away my free time..