Harvard University is one of the best universities in the world and it offers free online courses for anyone willing to learn. CS50 is the largest course on the university's campus and is also the one that receives the most funding. It is also no coincidence that it has an incredible 4.2 million students enrolled to date:scream::scream::scream:
In CS50 there are many courses and one of them is Introduction to Artificial Intelligence with Python, or CS50AI, which is indicated for those who managed to finish Introduction to Computer Science (CS50X) or have 1 year of experience in Python and want to have a general understanding of what is Artificial Intelligence (AI). CS50AI gives you a certificate issued by the CS50 institution for free if you manage to complete all the projects, and there is also the possibility of paying for the certificate provided by Edx or acquiring a professional certification, which includes other CS50 courses, but honestly only the CS50 certificate is enough.
What is needed before starting the course?
- [ ] Know advanced math or statistics
- [ ] Have excellent grades in math
- [ ] Be a genius
- [x] Be comfortable with Python so you don't have to learn two things at once
- [x] Be resilient and always be willing to make an effort to learn
- [x] Know English, as the course is entirely in English
In 2021 I managed to finish the course, after completing the CS50X and Introduction to Web Development (CS50W) and I will tell you... it was INTENSE! :cold_sweat: :cold_sweat:
Following the CS50 tradition, CS50AI is difficult for those who have never had contact with the subject of AI, but with effort and dedication, you can finish it. In all courses, they aim to make you "comfortable with discomfort", that is:
Even if you feel helpless and confused when faced with a problem that you don't know how to solve immediately, the idea is that everything is fine and eventually you will be able to arrive at a solution, which is the representation of the day-to-day life of many programmers.
What will I learn in CS50AI?
The CS50AI is divided into 7 modules, which are the main areas in the field of AI:
Search: Finding a solution to a problem, such as a navigation program that needs to find the best route from source to destination
Knowledge: How to represent information and draw inferences from it
Uncertainty: How to handle events that have uncertainty using probability
Optimization: Finding not just the right way to solve a problem, but better ways, or the best way, to solve a problem
Learning: Improve performance by having access to data and past experience. For example, your email can differentiate spam from past experience.
Neural Networks: A structure inspired by the human brain that can efficiently perform tasks
Language: Process natural language, which is produced and understood by humans
All modules have a long and dense class, of about 1h30, which must be rewatched whenever there are doubts. Then there is a not-so-easy quiz on the topics covered and finally, one or two projects, which must be coded by the student and sent via Git to the course repository.
Each project is tested to verify that the student's code meets all requirements and is then approved or rejected. It is possible to resend a project as many times as necessary and whenever the project is disapproved, a small note of why it was rejected is also sent.
It's amazing to see how the CS50 team managed to give opportunities for all students, even those who are not paying for the certificate, to be able to code their projects and still receive feedback, even if limited. I noticed that many of the projects are corrected by humans, probably Harvard students, as it is not possible to automate certain assessments and the only way to check the final result is to watch a video recorded by the student, showing how the final solution behaves. I imagine the amount of work this must take and only a giant institution like Harvard can make it available worldwide for free to any student.
What is it like to take the course?
In short, the course is DIFFICULT. It's made for the elite American students, so it is blood, sweat and tears from beginning to end:under::under:
In the second project, the game of tic-tac-toe, I was stuck for a good few weeks, because my version was very slow and I wanted to implement a solution that made the AI to be more efficient and faster when making moves. It didn't help that I got confusing feedback about what was wrong with my code, something like "your AI's movement patterns are inconsistent". After taking a sabbatical from the course, I took a few days to rethink the problem and managed to move forward:grinning:
What is most required to complete the projects is time and dedication to completely understand the content shown in the video, in addition to reading the documentation in modules that introduced tools related to AI and also taking the time to research any errors and bugs that appear along the way.
What did I learn at the end of CS50AI?
What was very rewarding was going from a superficial view of what AI is to a very solid understanding of what an AI problem is, what kind of strategies can I use to solve a problem and what tools are available to help me.
The course demystified some myths, such as having to know a lot of Math or statistics to create a solution that uses AI, as there are already tools and frameworks that do most of the heavy lifting, such as neural networks already trained for certain tasks. The developer should see the problem from a more macro perspective: finding a problem to be solved, thinking about the best solution, connecting the parts and refining the process to have the best final result. Mathematics and statistics are important for the area, especially for those who do research and develop AI related tools, but it is also possible to use AI as a framework and not get involved with lower layers of abstraction, as when someone uses a web framework or a module that makes the developer's life easier: it is not necessary to understand what is behind it to be able to use and benefit from it.
The course introduces you to tools that are part of the toolkit that is commonly used to work with AI:
Scikit-learn: Machine Learning tool for data analysis
TensorFlow: Used to create neural networks capable of classifying images
NLTK: Tool to analyze human language
I was very proud of several projects that I managed to complete, in particular, three of them:
When I created an invincible tic-tac-toe player
When I created an AI that can play minesweeper
Final thoughts on the CS50AI
I recommend the course to everyone curious about AI, but never had the courage/opportunity/guidance to start studying it. It's an area with tough problems, many still unresolved, so don't expect a smooth, stress-free journey.
On the other hand, solutions that use AI leave non-technical persons and programmers awestruck. It's amazing to see behaviors that human beings deem to be "intelligent" being done by programs and electronic devices:alien::alien:
Only a small portion of the problems and potential areas of AI have been explored, which is an incredible opportunity for those who possess the knowledge, not only about training and building an AI but also identifying situations that could benefit from it! Imagine what could happen if all cameras could analyze images like humans or if computers could understand a person's mood from what they say and write.
Good journey and happy learning!:smiley: