The title of “Full Stack engineer” is still rarely heard in China, but it has become very popular in the United States. Considering the job requirements of Facebook, Twitter and Amazon, there are quite a lot of positions written “Full Stack Enginner”, or “Full Stack engineer”. So what kind of programmer is a full stack engineer?

We need to understand the concept of “stack” first. In the programming industry, stack refers to the amount and level of skill a programmer or software engineer has. Today’s development efforts are generally divided into front-end, back-end, and mobile. On the other hand, full stack means a programmer who knows all the knowledge and technology of development side, but also some knowledge of operation, product and marketing, as well as big data processing, machine learning, blockchain, etc. So how did this trend develop? As software technology and cloud computing services become more and more mature, it is easier to develop a product, we can learn a new technology in a shorter time, and then use this technology to develop the desired results more quickly. As a result, the cost of learning and development has fallen, making it more difficult for programmers to use one technology or one application, such as back-end engineers learning front-end and mobile development.

The reason why full-stack engineer is so popular in the United States is that the more thorough programmers themselves understand programming language and architecture knowledge and other soft power such as product, operation and maintenance, the easier it is to develop products that are easy to maintain, scalable, high-performance and in line with user habits. Programming languages are just tools, and as we add more tools to our toolbox, we think about which tools to use to solve which kinds of problems. For example, to solve the problem of high concurrency, we may choose node.js-based back-end JavaScript development, because it is non-blocking I/O and event-driven programming model, can use fewer threads to process more business, thus reducing the overhead of system resources. For a large distributed system, we can use different programming languages to achieve different functional modules, some need real-time processing using Node.js, and need multi-threaded operation we use GO, high security requirements we use Java. The more knowledge a person has, the more thoughtful he or she will be about the big picture of software, so companies are looking for this kind of talent.

So as an ordinary programmer, how should we improve ourselves to become a full stack engineer? We can expand from the existing technology stack. For example, we are currently doing back-end development, and we are more or less familiar with HTML, CSS and client-side JavaScript to write some interfaces. Then we can learn Vue. Because are using the same JavsScript syntax, so it is not very difficult to learn, although many front-end libraries, but are relatively easy to master. For mobile terminals, if you know Java, you can learn Android. For IOS, it is not difficult to learn Swift if you have basic programming language knowledge, and even if you don’t know JavaScript, you can use React Native for IOS and Android development, and the same language can be shared between the two platforms. And the performance is close to native. Operation and maintenance can look at the popular Docker, Spring Cloud, and Kubernetes, in fact, are almost the same, but need to configure a lot of parameters, this only when the actual use can get the best solution, so there is basically no learning cost, just use when you know where to check the configuration.

Become a universal whole stack engineer may sacrifice some depth, the details of capability, but get is a breadth of knowledge, rich reserves, scalable, can cultivate talents, so the company is so long for this kind of programmers, we should do is to prepare as soon as possible, to exercise myself as both the macroscopic control ability, and excellent engineers with the ability to delve into details.