Created
July 5, 2023 20:25
-
-
Save Humboldt-Penguin/2cfd8260d27525c1c22a458f77abcb46 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
For background, I'm pursuing a second major in computer science, I've been using Python/Jupyter in my research for three years, I've written/published Python packages for scientific analysis, I'm a TA for introductory computer science courses, and I'm co-teaching a computational physics class for college freshman. Because of this, I feel like it'd be best for me to limit the scope of my feedback to the coding-related aspects of the program. Overall, I think the coding education had a lot of room to improve with respects to clarity, ease of comprehension, and learning potential: | |
(1) The code we were given lacked proper documentation and comments, which made it difficult to understand the purpose and functionality of many sections. Given the push in academia for more clear, documented, and reproducible code, I think this is a bad example to set. This leads into the next point... | |
(2) When we had time to work independently, that time was exclusively spent tinkering (usually aimlessly) with existing code rather than writing something ourselves -- we ended up producing plots/results that seemed advanced, but if you asked us to apply this knowledge to a new problem/domain where we didn't have an existing codebase, we'd likely have no idea where to start. I feel like it would be much more valuable to gain versatile knowledge that could be applied to any type of problem such as working with optimized data structures (numpy arrays), analysis techniques in data science (regression, clustring, principal component analysis, neural networks, anomaly detection, etc), or unique ways to visualize data besides the traditional scatter/line/histogram/2dhistograms. We definitely couldn't dive into the specifics of each of these, rather, the goal would be to make students aware of the new avenues of analysis that are opened up by computational tools. These ideas could still be approached through the lens of high energy density physics, but it wouldn't be so hyper-specialized that we'd never end up using the knowledge again in the future. | |
(3) I feel like the lessons in Python basics would be more beneficial if they were given by someone with formal education / extensive knowledge in Python and computer science (especially Python / computer science education). Much of the information was presented in a sub-optimal or slightly confusing way, or the order in which concepts were introduced didn't make sense. One example right at the beginning is that the process of importing modules and declaring namespaces was a bit confusing and no distinction was made between core-Python packages like `math` and external, user-written packages like `numpy`; this isn't going to halt all progress, but I think the unnecessary friction makes us lose the opportunity to plant the idea in students' minds to look around for other specialized user-written packages that may be relevant to their own research (pyshtools, spiceypy, etc). Other examples of sub-optimal choices in teaching core CS concepts would be introducing lists/packages before other foundational things, introducing for loops before while loops, not connecting the concepts of loops and iterating through lists (especially as a means to generate and plot data), bad string formatting conventions, and a few others. I can understand how these may seem very nitpicky, but in my personal experience in learning/teaching Python, these small things are essential in the process of allowing students to intuitively grasp programming and start to see problems through the lens of computational thinking. Like I said before, on the surface you might be able to say "students were taught the basics of both loops and lists" as well as "students were given hydrocodes that uses loops and lists", but if you gave a student a new problem that required iterating over a list with a loop, I'm confident they wouldn't know what to do. I acknowledge that the workshop's purpose isn't to replace an introductory Python course, but I feel like the time spent teaching/working with Python could have been much better utilized in order to foster a mindset of "thinking about physics problems from the perspective of solving them with computers", which seemed to be a key learning goal for the program. | |
If these were just my own thoughts, I likely would have kept them to myself. However I'm motivated to share these because of thoughts/reflections I've heard from a few other students. I've heard a few people who've never coded before express frustration during the sessions and say they want to stay away from this type of computational work in the future (or at the very least, have zero excitement about learning more about computational methods). When I asked them how they think they could apply computation to other problems in their own research, their own coursework, or other research fields, they rarely had any specific/enthusiastic answers. One other person who had a formal background in CS and used Python extensively in their research shared a few of my frustrations (albeit to a lesser degree) and said if this was their introduction to Python, they likely wouldn't be as excited about it as they are now. | |
On a final note, I'd like to share a few of the online resources that helped me develop a passion for computational physics in case they may offer some alternate perspectives: | |
- The "Let's Code Physics" YouTube channel is actually run by a professor who does Physics Education Research in computational methods (I've helped facilitate one of his AAPT workshops for high school teachers, he's an awesome guy), and covers more fundamental/introductory Python programming as well as 3D visualizations/simulations: https://www.youtube.com/@LetsCodePhysics/featured | |
- The Mr. P Solver YouTube channel covers more advanced Python projects on a variety of college-level physics: https://www.youtube.com/c/mrpsolver/videos | |
- The Astroniz YouTube channel makes a series of more advanced space science lessons/tutorials, mainly with NASA's SPICE toolkit in Python: https://www.youtube.com/@Astroniz/videos | |
I'm sincerely grateful for you taking the time to read through all of this. I'm very passionate about computational physics education, so my goal isn't to tear this program down, but to create meaningful learning experiences for others. I thought this program was an invaluable experience, and I apologize if any of my criticism came off as overly harsh. If you'd like to follow up on any of my responses, I'd be more than happy to discuss: [email protected]. I'd also be open to contributing resources for teaching Python in the future. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment