Recently I often think about a problem, how to measure the ability of a programmer? As a front-end developer, from the perspective of front-end technology stack, the update iteration of application layer is very fast, which is easy to bring anxiety to front-end practitioners. For example, react, Vue framework has been upgraded, webpack has been upgraded to 5, etc. How should we face the influx of these new knowledge with ease?

Analysis and comparison of the Internet some bosses to the point of view is used in the technology stack into their own work, such as your current company is using a vue technology stack, so no matter how fire react, you don’t have to rush to go to study, but should be more research vue source, understand its design idea, etc., if you have spare capacity, interest, You can play React, but IN my opinion, there is one thing that this viewpoint fails to explain, that is, how to judge whether you are capable and what you are interested in. In fact, blindly following new technologies is mostly due to our anxiety about our technical ability, and we always think that if we know less, we will be defeated by others.

I think this anxiety stems from my lack of a clear understanding of what programmers are capable of, and I’ve been thinking about it for some time.

In my opinion, the ability of programmers is largely determined by their vision, depth, and ability to learn.

Horizon can also be understood as technical breadth, commonly known as seeing the world. That is, the professional knowledge and programming ideas and other aspects of the reserve, emphasis is a wide.

Depth refers to the depth of a technology with more knowledge, which is reflected in the understanding, thinking and control of details of a certain technology, emphasizing a depth.

Learning ability emphasizes the enthusiasm for learning professional knowledge and the comprehensive quality of the individual, and emphasizes a personal ability.

Vision also affects learning ability, because the more knowledge you have, the faster you will be able to pick up and understand new knowledge. That’s why you can pick up a new language when you already know it (grammar level).

The depth of technology should be selective and the choice comes from vision. The state of learning plays a crucial role in the depth of technology.

If you assume that a programmer is responsible for developing a more complex system, the three most important aspects of development can be measured by these three abilities:

  • The vision will control the complexity of the system in terms of technology selection
  • The level of depth will control the complexity of the system implementationally
  • The learning power (and vision of software engineering + system architecture) will control the complexity of the system over time

horizon

Vision can be interpreted as your knowledge store. What are the 18 techniques you use to solve different problems?

  1. Computer Fundamentals
    • Computer composition principle
    • The operating system
    • network
    • Data structures and algorithms
    • Database theory

This is the core skill of a programmer, and all of your application-layer capabilities are built on these foundations. If the foundation is not solid nature you want to pull up will be more suffering (I have personal experience ~ haha).

  1. A programming language

There are many kinds of programming languages, which can be divided into the following paradigms:

  • procedural
  • object-oriented
  • functional
  • The generic
  • Mixed etc.

For example, C: procedural Java: OOP Python: OOP+ functional JS: OOP+ functional TS: OOP+ Procedure + generic C++ SWIFT: Procedure + Object-oriented + generic

  1. Domain knowledge

Infrastructure + WEB solution

  1. The database

Relational: mysql, Oracle, non-relational: Redis, MongoDB, etc

  1. Design patterns – System design

Really important!!

  1. Software engineering

The depth of the

That is, the proficiency of tools, such as the programming language API details, the understanding of the underlying framework source code, and so on. The depth of technology is the research and investment in various fields based on vision. People’s energy is limited, so it is best to have in-depth research in one or two fields. In-depth research means studying the mechanism and underlying kernel principles (reading source code is a good way).

For the broad areas mentioned in the vision, particular emphasis should be placed on programming languages + architectural capabilities (design patterns)+ software engineering. These three competencies are the programmer competency model.

Learning ability

Need to have long-term goals, firm heart!