I believe the experience of TA at Tsinghua University is one of the most unforgettable experiences in my whole life. I was the TA for two courses: Linear Algebra and Data Structures. In this blog, I will focus on some highlights when I was the TA for Algorithm and Data Structure of EE department, Tsinghua.
I build the platform that can automatically judge each student’s homework. It can not only help student test their code, increase grading efficiency but also it is a good opportunity to work with someone that I am really happy to collaborate. And it is so wonderful that the person who builds the platform with me is just a student who took this course when I was the TA for the first time.
Every student knows Fibonacci Sequence. In 2013, I submitted a problem to ask student calculate the nth Fibonacci Number. To avoid integer overflow, students were asked to print the answer mod some primes: .
Students had to use algorithm to pass all tests. And I found a smart student’ code. He just printed the results directly since the Fibonacci Sequence becomes periodical after module.
I asked him how he found out the period. He just got the period by brute force. So I was very curious that given , can we find a closed formula to determine the period of moduled Fibonacci Sequence(It is obvious that it is periodical)?
I tried myself but failed to find a solution. So I asked Yanjun Han who took the course in 2012 to help me find the solution. (Yanjun Han is famous in EE, https://www.zhihu.com/question/26449885). After about several hours, he showed me a paper of solutions for this problem(He told me he finished this problem with some search on the Internet).
That was my happiest time and that is why I love to be the TA because I can always meet damn smart persons. And after several years, when I finished some chapters of Concrete Mathematics, I could found the solution myself.
In 2013, Four students and me set up a group and we ourselves called it “EE Hackers”. We kept on sharing programming knowledge with each other and did some projects. One of the most important events was talks on Concrete Mathematics. Every Friday night, I talked about Concrete Mathematics for them and got nice feedback. I bought many original books to send them as gifts. We often got together to have a big meal(I paid the bill often).
Several years passed, I believe that experience is perfect for each of us. And we are still in close touch. I am looking forward to meeting more students who love programming.
Importance of Data Structure and Algorithms
Talk is cheap, show me your code. —— Linus. https://lkml.org/lkml/2000/8/25/132
Programming skills are always important for us. The only way to improve your coding skills is to write code and debug code and read the code. And a good knowledge of your system and language is very helpful.
I’m aware that many students don’t see the importance of a mathematical approach to CS. The feeling is, just let me near a keyboard and let me code. It’s quite common. —— Jeffrey Ullman
This sentence is found in Prof. Jeffrey Ullman’s course Automata. It tells us that we should know the importance of a mathematical approach to programming.
I think this course is a good chance to formally study the right way of learning programming. For each algorithm and data structure, we should try our best to understand the math model and the analysis. Without deep knowledge of the math model and the proof of the model and algorithms, we are missing the highlights of this course.
Code is cheap, show me your proof.
And I have another person who could show us the importance of the knowledge you can learn from this course. I paste some content about Guy Steele(Computer Scientist who built the language Java and Common Lisp, Scheme …) from the book Coders at Work:
One of my friends once asked me what does it do for you to read TAOCP? And immediately Dr. Guy Steele’s words came to my mind.