A038 My Programming Learning Experience and Gains

Today I chatted with a teacher about my programming learning experience, and I took the opportunity to record it and share it with fellow students who are interested but find it daunting.

Everything Starts From Interest (Freshman to Junior Year)

I don’t even remember when I first became interested in programming, but there’s no doubt my learning was driven by interest.

My original dream was to create a piece of software that could run on everyone’s phones and computers and achieve XXX functionality.

But the dream was too far away, and I didn’t know where to start. So, I decided to start from classes!

I didn’t know what classes I needed to take to realize this dream, so I learned whatever I could through online courses, Bilibili, and various miscellaneous resources (such as the Liao Xuefeng website). I studied Java, C++, Python, HTML, CSS, Linux, Git, and so on. Some courses I finished, others were too boring to complete.

Then what?

I ended up learning in vain :joy:, feeling like I was treading water and miles away from being able to make a software, so I kept starting and stopping repeatedly.

At that time, my learning habits were still those of a high school student: the teacher lectured, and I took notes. For example, one of the few study notes I still keep today is on the Linux operating system.

files/Pasted image 20231010085854.png
Pasted image 20231010085939.png

After learning like this, I indeed made a lot of notes, which look impressive, but when I actually opened the Linux system, it was all black box and I still didn’t know what to do.

Pasted image 20231010090502.png

(The Linux server looks like this when opened — no desktop at all :up_arrow:)

Before, after learning something, there would be exams. Studying for a grade, at least I could get an 80-90 score, so it felt worthwhile. But now, with the goal of being able to write software by myself, what I learned felt like nothing, so I really wanted to give up. That’s why I kept jumping back and forth before junior year.

Oh, programming is so interesting, let me study a bit.
Ah, it’s so boring, I give up.
Study a bit,
Give up,

Draggged on until junior year, I basically still didn’t know anything.

If I tell you to train hard at the gym, it won’t be useful.
— Ma Baoguo

Progress Comes from Practice (Junior to Senior Year)

In junior year, I got into open source software. There were many tutorials, and following them, I could run some cool stuff on my computer.

Pasted image 20231010091847.png
(Like this kind of tutorial :up_arrow:)

At that time, I was still a tool worshiper—whenever I encountered something new, whether useful or not, I’d tinker with it, thinking if I could find a “dragon-slaying sword,” I’d be unbeatable (looking back, this was very naive).

In this process, I first installed lots of open source software on my computer, then started messing with Linux, deploying various services on servers. Having a server accessible online at any time was really amazing.

Pasted image 20231010092325.png

Along the way, I gradually applied what I learned in the Linux class (i.e., the notes above). At first, I was clumsy even copying and pasting files; later, I handled all kinds of operations deftly. Initially, many problems were solved by flipping through my notes; later, more problems were solved through search engines, GitHub, open source software forums, etc.

During the first winter break when the pandemic began, everyone couldn’t go back to school. Without physical textbooks, I had to find electronic versions everywhere. So, I organized a resource-sharing activity. But WeChat groups, QQ groups, and cloud drives were inconvenient. After some searching, I found an open source file management project, dzzoffice, which met most needs, so I began deploying and running it. Later, I also deployed forums (first using DiscuzQ, then Discourse). These activities and projects earned me some reputation, making me a local celebrity on campus.

These tool deployments and programming were basically unrelated, mostly involving some Linux operations. But during this process, I gradually experienced a sense of joy—something that originally required spending a lot of money was now handled by myself via deployment!

As well as a “DIY, self-sufficient” sense of achievement.

The Cycle Continues (Senior Year to First Year Graduate)

During this process, I gained confidence and gradually had a clearer understanding of my original dream—it’s a very difficult thing to accomplish. To achieve it, you need a lot of basics. Professional programmers trained formally, full-stack developers are rare talents, and I don’t have that much time. So I gave up.

To gain something, you must give up something.

After giving up learning everything, I slowly shifted my focus to practical Artificial Intelligence (using AI to solve specific problems). The reason? Still interest. At this point, my dream was broader: to liberate humans through AI.

Later, I learned just like at the start:

First attending classes, hearing everything but not really absorbing.

Then hands-on practice, solving problems by searching. At this time, it involved actual code, really starting to use my own ability to make programs achieve some new functions. During this time, I also did some other things, like making a web scraper and a podcast post-production assistant tool. Although many functions haven’t been implemented yet, it counts as some contribution to the open source community.

After talking with that teacher today, I started joining a concrete AI project. I think its significance is roughly equivalent to the first time I deployed a Linux project back in junior and senior year.

Reflection

Over time and with investment of effort, our cognition of things rises spirally. From utter ignorance, to a glimpse through a small window, to a rough understanding, to knowing it fully in your heart. This process can’t be skipped. Programming is like this, traditional Chinese medicine is like this, every profession is like this. My own understanding of Chinese medicine began to open up during my senior year graduation break. The preceding five years of accumulation also went through this process: starting with nothing, then some insight, then sudden enlightenment, then calm understanding.

I hope students interested in programming keep learning if they want to, take breaks if you feel stuck, talk to others if you lack direction. Effort will always pay off. At worst, the process itself is fulfilling, which is better than feeling empty after a day of playing around.

From :speaking_head:闲聊 to :loudspeaker:官方小喇叭

Recommend a Python course; this is how I started learning.