A review of CS50P: Introduction to Programming with Python
Having completed CS50X, CS50W and CS50AI, I was extremely excited when I learned that there was a fresh new course from CS50 which covers Python in great detail. For those who are not familiar with CS50 (it stands for Computer Science 50), it is the largest on-campus course taught at Harvard University and it is also available to students that are not enrolled in Harvard via its online version.
The difference between CS50X and CS50P
Being an introductory course, what differentiates itself from CS50X is that it is a "introduction to programming" not a "introduction to computer science", so it does not mess with pointers, file structure, memory management, data structures which are common themes in computer science. Instead, it focuses on core functionalities of Python language, like its syntax, loops, functions, data structures, classes and also features that almost always comes with the language like Object Oriented Programming, testing and regular expressions. It is intended for beginner programmers, those are making its first steps in Python or even those who have no prior programming experience at all. It will certainly be a challenge, but a doable one, if one takes its time.
In 2022, partly due to restriction imposed by COVID-19, CS50's team decided to take a different approach in regards to the launch of the program. It has turned to a online only course, releasing the lessons in live videos on social media and by doing so, allowed viewers that are not students from Harvard to watch the lectures, ask questions and reply to the lecturer. It is a very innovative approach for a program still rooted in a traditional learning environment. This approach, although inclusive, was not free from shortcomings, as sometimes the student asking questions were inaudible or difficult to understand due to its English pronunciation. Sometimes their audio was choppy or they couldn't be heard at all. As the lectures will be edited before they are available in their final version, I believe most of these problems won't be noticed by future students of this course.
After each lecture, there is a opportunity to practice what was learned by completing a problem set. In the past programs, it consisted of one or two exercises, which were lengthy, required an extensive research and some hard work to pass all the required tests. When I was taking CS50X, despite being advertised as a beginner course, it was really challenging to tackle these exercises, even with the helper lectures and the possibility to ask for directions (not copy and paste answers) in the social media forums. On the other hand, I really learned so much by researching, learning from other sources and acquiring additional skills. But in the end, my feeling is that many students were lost to frustration, because of the steep learning curve. CS50P greatly alleviates this pain by having around five exercises in each problem set, the first requiring the basic concepts presented in the lecture in order to solve it and the others adding a bit more complexity in each step, which makes the learning curve more gentle. The subsequent problem sets uses the concepts from the previous ones, so it further helps to harden the freshly acquired concepts. Instead of the dull "find the prime numbers of X" or "sort this array" types of problem, there are fun problems, like a program that converts Bitcoins to US Dollars or converting regular text to ASCII art. It is quite difficult to design creative and engaging problems, while also making sure that the difficulty and the required skills are adequate to beginners, so thumbs up for the team! For the gran finale there is a final project that is about creating your own program that you can potentially share, so other programmers can solve problems or just have fun, complete with instructions, tests for ensuring reliability and with all requirements listed in a file!
If you are new to Python, take the course. Even if you are in an intermediate level, you may learn some new things and have a great time practicing your skills. Don't rush for the certificate, trying to complete everything at the shortest time possible, instead take your time, do your research and try to learn as much as possible from the problems and the modules that are presented during the course. I am sure that it will be the foundational knowledge for any future developer that wants to solve problems with the Python language.