For the sake of smoother writing, this article does not use an honorific such as “Professor Yin Wang”. I will simply refer to him by name: “Yin Wang”.
About two months ago, I enrolled in Yin Wang’s Computer Science Video Course (the foundation course). I graduated after about one month of study, with roughly 120 hours of total learning time. That figure of “120 hours” is a serious estimate that includes both watching the videos and doing the exercises. Because the pace of the video course is self-directed and graduation speed varies from person to person, describing it as “one month” is not very intuitive. Hours are easier to understand. 120 hours means that if you study 2 hours a day, it would take 60 days.
Yin Wang does not know me, but I have known of him for a long time. I was not his student in the past, but he had already been my teacher long before that. I have followed his blog for many years and benefited greatly from his articles. This time, after studying his course systematically, it felt like opening the door to a new world. That is not an exaggeration. I can responsibly say, from the standpoint of someone who actually completed the course, that Yin Wang is not bluffing. His course really is as good as he says it is. You may disagree with his views, or dislike his attitude toward life, but it is impossible to doubt his level of research in computer science, especially in programming languages. And there is absolutely no need to worry that someone as serious with himself and with the world as Yin Wang would try to fool people with a course that has no real substance.
Now that I have had half a month after graduation to let things settle, I want to share something about the question, “What can you actually learn from the course?” I did not write a summary on the day I graduated because I was worried I might be too restless to summarize it properly, or that I might mix in too much of my personal experience. In truth, even half a month is still not enough. I have not had much time to review, and the course is still far from producing all the results it should eventually produce. But writing a summary now does not prevent me from gaining deeper insight into the course later. Yin Wang once wrote an article called “Einstein on Education”, in which he mentioned Einstein’s idea that “the knowledge imparted should be received as a precious gift.” After finishing the course, I happened to come across that article again, and this time I suddenly understood that sentence in a concrete way.
Because the course content is confidential, I will not reveal the specific material taught in it. I will only explain things based on the publicly available enrollment description. For a beginner in computer science, the most direct knowledge you can gain from the course includes fundamental programming concepts such as functions, linked lists, and binary trees. The content covers the entire span of a typical undergraduate curriculum. The part about interpreters in Lesson 6 is the “final achievement” of the course, roughly corresponding to the level of upper-year undergraduates or early master’s students at some top universities in the United States. Then why does Yin Wang describe it in the enrollment material as “content that you might only encounter at the doctoral stage in university”? Because universities in China do not have programming languages as a dedicated discipline. Undergraduate courses do not teach interpreters, and even at the graduate level, lambda calculus is usually just an elective. So it is entirely normal for people to encounter interpreter implementation only in the early PhD stage. Yin Wang’s description really is not exaggerated.
Material like interpreters is already rare in the Chinese educational system, and high-quality, concise tutorials are even rarer. For example, once you finish Yin Wang’s course and then search on Bilibili for tutorials about interpreters, you immediately understand how poor those public tutorials are. You can instantly see what essential pieces they are missing, what problems they have, how they could be improved, and how to write a more reliable implementation with the simplest possible code. Why are interpreters important? Consider Ethereum’s virtual machine, the EVM. It is an interpreter too, except that it does not interpret a programming language; it interprets Ethereum opcodes, where each opcode corresponds to an action on a stack structure. So after learning interpreters, you end up understanding the EVM very differently.
For students who already have a background in computer science, what the course provides is not just surface-level knowledge. For example, the course uses only a very small set of programming constructs to express everything from Lesson 1 through Lesson 6. If Yin Wang did not have an extremely deep understanding of computer science theory, it would be impossible for him to explain things at that level of simplicity and depth. From the learner’s side, one thing to think about is why the course content can be so refined: what is the organizing logic behind it, and what kind of foundation is required to support that level of abstraction? Another point is that the content is self-contained enough that a learner could realistically reconstruct the whole course on their own. It becomes like a finely crafted object in your hand, something you can take out and revisit at any time.
Recently, when Yin Wang commented on AI programming on Weibo, he said that AI cannot write code at “Yin Wang level”. What is “Yin Wang level” code? Once you have taken the course, you know. While doing the exercises, the issue teaching assistants reminded me of most often was that my “code was too complex”. Sometimes the problem was complexity in style, and sometimes it was computational complexity. But every time I rewrote the code until it met the course standard, I could not help feeling amazed that code could actually be that elegant. I already had many years of programming experience, so it was not hard for me to get the exercises to produce the right output. What was hard was making the code beautiful enough. If the code I had written for companies in the past had been at that level of quality, those companies would really have been getting a bargain.
And that is still not all. Some people may read the enrollment description and wonder whether a single elective course can really teach someone a new programming language. My reminder is simple: do not forget who is teaching you. This is a genuine expert in programming languages.