Continued Growth, Progress, and Wisdom (Post #5)

Welcome to my fifth post on learning Python! I have had one meeting with my mentor Bill since the last post, I completed the course, and I created a plan for my COVID-19 simulation which Bill and I then reviewed. Today’s progress and “wisdom” reports will be merged in Question 7 because it is difficult to discuss one without referring to the other.

  1. What kinds of learning opportunities does your mentor provide to expose you to new learning?

My mentor exposes me to new learning opportunities by guiding and pointing me in the right direction. He never directly tells me what to do; instead, Bill demonstrates his processes, the websites he uses, or simply even plants the seed of an idea and lets me follow through. In short, he acts as the facilitator while I work autonomously.

For example, this occurred with the COVID-19 simulation — Bill took initiative by shifting the conversation to the final project and offering possible ideas. Both he and I were particularly interested in pursuing something related to the real world, instead of following the trend of designing a video game or app. Bill then showed me a couple of resources (regarding the SIR model) to give me ideas, but left it open-ended, allowing me to approach the project in any direction I would like.

Later, when working on the plan for the simulation, I often found myself modelling my learning approach after what I had learned from Bill. For example, I used videos, academic papers, as well as Python language references, none of which I have used before when researching Python specifically. I would start with either a paper or a Python reference, but if the topic was too complicated, I took advantage of videos for visual aid (they were particularly helpful when learning about the SIR model and Matplotlib; more on this later).

  1. What kinds of learning opportunities exist to reinforce new learning?

The primary learning opportunity that reinforces my learning is the COVID-19 simulation project I am currently doing. My goal is to apply as many concepts as possible that I have learned from the course and ultimately cement my knowledge.

For example, one of the most significant milestones in my learning so far has been learning how to use classes. My learning — watching the videos in the course — was reinforced first through basic exercises, then a challenge (both provided by the course), and finally the milestone project (Blackjack), where using classes was required. I needed to fully exploit the capabilities of classes (at least as far as I had learned) to create the Blackjack game; it was not only practice but also helped me to identify any weak points in my knowledge. Now, the COVID-19 Simulation will cement my familiarity with classes — I will be using two to handle the two main components: Graphing the simulation and having an interactive GUI. Thus, learning opportunities that reinforce new learning come naturally when practicing/applying concepts in programming, for it is full of trial and error.

  1. What kinds of opportunities exist that might accelerate learning?

Similarly, how Bill and I have decided to approach my learning Python places emphasis on autonomy; I can choose to learn/work as quickly as I would like, as long as I am certain that I fully grasp what I am learning/applying.

For example, the course, its milestone projects, and the final project I am working on are all self-directed and I can choose to complete them faster than planned, either if I have the time or I am particularly “in the zone.” This will be especially evident as I begin the project; since there is even less structure than before (no videos to watch, no exercises to do), I may suddenly have a lot of free time one day and decide to work on the simulation for several hours, “skipping” right ahead. This has already occurred several times, most notably when I worked on Milestone Projects 1 and 2 (Tic-Tac-Toe and Blackjack, respectively). In both cases, I managed to finish writing the program (albeit with a couple of bugs that were fixed later) in only 1-2 days because I was so sucked in and focused that time passed in a blur.

  1. When you get together what do you talk about?

When Bill and I get together, we get directly to work, making the best use of our time. The topics we discuss are always centred around the questions I have, in response to which Bill always provides excellent answers (ranging from pieces of advice to technical explanations), as I have described in previous posts.

For instance, during the meeting we had most recently, I walked through my plan for the simulation, showing him websites I had curated as resources and what my vision for the final product would be like. Throughout, Bill offered suggestions and advice (more details later). Beforehand, I had requested for Bill to ask and answer in this fashion, and he agreed; my reason for this is that I knew that the format of the meeting would be different from previous ones, where I would be presenting more than usual (rather than just asking a series of questions). This was the first phase of our meeting. The second phase was concerned with additional questions that I had prepared, during which Bill also provided more general advice. Finally, in the end, Bill congratulated me on my progress, and I thanked him for his amazing help! My experience on this journey so far has been unparalleled thanks to Bill’s advice and dedication — I would not have learned (and enjoyed learning) as much as I have without him.

  1. What is going particularly well in your mentoring relationship right now?

Currently, our ability to adapt has been thriving in my mentoring relationship with Bill. Whenever an obstacle or change crops up, we have always managed to take it in stride and adapt.

Apart from taking advantage of what we have access to on Zoom (and finding workarounds to the challenges we have with meeting remotely, described in previous posts), the example given above of Bill and I adjusting the format of our meeting also demonstrates our ability to adapt. I was surprised in particular by how seamlessly Bill filled the role of constructively criticizing my work, exactly like how I had asked him to (he did it better than I even hoped for). Moreover, I was also able to provide clear explanations and answers when describing my plan for the simulation, and we were so immersed in our discussion that time, again, flew by. Additionally, regarding time, Bill and I had to reschedule our meeting due to unanticipated scheduling conflicts — we solved them quickly through email.

  1. What are you learning about one another?

I am learning more about Bill’s personality, the work he does, and the passion he has for it. First, he is exceptionally positive, uplifting, and always focused on what he does. During every meeting, Bill has been very encouraging and always cherishes my progress. Whenever we discuss a topic, he is always absolutely concentrated, paying attention to every detail and making sure he has assisted me in every way he can. Bill also makes sure he fully understands whatever he teaches me. I can see how all this translates to major parts of his life such as work, family, fitness, etc. — in each area, I am certain that Bill is constantly doing his absolute best, persisting when challenges arise, helping others, leading, and also maintaining a balance between work and life.

Second, by offering his experience and advice, I have learned about the overall development process (described in the previous post) he utilizes in his software engineering/systems architect job at Teradici. I can begin to see small portions of his thought processes, for example, what he focuses on when structuring a program and how he adapts/learns new concepts (both outlined in #7). Importantly, his dedication to teaching me and the enthusiasm that I observe each meeting demonstrates his passion for technology and software. Put simply, without Bill’s passion, working in his job, much less taking the time to mentor someone, would not be possible.

  1. Wisdom and progress.

The first portion of my plan for the COVID-19 simulation illustrates the SIR model and how I can apply it. SIR stands for susceptible, infected, and removed, which represent the total population that can be infected, the number of infected, and those who have either recovered or died, respectively. Note that on becoming removed, the model assumes that one can no longer become infected. The expressions of this system of differential equations (seen on the right), in turn, represent the three rates of change for the number of susceptible, infected, and removed over time.

The number of susceptible over time, for example, is calculated by subtracting a constant, multiplied by the current number of susceptible, and then multiplied by the current number of infected. Essentially, this rate of change subtracts the portion of the susceptible population that has become infected. Each variable is a rational number > 0 and < 1, and the constant a represents the infection rate. In contrast, the number of infected over time is calculated by adding the reverse of the susceptible rate of change (imagine it as moving a portion of the population from one “bucket” to another), while subtracting those that have recovered/died with a constant (the recovery/death rate) multiplied by the current infected population. Finally, the “removed” bucket is the simply last portion of the second expression but reversed. We can generate “simulation” data by repeatedly adding/subtracting the three rates of change to preset S, I, and R, values. My goal for the final product is to produce SIR model-based charts that move in real-time/are animated.

After outlining my understanding of the SIR model to Bill, he gave me the green light. I also proposed a couple of other ideas, for example, adding another “immunity” constant to counteract a, acting as vaccines. Or, to make the data more realistic (in reality, the lines are not smooth curves), I could randomize the values of constants based on a range of 20% (e.g., 40-60% infection rate). Bill reacted by agreeing that these are excellent ideas, and also offered some additional suggestions: The user should be able to modify the variables, not only at the beginning, but also while the simulation is running, and I can add even more “factors” — for example, public health measures, increased infectivity — to make the simulation more accurate. Second, instead of randomizing the constants in an arbitrary range, I can instead use data we have from the pandemic right now to estimate one. For example, I can look at the average number of people — I will try to find a range — that a single person can infect, or find how long it takes for different people to recover from the virus.

Altogether, my vision for the simulation is for it to greet the user with a GUI, and, in a “Lemonade Stand”-like fashion (the game on CoolMathGames, as observed on the right), the user should be able to modify the different variables present in the three equations. Then, the user can run a simulation, which will output animated data updating second by second (similar to stock charts). Importantly, to represent changes — such as in public health measures, different COVID-19 variants, social distancing, and levels of mask-wearing (I will incorporate as many of these as possible into the model) — the user should also be able to modify the variables and constants while the data is updating to make it more similar to real life. To accomplish all of this, I will create two main classes — one to handle the graphing, and another to handle the GUI and user interactions (I have already discussed the specifics of this plan — what modules I will use, the methods I will create and what each will do, etc. — with Bill).

Ultimately, I have two main takeaways from this process of writing a plan and researching. First, Bill heavily emphasized the importance of understanding what exactly the purpose of the program you create is. During our meeting, whenever I suggested an idea, he would question me about how the added feature would improve utility to the user. For example, the idea of being able to update variables while the simulation is running adds realism and allows the user to see what happens in different circumstances. In contrast, adding a scatter plot graph (to visually represent the population) would be far from as useful because it only provides aesthetic value.

Second, I learned from Bill how he researches concepts he knows comparatively little about. When I wrote my plan for the simulation, key modules I needed to be familiar with were Matplotlib and Tkinter, a graph visualization module and Python’s GUI interface, respectively. While previously I knew absolutely nothing about either module, by looking through Python references and videos (neither of which I used heretofore when learning Python), I now know enough about each of the two to apply them to the simulation. Furthermore, following Bill’s practice of creating a plan in the first place has helped me to keep track of every aspect of my program and turned the final stage to simply implementing everything into written code.

Thank you for reading my fifth post. I look forward to working on the simulation and sharing my progress in May!

Leave a Reply

Your email address will not be published. Required fields are marked *