How to become an excellent Full Stack Engineer
I received some short messages, mostly from the newcomers who have just graduated and just stepped into the workplace. Most of the questions asked are how to choose a career direction, how to become a good software engineer, and how to quickly improve their skills. While replying to one by one, I can’t help but want to combine my own experiences and talk about how to become a good full-stack engineer.
What is a full stack engineer?
The term full-stack engineer first appeared in an article by Facebook engineer Calos Bueno — Full Stack . He defines a full-stack engineer as a technical generalist with a deep understanding of performance impact. Since then, the word “ full stack “ has become popular. I have seen full stack engineers, full stack designers, full stack operations, full stack marketing staff and so on. On the recruitment websites for Internet talents such as “Looking” and “100Offer”, the full stack of engineers has become a hot recruiting position, and its salary level is higher than the average development engineer position. So, what is a full stack engineer, and how should we define a full stack engineer?
Baidu Encyclopedia defines the full stack engineer as follows: “People who master multiple skills and can use multiple skills to complete the product independently.” I think this definition is not comprehensive enough. I think the full stack engineer should be a senior development engineer, architect and programmer with agile development skills. The knowledge of software development by full-stack engineers has often evolved. They have thrown specific technologies behind them and understand that technology updates are always faster than computer theory. Therefore, they focus on strengthening their core skills, paying attention to and be willing to practice others. technology. Full-stack engineers are often experts in one area, and are familiar with and good at using other languages, tools, and techniques in the right place.
The value of a full stack of engineers
Over time, the role and value of full-stack engineers has been proven in more and more products or projects. So let’s see what a full stack engineer means for an individual or a company.
- Great personal value and freedom — I have read some articles about full-stack engineers, most of which emphasize the value of full-stack engineers for companies and teams. What I want to say is that no good full-stack engineer is trying to learn various technologies because of the great benefits to the company. The people I know are those who have an ingenuity, constantly pursue higher skills, and are obsessed with making better products. And when you become a true full stack engineer, you will feel an unprecedented increase in personal value and technical freedom. Imagine that when a good idea emerges, you can achieve it by one person or lead a team and constantly improve it. What an exciting thing!
- Global thinking and technology forward — looking — Due to the knowledge of various development links and technical fields, full-stack engineers tend to have better overall situation and technology forward-looking, can choose the right technology at the beginning of the project, and put it well Control the overall direction of a project. Modern projects are often very complex, and full-stack engineers often bring technical and quality assurance and become a key figure in the success of a project.
- Reducing communication costs — I often hear designers complain that front-end engineers can’t restore their designs 100%, and front-end engineers are complaining that the data returned by back-end engineers from the interface is not directly usable, and back-end engineers are complaining about products. The manager’s demand cannot be completed at all. As the number of teams increases, the cost of communication will increase as the skill stacks differ. In addition to being able to independently complete front-end development (even design), full-stack engineers can better avoid technical risks and filter unreasonable requirements if they can intervene early in the project, thus significantly reducing communication caused by different technical differences. Problems that significantly reduce project risk.
- Startups — We have come to an era of entrepreneurship and innovation for all. Those startups are also springing up like mushrooms. Startups often have a good idea, but often encounter the embarrassment of “there is a lack of a programmer.” What I want to say is that they are not lacking programmers, but a full-stack engineer. Startups often have limited capital, and a good full-stack engineer can help startups launch their products at the lowest cost and in the shortest possible time. This is the most crucial step for a startup to survive, get more investment, and even become a member of the “unicorn.”
Full stack engineer’s skill stack
When you see this, you will definitely ask, what skills do you need to be a full-stack project? The following picture is from Medium. The author divides the various aspects involved in software development into layers, and creates the full stack technology diagram by taking the main techniques contained in each layer as components.
From the above picture, we can easily find out how huge the current technical system is, and new technologies are added to these layers every year, and the existing technology is constantly being updated. So it’s impossible to master all the technologies, and becoming a full-stack engineer doesn’t require you to really master all the techniques. You should focus your energy on key development skills and some additional skills that you must master.
Key development skills (hard power):
- **Git / GitHub ** — You must know how to use Git to manage and share your code. Git is the first of its key skills because it’s more than just a code management tool, it’s a recommended way of working. It allows you to develop anywhere, efficiently manage projects of any size, and with Git you can also collaborate with other team members to increase productivity. With GitHub, you can also connect with all the developers in the world.
- At least one programming language — you need to be proficient in at least one programming language, JAVA, PHP, C#, Python, Ruby, Perl, etc., because most of your core business processing needs to be written in this language. You need to master the grammar of the language, and you need to be very familiar with how to structure, design, implement, and test the project based on the language. If you choose JAVA, then you need to master object-oriented design and development, the application of design patterns, the development of various components based on J2EE, and so on.
- Using development frameworks and third-party libraries — popular development languages are generally accompanied by excellent development frameworks such as JAVA Spring, MyBatis, Hibernate, Python’s Django, PHP’s thinkphp, yin, nodeJs’s express, and more. These development frameworks often follow some best practices in the software development arena and are created by very good developers. Skilled use of these development frameworks or third-party libraries can avoid reinventing the wheel and make your work more effective. More importantly, these excellent frameworks or third-party libraries are generally maintained and are the most effective guarantee for the quality and safety of your products or projects.
- Front-end technology — The front-end technology is isolated as a key technology because it is becoming more and more important in today’s project and product development process. In addition to achieving the required functionality, a product (user experience) is also becoming an important criterion for judging the success of a product. And this depends on the implementation of the front-end technology, you need to master at least the basic front-end technology such as HTML5, CSS3, JavaScript, and further study front-end frameworks or third-party libraries such as JQuery, LESS, SASS, AngularJS or REACT.
- Database and Cache — Any product or project requires a database to store data. As a full-stack engineer, you also need to master at least one or two databases and know how to interact with the database. Currently popular databases mainly include MySQL, MongoDB, Redis, Oracle, SQLServer, and so on. As a document-based database, MongoDB is being used more and more in Internet products. For larger projects, I still recommend using MySQL or commercial Oracle as the back-end database. An in-memory database like Redis can be used for caching to improve system performance.
- Basic Design Capabilities — Most articles or discussions about full-stack engineers do not make design capabilities a key skill for full-stack engineers, but I think this skill is very important. I was invited to evaluate some of the software developers’ own development products, these products have good ideas, and the function implementation is also in place, but at first glance it is not a good product, users do not have the desire to use, because the design of these products is too Poor, and often those developers are completely unaware of the existence of problems, such as color inconsistencies, messy layouts, inappropriate icons, and so on. The basic design ability that I suggest does not require you to be able to create a magical visual effect like a professional designer, but you need to master the most basic UI design principles, such as color matching, basic typesetting, and Have good aesthetic ability, and some basic UI design skills, so that the products you make will not be too bad.
After mastering these core skills, you can learn other techniques based on your interests and direction. For example, if you are interested in data processing, then you can learn about big data. If you are more interested in mobile internet, then you can learn Swift and develop iOS applications. Knowledge is always connected. After having a good technical foundation, learning other knowledge will become very easy.
Additional skills (soft power):
- Communication — Unless you are doing a personal project, for a slightly larger project, you always need to communicate with colleagues, stakeholders or customers. Successful communication is often the first step in getting effective demand and building team confidence. In the course of the project, you need to use effective communication to determine the solution, eliminate misunderstandings, and work with project members. Good communication skills will make you more influential in the team and receive more respect and attention.
- Problem Solving Ability — The full stack engineer is first and foremost an engineer. He must master the engineering methods to solve the various problems encountered. Almost all of my highlights in my career have been related to problem solving, ranging from providing architectural solutions for the entire project to solving production problems as quickly as possible. There are actually many ways to improve problem solving, but none is more effective than practice. The excellent engineers I have seen can often give the right solution with the intuition in the shortest time, but what you may not have seen is that behind this is actually the experience accumulated through a lot of practice.
- Time Management — As a full stack engineer, you may be arranged to assume different roles in different projects at the same time. You need to allocate time reasonably to ensure that all work is delivered on time. Also in your spare time, you still need to spend time reading and learning, and you may also have your own Side Project. Therefore, it is important to make reasonable time allocations and plan for some key tasks. You may feel some pressure, but it will inspire your creativity and make everything work in an orderly manner.
- Curiosity — Be curious about any job and willing to learn and improve is a common feature of those outstanding engineers. The field of software development brings together the most intelligent people in the world, and various types of technologies, products, and frameworks are constantly changing. Good full-stack engineers need to constantly learn to capture these changes and keep pace with the development of the computer field. Some people often ask me if there is something new in the computer line. If you want to study continuously, it will be very tired. What I want to say is that for people who have continuous learning as a habit, learning new things will not become a burden, but rather a pleasure.
- Leadership — Good full-stack engineers are often given the role of a technology leader or even a project manager. Being a manager is not about letting you dominate other people, or letting others do things for you. Managers need to understand the strengths and weaknesses of your team members and know how to maximize the team’s output with a service attitude. I have seen some very good engineers. When they are arranged to manage the team, they are excluded. They are often more willing to work alone. But I want to say that becoming a manager will make you more wise, reliable and trustworthy, and will bring great benefits to your future career. So when the opportunity comes, please treat it as a challenge and don’t reject it.
Experienced technology leaders often look at the candidate’s technical skills and the above-mentioned additional skills when recruiting. For junior programmers, those additional skills are often valued by good technology companies. Development skills are your hard power, and additional skills can be seen as your soft power. Only with these two skills can you become a good full-stack engineer.
Excellent full stack engineers need to go out
An excellent full-stack engineer should not be limited to his own work. He should go out, touch different technologies, share his experience and experience, and know more friends. Here are some of my practices.
- Participate in technical conferences — InfoQ, CSDN, GITC, Youji, TED and other websites will hold various technical conferences on a regular basis. At these conferences, you can not only hear the best technical practices in their respective fields brought by technical geeks, but also meet many friends in the industry. This will help you to develop your ideas and expand your social circle. Therefore, if the company does not arrange for you to attend these technical conferences, then you can buy tickets yourself as an investment in yourself.
- Making a public speech — A full stack engineer does not need to be a public speaker, but as a core member of the team, he must speak in the technical, management, and other aspects of the team. If you are a technology darling who is willing to share, you can also try to record your own lessons (video or audio) and share your skills and knowledge in MOOC, NetEase, Youku or various media like Litchi and Himalayan. Because I am not an expert, I don’t want to try it. Believe me, the content you make with your heart will get everyone’s approval and get a lot of fans.
- Personal blog — progress a little bit every day, and you will get a qualitative leap after one year. Excellent full-stack engineers know how to accumulate knowledge, and technical blogs are a good way to record your usual practice and thinking, with tag labels for future review. The most interesting thing is that while you are constantly recording and updating your blog, programmers around the world will also know you through your blog.
- Participate in offline activities — unlike previous programmers who were always at home, young programmers are now more willing to share and communicate. Many websites also organize offline activities with different technical themes, in which you can hear the sharing of some technical cows, and you can find many people who are as passionate about technology as you. And many of the team members in the open source project I am doing now are exactly what I met in these offline activities.
The full stack engineer is never practiced overnight. You need to lay a good foundation for technology, strengthen core skills, and continue to learn. I believe that one day, as I do, I feel the freedom to use technology and develop the fun of excellent products.