Learning and Personal Planning
I often receive emails from enthusiastic friends discussing learning, technology, and future planning. Unfortunately, I’m often too busy to reply much, and I feel bad about it.
Yesterday a friend sent me an email. Today I finally took half an hour to write a reply. Below are the original email and my response — they reflect some of my usual thoughts and are somewhat representative. I hope they can be helpful to more friends.
On 2/20/06, [email protected] wrote:
Hello He Zongjian,
We met on the 19th floor of Microsoft. It was during the lecture organized by Zhucheng Technology where you spoke about Windows Mobile. I’m a colleague of XXX. I don’t know if you remember me.
Sometimes I visit your blog to learn something fresh.
We should be students of the same year. I’ve been working for a year and a half now. I feel I’ve hit a bottleneck, and it’s been going on for quite a while. From about half a year into the job, I started reading voraciously, but now I feel that just reading books isn’t helping much anymore. Since around last June, I don’t feel I’ve improved much. I’m now studying English at Only, hoping that in half a year I can jump into a foreign company (IBM, Intel, Microsoft — top-tier companies) for a higher starting point and new challenges.
We program with MFC. At work, I started with APIs everywhere, then had trouble understanding interfaces, then got familiar. Then I voraciously read C++ books, starting from the basics — function definitions, data definitions, class inheritance. At that time I felt C++ was just compiler support; everything in my view was about compilers. Later I realized everything is done by the operating system. A process is like a kite string — it can go as far as your program allows. Suddenly I felt the OS was truly magnificent. After reading your blog, I started thinking: what is an OS, really? What does it mean to launch an OS? Now I’m looking at BIOS, boot loaders. I feel I’m progressing — my awareness keeps rising and changing. Though at each stage I might only know the general idea, or just a concept. Maybe many people complete these steps in university.
I’m similar to you — a career changer. I originally studied electrical automation but was more interested in computers. In my junior year, I joined the school’s RoboCup team (robot soccer). Worked there for a year, then represented Shanghai University at a competition in Beijing during the summer of my junior year. Unfortunately we lost. I remember Tongji went that year too and did well. Anyway, I’ve digressed.
After graduation, I found a job. Earlier this year, the company asked everyone to write plans. I revisited mine today and realized it reflects my bottleneck and current level. I’ll paste it below.
Hope to get training, advanced trainer training.
- About C++/OOP thinking
- About Windows Programming (not long-winded, but simple, concise, targeted)
- About the MFC system and others — deepen understanding from a macro perspective to avoid unexplained I-SYNC crashes
- Systematic and targeted explanation of PC-peripheral communication systems (software + hardware). From the PC side: drivers, system management, interrupts. From the peripheral side: interfaces, communication flow, system management. From the intercommunication perspective: parameters, common issues and solutions.
I can tell you have broad knowledge — not flattering you, but comparing to myself. I’d like to ask for your advice. In terms of learning, you could be my teacher.
XXX 2006/02/20
I’ve been busy with miscellaneous things and didn’t reply in time — please forgive me.
I think what’s closely related to current learning is personal planning. Different plans naturally require different learning content. When you’re undistracted, ask yourself: What do I want to be in ten or twenty years? If you can answer this quickly and clearly, you already have a美好 blueprint for the future. That’s your goal. Even if it seems very far away and unrealistic now, as long as you have a goal and slowly move toward it, it will get closer. If you can’t answer the question, maybe you should consider whether your current learning is盲目.
We live in an age of knowledge explosion. In the computer industry, even just software, I feel it’s impossible for one person to know everything. Just because something is popular doesn’t mean you must learn it (AJAX, Ruby on Rails…), and knowing lower-level details doesn’t necessarily help your future development (applications sit on OS, compilers, architecture, hardware, circuits, electrical engineering, molecules, atoms, electrons…). So I think it’s necessary to plan your future, clearly define the knowledge structure for your desired role, then identify gaps and learn accordingly. That’s the better approach.
For work, both big and small companies have pros and cons. MS, IBM, or Google aren’t necessarily everyone’s final destination. From my personal experience, one thing to note: after working for a while, it’s good to take some time to summarize, look back at your work experience from an “outsider’s” perspective, and ask yourself “What did I gain? What did I lose? What did I do well? What did I do poorly?” — often, breakthroughs and qualitative changes happen at these moments. If you’re busy every single day, time will just fly by quickly…
For software engineers, I think this profession values experience and积累. So an outstanding software engineer should pay great attention to daily accumulation: coding is accumulation, listening to or giving lectures is accumulation, maintaining a certain amount of reading is accumulation, communicating with others is accumulation. In short, don’t waste time. Accumulate bit by bit — quantitative change inevitably leads to qualitative change.
I can only write this much — I have my own work to do. I haven’t discussed any specific technology. It’s hard to explain clearly in an email. Face-to-face communication might be better.
Wish you success at work.