For most IT industry graduates, newcomers to the workplace just entered the workplace. The problems that they struggle with are how to choose a career direction, how to become a good software engineer, and how to quickly improve their skills. Today, we at phpChinese.com are here to talk to you about what it takes 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 defined a full stack engineer as a technical generalist who has a deep understanding of performance impact. Since then the term full stack has become popular and I have seen full stack engineers, full stack designers, full stack ops, full stack marketers, etc. So, what is a full-stack engineer and how should we define a full-stack engineer?
Wikipedia defines a full-stack engineer as "someone who has multiple skills and can use them to complete a product independently". I think this definition is not comprehensive, I think a full-stack engineer should be both a senior development engineer, an architect, and a programmer with agile development skills. Full-stack engineers tend to have an evolved understanding of software development, they leave specific technologies behind and understand that technology is always updated faster than computer theory, so they focus on strengthening their core skills and focus on and enjoy practicing other technologies. Full-stack engineers tend to be experts in one area, while being fluent and adept at using other languages, tools and technologies in the right context.
The value of a full-stack engineer
As time goes by, the role and value of a full-stack engineer is being demonstrated in more and more products or projects. So, let's take a look at what a full-stack engineer means to an individual or a company.
● Great increase in personal value and freedom —— I have read some articles introducing full-stack engineers, and most of the articles emphasize the value of full-stack engineers to the company and the team. And I'd like to say that no good full-stack engineer strives to learn various technologies because of how much benefit they will have to the company. The ones I know are those who have a heart of craftsmanship, constantly pursuing higher skills, and obsessed with making better products. And when you become a real full-stack engineer, you will feel an unprecedented increase in personal value and technical freedom. Imagine how exciting it is when a great idea comes along and you can implement it alone or lead a team to keep improving it!
● Big picture thinking and technology foresight —— With knowledge of various development aspects and technical areas, full-stack engineers often have a better big picture and technical foresight to choose the right technology early in a project and control the overall direction of a project well. Modern projects are often very complex, and full-stack engineers often bring technical and quality assurance, thus becoming a key player in the success of a project.
● Reduce communication costs —— I often hear designers complaining that front-end engineers can't reproduce their designs 100%, while 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 that the requirements proposed by the product manager simply can't be completed. As the number of team members rises, the cost of communication will definitely rise due to the difference in their respective skill stacks. In addition to being able to independently complete front-end and back-end development (even including design), full-stack engineers can avoid technical risks and filter unreasonable requirements if they can intervene early in the project, thus significantly reducing communication problems caused by different technical differences and significantly reducing project risks.
● Startups —— We have come to an era of universal entrepreneurship and innovation. Startups are springing up all the time. Startups often have a good idea, but often encounter the embarrassment of "just one programmer is missing". I would like to say that they don't really lack a programmer, but a full-stack engineer. Startups often have limited funds, and a good full-stack engineer can help startups launch their products at the lowest cost and in the shortest time. This is the most critical step for startups to survive, get more investment, and even become a "unicorn".
Full Stack Engineer Skill Tree
You must be asking here, what kind of skills do you need to have to become a full-stack engineer? The following diagram comes from Medium, where the author divided all aspects involved in software development into layers, and made this full-stack technology diagram with the main technologies included in each layer as components.
From this chart above, it's easy to see how large the technology system is now, with new technologies being added to these layers every year, and some technologies already being updated constantly. So it is simply impossible to master all technologies, and becoming a full-stack engineer does not really require you to master all technologies, you should focus your energy on key development skills and some additional skills that must be mastered.
Key development skills (hard power):
● Git / GitHub —— You must master how to use Git to manage and share your code. The reason for making Git the first of your key skills is that it's not just a code management tool, it's a recommended way to work. It allows you to develop from anywhere, manage projects of any size efficiently, and with Git you can also collaborate with other team members in a distributed manner, greatly increasing productivity. With GitHub, it also connects you to all the developers in the world.
● Mastery of at least one programming language —— You need to be proficient in at least one programming language, JAVA , PHP, C#, Python, Ruby, Perl, etc., as most of your core business processes need to be written in this language. You need to both master the syntax of the language and be very familiar with how to architect, design, implement, and test projects based on this language. If you choose JAVA, then you need to master object-oriented design and development, the application of design patterns, based on the development of various components of J2EE and so on.
● Leverage development frameworks and third-party libraries —— Popular development languages are generally accompanied by excellent development frameworks, such as Spring, MyBatis, Hibernate for JAVA, Django for Python, thinkphp, yin for PHP, express for nodeJs, and so on. These development frameworks tend to follow some of the best practices in software development and are created by very talented developers. Proficiency in using these development frameworks or third-party libraries can avoid reinventing the wheel and make your work twice as effective. More importantly, these excellent frameworks or third-party libraries are generally maintained on an ongoing basis and are the most effective guarantee of quality and security for your product or project.
● Front-end Technology —— The reason for separating front-end technology as a key technology is that it is becoming more and more important in the development process of today's projects and products. In addition to achieving the required functionality, the usability (user experience) of a product is becoming an important criterion to judge the success of a product. You need to master at least basic front-end technologies such as HTML5, CSS3, JavaScript, and further learn front-end frameworks or third-party libraries such as JQuery, LESS, SASS, AngularJS, or REACT.
● Database and Cache —— Any product or project needs 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 them. The main popular databases are MySQL, MongoDB, Redis, Oracle, SQLServer, etc. MongoDB, as a document-based database, is being used more and more in Internet products, and for slightly larger projects, I still recommend using MySQL or commercial Oracle as the back-end database. In-memory databases like Redis, on the other hand, can be used for caching to improve system performance.
● Basic Design Capabilities —— Most of the articles or discussions about full-stack engineers do not make design ability as a key skill for full-stack engineers, but I think this skill is very important. I have been invited to evaluate some products developed by software engineers themselves. These products have good ideas and functional implementation, but at first glance, they are not a good product, and users simply have no desire to use them, because the design of these products is so poor, and often those developers are completely unaware of the problems, such as inconsistent colors, messy typography, inappropriate icons, etc. The basic design skills I suggest don't require you to be able to P out the magic pictures, produce fantastic visual effects, etc. like professional designers, but you need to master the most basic UI design principles, such as color matching, basic typography, and have good aesthetic skills, and some basic UI design skills, so that the products you make will not be too bad.
After acquiring these core skills, you can learn other aspects of technology according to your interests and development direction. For example, if you are interested in data processing, then you can learn techniques in big data. If you are more interested in mobile internet, then you can learn Swift and develop ios applications. Knowledge is always connected, and after having a good technical foundation, learning other knowledge will become very easy.
Additional skills (soft power):
● Communication —— Unless you are working on a personal project, for larger projects you will always need to communicate with colleagues, stakeholders or clients. Successful communication is often the first step in getting effective demand and building team confidence. During the course of a project, you need to communicate effectively to identify solutions, eliminate misunderstandings, and work with project members to move forward. Good communication skills will make you more influential in the team and receive more respect and attention.
● Problem solving skills —— A full-stack engineer is first and foremost an engineer who must master an engineering approach to solving the various problems he encounters. Almost all the highlights of my career are related to problem solving, ranging from providing architectural solutions for entire projects to solving production problems as fast as possible. There are actually many ways to improve problem solving skills, but none of them are more effective than practice. The best engineers I've seen are often able to give the right solution in the shortest time with intuition, but what you may not see is that behind this is actually a lot of experience accumulated through practice.
● Time Management —— As a full-stack engineer, you may be assigned to different roles in different projects at the same time. You will need to allocate your time wisely to ensure that all work is delivered on time. In your spare time, you will also need to spend time reading and studying, and you may have your own Side Project, so it is important to allocate your time wisely and plan for some key tasks. You may feel some pressure, but this will instead stimulate your creativity and keep everything in order.
● Curiosity —— Curiosity about any job and a willingness to constantly learn and improve are common traits of those who are great engineers. The software development field brings together some of the smartest people in the world, and all types of technologies, products, and frameworks are constantly changing and emerging. A good full-stack engineer needs to keep learning to catch these changes and keep up with the development of the computer field. From time to time, people ask me if it is tiring to keep learning because there are always new things coming in the computer business. I would say that for people who make continuous learning a habit of life, learning new things does not become a burden, but rather a pleasure.
● Leadership —— Good full-stack engineers are often given the role of technical Leader or even project manager. Becoming a manager does not mean that you dominate others or make others do things for you. A manager needs to understand the strengths and weaknesses of your team members and know how to maximize the team's output with a servant attitude. I've met some very good engineers who are repulsed when they are put in charge of a team, and they often prefer to work alone. But I would say that becoming a manager will make you wiser, more reliable and trustworthy to others, and will also be of great benefit to your future career. So when the opportunity comes, see it as a challenge and don't dismiss it.
Experienced technology leaders often look at both technical skills and the additional skills mentioned above when hiring candidates, and for junior programmer hires, those additional skills are often valued more by good technology companies. Development skills are your hard skills, while additional skills can be seen as your soft skills. Only by having both skills can you become a good full-stack engineer.
Good full-stack engineers need to go out
A good full-stack engineer should not be limited to his own work, he should go out, contact different technologies, share his experience and insights, and meet more friends. Here are some of my practices.
● Participate in technical conferences —— InfoQ, CSDN, GITC, Usher, TED and other websites regularly hold various technical conferences. At these conferences, you will not only be able to hear the best technical practices brought by technical experts in their respective fields, but also meet many friends in the industry. This is very helpful for you to develop ideas and expand your technical social circle. So, if your company doesn't arrange for you to attend these technical conferences, then buy your own tickets and attend as an investment in yourself.
● Give a public lecture —— A full-stack engineer doesn't need to be a public speaker, but as a core member of the team, he must need to do presentations on technology, management, etc. within the team. If you are a technical expert who is willing to share, then you can also try to record personal courses (video or audio) and share your skills and knowledge in various media such as MU class, Netease classroom, Youku or like Lychee, Himalaya, etc. Don't be reluctant to try because you are not an expert, believe me, the content you make with your heart will be recognized by everyone and gain a large number of fans.
● Personal Blog —— A little progress every day, a year later you will get a qualitative leap. A good full-stack engineer knows how to accumulate knowledge, and a technical blog is a good way to record your usual practice, thinking, with tag tags for future review. The most interesting thing is that while you are constantly recording and updating your blog, programmers around the world will also get to know you through your blog.
● Participate in offline activities —— Unlike the old days when programmers were always at home, nowadays young programmers are more willing to share and communicate. Many websites also organize offline events on different technical topics, where you can hear from some technical experts and find many people who share your passion for technology. Many of the team members of the open source project I'm working on now are people I met at these offline events.
Full-stack engineers are never trained overnight, you need to build a good technical foundation, strengthen core skills, and continue to learn. I believe that one day you will be able to feel the joy of using technology freely and developing excellent products, just like me.