This is the 13th day of my participation in the First Challenge 2022

I always feel like I’m blindly learning some seemingly hot technology. React Native, Flutter, etc. I have a stack of introductory programming language books at home, Go, Erlang, c++, JavaScript and CSS.

I still can’t make head or tail of it. Why read so many introductory books when I don’t even have a clear grasp of the mainstream Python language? I don’t need them at all in my work or life. Just because I read in one article that Go is trending, Erlang is unrivaled in stability, you’ll never get rid of c++, etc. I’ve studied all these things, but I haven’t written a single line of useful code with them yet.

Believe a lot of children’s shoes have similar situation. The idea of a programmer learning a new technology is a great thing, better than a state of mind that doesn’t work, but it’s not necessarily better than standing still, because it’s not necessarily useful, and the technology is wasted.

Waste is something we do a lot in life. We want to buy more expensive phones because of the CPU power, but many people don’t necessarily need that power. Buying a workstation when all you need is a netbook to watch TV. We have a good reason: what if we need it one day? What if ONE day I need to play games? What if ONE day I want to render in 3D? The same is true for pursuing a new technology: if it catches on later, I’ll be ahead of my time.

This can happen if you study the new technology better than anyone else, otherwise the stronger ones will overtake you in a short time.

I think there are a few things I should do before learning a new skill:

What are your needs first? Python development will be your main focus for the next 3-5 years, so learn around this requirement. First of all, advanced features and engineering design ideas of Python are implemented in specific practices, which need to accumulate a lot of project experience. You can choose some side projects for practice. When you do it yourself, you should also refer to excellent open source frameworks to see how others have designed and implemented it.

You need to understand web principles. Like HTTP protocol, TCP/IP protocol need to master, so as to stand in a more basic level to develop, not in the Internet to find a few sets of solutions can make a good system. After reading basic classic books, learn to use the packet capture tool to analyze traffic direction and locate problems.

Performance optimization is required. To master various algorithms and data structures, know the application scenarios and complexity of common algorithms. The way to learn the basics of algorithms is to look at python’s various built-in functions and see how well they perform, and how well you write code.

Performance also requires knowledge of concurrency and asynchrony. These things are often operational level, can be familiar with the multi-process, multi-threading and coroutines in Python applications, message queues and other asynchronous operations to achieve, but sooner or later, the operating system is how to conduct resource scheduling, “Understanding Computer Systems” should take a look.

In this process, you should also read “Refactoring” and “The Programmer’s Way” and other methodological books, and try to form your own coding and improvement system.

In the work should try to avoid the problem is standing still, Google programming, the search of a set of programs next time or do not know, a few years are repeated things. Blindly pursuing new technology and working overtime to fix bugs are traps that the technology field is trying to avoid. They look like they are working hard, but actually they are staying put.

Learning should have a purpose, not to look at the fire to learn which. When I was a child, I learned to pick up the sesame and lose the watermelon text. Now I keep repeating the same mistake, learning this and learning that, and finally I have not done a good job in my real major. The exploration of a technology will eventually fall to the basics of compilation principles, operating systems, algorithms and data structures. It should not be difficult to learn another skill if you have learned one skill well and really put it into practice.

Focus on your own direction once you’ve determined it, and spend a small amount of time looking at new technologies, their application areas and simple implementations. Like to play mobile phone does not represent the mobile phone of every brand to buy to come back everyday use, that is the job that professional evaluation division does, our train of thought is to buy a brand to be main force machine, one to be standby machine, other occasionally go to store to feel it is ok.

The technology selection of the project should also follow the principle of demand-centered. Why use the popular language Go if it’s not a highly concurrent project? How about a quick implementation in Python? There are a few people on the technical team who know the language. Is it easy to recruit? How long does it take to train existing staff? Do I have to use microservices? Do I have to use Docker? A lot of it is unnecessary! Just a trap they dug for themselves, pushing the whole team into it.

Then there’s the question of how to do it. If you want to suddenly learn very boring and the underlying operating system principles, will certainly be a black eye. Switching suddenly from Windows to Linux can also be unsettling. One solution that works well is incremental change. ‘If a restaurant’s tastes remain the same for decades, it will inevitably close,’ he Caitou wrote in an article. Those who say that they adhere to the same or products are often quietly change, their change is so small, so that you never notice, how many years since, WeChat add the function of many small, many are hidden under the UI, we found a little like a treasure hunt, with accustomed to feel they were designed from the beginning.

To learn the operating system does not have to be heart and soul to conquer every knowledge point, in the work of the contact with multi-threading, first look at the thread consumption, lock mechanism and semaphore line? Little by little, a little better every day. People tend to overestimate short-term ability and underestimate long-term ability, which is caused by the limitation of thinking and vision.

Study is a very methodological thing, blind study is not ok. It’s all about the college entrance examination. Why do those students who seem to work hard get average grades, while those who play basketball and date every day are admitted to Tsinghua university and Peking University? IQ is one aspect, but I still do not believe that gaokao can reach the limit of the average human IQ, estimation method is more important aspect.

I think the topic of learning is very interesting. The main points are: step by step, escape from the comfort zone, and repeat basic training. The most important thing is to form the whole system and thinking, otherwise the knowledge learned is not their own.