Recently, ONES has been recognized by more than a dozen authoritative media such as 36 Krypton, 21st Century Business Review, Entrepreneur State, and Titanium Media.
Based on ONES' outstanding technical capabilities, on the evening of December 22, the IT-oriented knowledge platform "Geek Time" contacted ONES co-founder and CTO Feng Bin to discuss the topic of "From front-line engineer to quasi-unicorn CTO" Communication, with a particular focus on the mindset and methods of lifelong learning.
The following is part of Feng Bin's live broadcast.
exercise basic skills
After graduating from university in 2008, I joined Kingsoft Software. For a while, my technology stack was mainly at the Java layer, and I was doing the backend of Java, mainly related to data analysis and automation. At that time, there was an internal entrepreneurial project in Kingsoft Duba, which was mainly related to the mobile terminal. I wanted to experience the new technology of the mobile Internet, so I participated and started to develop on Android. This product was called "Kingshan Mobile Guard" at the time, and it mainly focused on functions related to cleaning and system optimization.
From 2008 to 2011, during the three years of working in Jinshan, I have acquired a solid basic skill. Because I mainly used the Java language at the time, many programming concepts in Java taught me how to analyze things clearly. Moreover, my colleagues and mentors around me at the time had all participated in the development of WPS before, and their C++ programming skills were very strong, including how to abstract object-oriented programming, how to isolate complexity, and so on.
I have such a strong technical talent around me. Under the influence of my eyes and ears, my entire programming habits, understanding of language, and understanding of technology have all laid a good foundation during that time.
Even when I did some related architectures later, I went back to find my former colleagues, or recalled many points of view discussed at that time. After more than ten years, I still found a lot of bright spots and values.
As a first-line programmer, the accumulation of basic skills runs through my career. My basic skills have been rapidly accumulated in the past two or three years, which is very important for later growth.
Pursuit of flow state
After working for two or three years, I encountered a bottleneck in learning. In half a year, my technology seems to have not improved much. At this point, I began to feel that I had to set a goal. This goal must be in a state that can be decomposed and disassembled.
For example, if you want to become an architect, then the abilities you need to have to become an architect are divided into eight items, each of which may be divided into some sub-items, and these sub-items may eventually point to some An article, or a certain book, a certain content, a certain column. In this way, the goal is an executable state.
After setting a goal, the reason why I can persevere is often because of interest. I think that interest can be created, and the process of creation is more of a search process.
When driven by interest, you forget about time, which is a state of flow. When you forget the time and you can skip meals, you are the most persistent and your concentration is the most concentrated. Therefore, you must find a way to enter your flow state.
Everyone must have this state, at least when they are playing games, and it is already night before they know it, right? Then when we are working and studying, what content can make us enter the flow state, maybe everyone is different, we need to find our own flow state. Once you have a flow state, you can persist for a long time. The role of goals is to allow us to take a long-term view and continue to move more in the relatively correct direction, but the focus in the process of achieving goals depends on flow.
learn from the bottom
When you become familiar with a technology, it is not the end of learning, but the beginning of another. No matter how sharp a weapon is, it will gradually passivate over time. When it comes to the software development industry itself, every 7 to 8 years, the programming platforms, corresponding technologies, hardware, and user scenarios that software engineers face will be very different. A technology stack has its own strengths and limitations. The specific popular technology is likely to change constantly. This is the direct reason why engineers often say that "technology expires quickly" and "needs continuous learning". But when we think about these changes carefully, many of them are the underlying logic that has remained unchanged for decades. This knowledge is also called "basic skills" or "computer basics".
In more than ten years of work experience, when interviewing or developing a team, I often hear such a study plan: "I am more familiar with language A now, and I plan to learn language B to broaden my technical horizons." In my opinion, this approach is relatively inefficient. After you are proficient in a technology, there are only two kinds of knowledge you should learn next: one is to significantly improve your work efficiency, for example, from Objective-C To Swift; the other is lower-level knowledge than the current level, such as basic skills such as algorithms, network protocols, operating systems, and database principles that have been used for decades. The latter is where you spend most of your time, because the specific refinement of the application layer is generally relatively clear and can be learned and used.
If the language you currently master is not a relatively imperfect language like Javascript ES5, then the next language you should learn is C/C++, not to learn its syntax itself, but to understand the underlying computer system through it design.
The reason why the underlying knowledge of computers is outdated for decades is that the basic problems that need to be solved in the computing process have not changed (in the foreseeable future, the quantum computing scenario may greatly update the underlying methods of computing), for example, when everyone goes deep When learning about in-memory concurrency models and distributed systems, you will find that there are many similarities between this and the scenario of CPU multi-core collaboration.
Three Stages of Learning: Keeping, Breaking, and Leaving
After roughly knowing the whole of a certain field, the next step is how to learn and internalize it as one's own ability, which is also what we often call "learning ability". The concept of "Shou Po Li" comes from the Japanese kendo learning method, which summarizes the general laws of learning well.
Shou: Imitate and learn the specific practices of the existing system. For beginners, by imitating the existing system and existing successful experience, you can quickly improve your ability. During this process, you must be calm and focused, save your new ideas first, understand and familiarize yourself with the entire system, and then make innovations.
Break: Make innovations in the current system according to the actual situation. At this stage, you are already familiar with the system and have enough practical experience, and you are more and more able to understand the principles behind the system. At this time, according to the actual scenario, you should think about the shortcomings of the existing system, and make innovations and improvements. In their daily work, they often borrow some details from other systems to improve the current system, keep trying, get feedback, and accumulate new knowledge.
Leaving: Get out of the form, deeply understand the underlying principles, and create a new system when necessary. In an ever-changing environment, it is difficult to maintain the best results for the specific practices of the current system, but the shelf life of the principles behind them is much longer, just like the relationship between Scrum and agile principles, programming languages and programming paradigms, etc. At this time, the new practice can be integrated with the existing various systems to become a new system.
From experience, we often encounter two misunderstandings in learning: either stop at the "guarding" stage, or skip the "guarding" stage, spend a lot of time practicing our own ideas, and step on what our predecessors have already stepped on. The pit, and the effect is not good.
Find your 80 points
I divided the whole learning process into three areas. The first area is the "comfort zone", that is, some of the content we have already understood, and it is not difficult to learn; the second area is called the "panic zone". Neither of these two areas can allow us to gain knowledge. We must enter the "learning area".
So, what is a "learning zone"?
For example, I give my daughter who is in elementary school a test. If she can achieve 100 points at any time, she will feel very comfortable. When I ask her to do the same test again, she will feel bored. This is the so-called "comfort zone". ".
And if the test I gave her, she can only do 60 points, she will not accept it at all, which makes her enter the "panic zone".
So, if her test score is around 80 points, in this case, she will be willing to look at the wrong questions. Because most of the questions she did right, and a small number of them were wrong, she could be encouraged to continue doing well, which made her study in a relatively balanced state, which can be called a "learning zone".
So, in the process of learning, I think everyone has to find their own 80 points. When you understand some content, you are willing to read it, and at the same time, you may encounter some unfamiliar things in the process of reading, so that you can continue to study.
Moreover, it is necessary to find a "learning zone" in one's own interests in order to cultivate it. This process is a state of being encouraged while encountering setbacks. For example, if you think it is too difficult to read "TCP/IP Detailed Explanation", you might as well put it aside and change to a "Illustrated TCP/IP". The pictures in it are very vivid and can help us adjust to the state of the "learning area". .
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。