志闲少欲,心安不惧 泛中医论坛

A038 My Programming Learning Experience and Gains

Today, I had a conversation with a teacher about my programming learning experience. I took this opportunity to record and share it with students who are interested but find it difficult.

It all starts with interest (Freshman to Junior year)#

I don't remember when I started to become interested in programming, but there is no doubt that my learning is based on interest.

My initial dream was to create software that could run on everyone's phones and computers and achieve certain functionalities.

But the dream seemed too far away, and I didn't know where to start. So, I started with attending classes!

I didn't know what courses I needed to take to achieve this dream, so I just learned whatever I could. I learned Java, C++, Python, HTML, CSS, Linux, Git, and more through online courses, Bilibili (a Chinese video-sharing website), and various other resources (like Liao Xuefeng's website). I completed some courses, but I didn't finish others because they were too boring.

And then?

I felt lonely in my learning journey 😂. It felt like I was going nowhere and was far from being able to create software. So, I would sometimes give up and sometimes continue learning.

At that time, my learning habits were still like those of a high school student. The teacher would give a lecture, and I would take notes. For example, one of the few sets of notes I still have is about the Linux operating system.

![files/Pasted image 20231010085854.png]
![Pasted image 20231010085939.png]

I made a lot of notes like this, which made me look impressive. But in reality, when I opened the Linux system, I was completely lost and didn't know how to do anything.

![Pasted image 20231010090502.png]

(This is how the Linux server looks like, without even a desktop ⬆️)

In the past, after learning something, there would be exams, and I would study with the goal of getting good grades. At least I could get a score of 80 or 90, and it felt like I didn't waste my time. Now, my goal was to be able to write my own software, but learning felt the same as not learning at all. So, I wanted to give up. That's why I kept switching between learning and giving up before my junior year.

Oh, programming is so interesting, let's learn it.
Oh, it's boring to learn, let's stop.
Learn it.
Stop learning.

And so, I dragged on until my junior year, and I still didn't know much.

I said, you work hard in the gym, but it's not effective.

  • Ma Baoguo

Progress comes from practice (Junior to Senior year)#

During my junior year, I came across open-source software. Many of them had tutorials, and by following those tutorials, I could run some new things on my computer.

![Pasted image 20231010091847.png]
(For example, tutorials like this ⬆️)

At that time, I was obsessed with tools. Whenever I encountered something new, regardless of its usefulness, I would explore it first. I thought that if I found a powerful tool, I could conquer the world (now I realize how naive that thought was).

During this process, I installed a lot of open-source software on my computer and then started tinkering with Linux. I deployed various services on servers, and having a server that I could access anytime and anywhere was really convenient.
![Pasted image 20231010092325.png]

During this process, I gradually started using what I learned in the Linux course (the notes mentioned earlier). At first, I struggled with even basic tasks like copying and pasting files, but later on, I became proficient in various operations. In the beginning, I could solve many problems by referring to my notes, but later on, I relied more on search engines, GitHub, and the forums of open-source software to solve more complex problems.

During the winter break when the pandemic just started, we couldn't go back to school, and there were no physical textbooks to read. So, I organized an activity to share study materials. However, using WeChat, QQ groups, and cloud storage platforms was not very convenient. After some searching, I found an open-source file management project called dzzoffice, which could meet most of our needs. I started deploying and running it, and later on, I also deployed a forum (first using DiscuzQ and then using Discourse). These activities and projects earned me some reputation and made me a popular figure on campus.

These tools deployment and programming were not directly related. They only involved some Linux operations at most. But during this process, I gradually experienced a sense of satisfaction. Originally, to achieve certain functionalities, I would have to pay a lot of money, but now I could just deploy it myself!

And there was also a sense of accomplishment in "doing it yourself and being self-sufficient."

Such a cycle (Senior year to First year of graduate school)#

In the process mentioned above, I gained confidence and gradually gained a clearer understanding of my initial dream. It was a difficult thing to achieve, and it required a solid foundation. Professional programmers who can do full-stack development are like rare talents. I didn't have that much time to invest in it, so I gave up.

You have to give up something to gain something.

After giving up on learning everything, I gradually shifted my focus to the practical application of artificial intelligence (using AI to solve specific problems). The reason was still interest. At this point, my dream became broader: to liberate people through artificial intelligence.

Later on, I went back to the same learning pattern as before.

First, attend classes, but the knowledge would go in one ear and out the other.

Then, practice and search for solutions when encountering problems. This involved writing actual code, and I started using my own abilities to implement new functionalities in programs. During this period, I also did some other things, such as creating a web crawler and a podcast post-production tool. Although many functionalities were still not implemented, I made some contributions to the open-source community.

After my conversation with the teacher today, I started joining specific artificial intelligence projects. I think the significance of this is probably equivalent to when I first deployed a Linux project in my junior and senior years.


With the passage of time and the investment of energy, our understanding of things spirals upward. From complete ignorance to glimpses of understanding, to a general understanding, to a deep understanding, this process cannot be skipped. Programming is like this, traditional Chinese medicine is like this, and every profession is like this. My understanding of traditional Chinese medicine began to open up during the winter break after my senior year. Before that, I went through a similar process of accumulating knowledge over five years. At first, I knew nothing, then I gained some insights, then I had a sudden realization, and finally, I just laughed it off.

I hope that students who are interested in programming will continue to learn if they want to. If they can't make progress, they can take a break or talk to others. There will always be rewards for the effort we put in. Even if the results are not satisfactory, the process of putting in effort can still be fulfilling, which is better than spending a day feeling empty.

Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.