It’s hard to believe that I will soon graduate from university. Although I have learned (and struggled with) quite a lot during my time at university, I still feel that I need to improve and keep working hard.
I have a few thoughts about the future, and I will write them down at this moment to motivate myself.
Keep Learning Technology
From the first time I encountered computers learning C language until now with C++, I have encountered many, many pitfalls.
C++ is a very “complex” and also very comprehensive language. C++ supports multiple development paradigms, including procedural, object-oriented, functional, generic, and metaprogramming styles. Additionally, C++ has a vast number of syntax features, which often leads learners to struggle; while others can quickly write applications in Java and Python, you might still be tangled in syntax and undefined behavior with C++. One of C++’s design philosophies is to not limit the programmer’s behavior, which results in a plethora of undefined behaviors. Furthermore, the standards do not explicitly define how a particular technology or language feature should be implemented in a specific environment, relying instead on the compiler developers. This often leads to situations where code runs in one environment but fails in another. The differentiation of C++ compilers is also significant, with varying levels of support for the standard; the most challenging part is unifying warning handling across different platforms, which can be quite frustrating.
C++ is currently in a rather difficult situation. If pure runtime efficiency is pursued, we have C and assembly, while development efficiency is inferior to Java/PHP/Python, etc. After analysis, I found that C++ is mainly applicable in areas such as game engines, search engines, server-side programming, high-frequency trading, and emerging VR technology. In these areas, C++ offers a compromise, providing higher development efficiency than C while maintaining performance.
Learning a programming language cannot be limited to just the syntax; many things must be learned in conjunction. For instance, operating systems, data structures and algorithms, as well as network protocols, and of course, the usage of various libraries.
In the next one or two years, my plan is to focus on systematically learning the TCP/IP protocol and network programming under UNIX. The main reference materials will be TCP/IP Illustrated
, APUE
, and UNP
(the latter two are nearly 800-page volumes). I plan to spend about a year to accomplish this goal, while also reading Linux Multithreaded Server Programming: Using muduo C++ Network Library
to validate my understanding. This part will require a significant amount of time; persistence is key!
I also aim to rewrite the STL to enhance my knowledge of C++ language, data structures, and algorithms; the specific reference will be STL Source Code Analysis
. Meanwhile, I will review operating systems along with data structures and algorithms.
Maintain Current Habits
During this period, I reflected on my university life, realizing that my poor learning efficiency stemmed from a lack of good habits and not persisting with certain tasks; knowing is easy, but doing is hard.
My biggest realization now is “Many things do not have shortcuts; often, pursuing shortcuts is already leading you down the wrong path.“ Therefore, when learning, do not be too concerned about whether it’s worth it; everything you learn becomes part of you. Commit to reading a book and stick to it. Engaging with it, practicing it, is always better than being indecisive and hesitant.
Do not become someone who “understands many profound principles but still fails to live well.“ So once you have a goal, be sure to persist.
I now exercise every day, running (5km+)/exercising. I initially did not plan to lose weight; I just wanted to consistently do one thing every day without interruption. Surprisingly, my weight has dropped significantly as a result; I suppose this is an outcome of persistence. :)
Maintaining my current lifestyle habits is crucial, and even when I start working, I must continue to learn to see a bigger world!
Break Away from Student Mindset
Having been in school for over a decade, I have subconsciously accustomed myself to the absolute authority of teachers and having guides throughout my academic life. However, after graduating from university, that will no longer be the case (actually, I think it has already changed after entering university).
In school, doing something often leads to corresponding results, but outside of school, many efforts can go unrecognized, and hard work does not always guarantee outcomes. The reason for acting is no longer based on “the teacher said”—everything must rely on your judgment. The most important aspects are choice and perseverance. Persistently doing every task around you, if you cannot handle small tasks well, how can you manage big ones?!
Standing at a crossroads in life, I am uncertain where I will be in a year or several years, what kind of work I will be doing, or what kind of people I will meet. However, I have confidence; as long as I follow my heart, I will eventually achieve my goals.