Creativity is born through struggle, so give students the opportunity to fail.
I have been teaching a python basics workshop for the past three years. It is a two-hour class for six weeks. I’ve learned that my workshops work best with ten or fewer students. These workshops are for absolute beginners. Since they are beginners, as an instructor, my role is to make sure students have a solid foundation that will allow them to venture out on their own. Naturally, therefore, I fervently monitor student outcomes.
At the end of each workshop, students give me feedback. Based on the input, I incrementally modify the workshop for continuity, clarity, and interactivity. Surprisingly, I found links between student outcomes and how often they interacted with the code, understood how one topic connected to another and made abstract concepts concrete.
With this understanding and modifications, I could see student outcomes significantly improve. They began to take on advanced projects such as web scraping, API development, and web frameworks on their own. Below, I’ll describe some of the elements that I include in my coursework.
Encourage Creativity
“Programming is a creative endeavor.”
When students feel that there is only one prescribed way to accomplish a programming task or it’s confined to one way of thinking, they struggle. They excel once they figure out how programming can conform to their mode of thinking. To promote this, as an instructor, you should recognize when students arrive at non-obvious solutions. When students are having difficulty implementing a coding solution, have them explain their logic to you, and then code it out to reassure them that their thinking pattern is valid.
One method I use to help students think through problems is to tell them to forget the syntax and explain how you would solve the problem with a pen and pad. Once they have this, they generally can proceed with the programming task. All of this instills the idea that programming can be a creative endeavor and, if viewed through this lens, can free the mind to achieve great things.
Make it Interactive
I use two tools for interactivity: “Pair Programming” and “Jupyter Notebooks”. Jupyter notebook is essential to the quick learning of python syntax and fundamentals. The color-coded syntax allows students to identify keywords and structures quickly while accessing the python kernel with a Jupyter notebook shortens the code execution cycle, resulting in less time spent running python scripts. The more a student can interact with the code within their IDE, the better.
Python, and computer programming in general, require a substantial amount of practice. Unfortunately, most online courses don’t leave room for in-class coding, leaving students to rely solely on instructor demonstrations and out-of-class exercises.
I’ve noticed that syntax requires frequent exposure through demonstrations and in-class coding exercises. Therefore, performing the in-class coding exercises is vital to retention and understanding.
After introducing 2 to 3 concepts, I have the students do pair-programming in break-out rooms for about 10–15 minutes. While one student directs the coding, the other types. I then visit each break-out room and address any concerns. At the end of the lesson, students also complete a lab assignment that is more comprehensive than the coding exercises.
“Repetition is key to learning, and this holds for learning Python.”

Abstract Concepts
Students have difficulty grasping the logic when dealing with control flow, as it can be a bit abstract. For this reason, I made flowcharts of various control flow statements. The flowcharts help them visualize the logic and make it easier to implement. Do whatever you can to visually represent the code; the students will retain the information much better.
Final Thoughts
Running a successful python workshop is not something that happens overnight; three years in, I’m still performing experiments and tweaking the course material. The biggest lesson I’ve learned is to spend as much time as possible with the students, make yourself readily available, and help them explore out-of-class projects, and guide them. It will be surprising to see how much you will grow as an instructor as the students challenge you with new problems to solve.