Current location - Quotes Website - Excellent quotations - How to become an excellent full-stack engineer through self-study?
How to become an excellent full-stack engineer through self-study?
How to become an excellent full-stack engineer through self-study?

For most IT industry graduates and newcomers who just entered the workplace. The tangled problems are how to choose a career direction, how to become an excellent software engineer, and how to improve your skills quickly. Today, our php Chinese website will talk to you about how to become an excellent full-stack engineer.

What is a full-stack engineer?

The term full-stack engineer first appeared in an article by Facebook engineer Calos Bueno. He defines a full-stack engineer as a technical generalist who has a deep understanding of the performance impact. Since then, the word full stack has become popular. I have met full-stack engineers, full-stack designers, full-stack operation and maintenance, full-stack marketers and so on. On Internet recruitment websites such as "Hook" and "100Offer", full-stack engineers have become popular recruitment positions, and their salary level is also higher than that of general development engineers. So, what is a full-stack engineer and how should we define a full-stack engineer?

Baidu Encyclopedia defines a full-stack engineer as "a person who has a variety of skills and can use these skills to complete products independently". I think this definition is not comprehensive enough. I think full-stack engineers should be senior development engineers, architects and programmers with agile development skills. Full-stack engineers' understanding of software development is usually constantly developing. They put specific technology behind them and understand that technology update is always faster than computer theory. Therefore, they pay attention to strengthening their core skills and are willing to practice other technologies. Full-stack engineers are often experts in a certain field, and are familiar with and good at using other languages, tools and technologies in appropriate occasions.

The value of full stack engineering

With the passage of time, the role and value of full-stack engineers have been confirmed in more and more products or projects. So, let's take a look at what full-stack engineers mean to individuals or companies.

Great improvement of personal value and freedom-I have read some articles introducing full-stack engineers, and most of them emphasize the value of full-stack engineers to companies and teams. What I want to say is that no excellent full-stack engineer will study all kinds of technologies hard because of how much benefit it will bring to the company. The people I know are all people who have an ingenuity, constantly pursue higher skills and are persistent in making better products. When you become a real full-stack engineer, you will feel unprecedented personal value and technical freedom. Imagine that when a good idea comes up, you can realize it yourself or lead a team to improve it. How exciting it is!

Global thinking and technology foresight-With the understanding of various development links and technical fields, full-stack engineers often have a better global view and technology foresight, and can choose the right technology in the early stage of the project and control the overall direction of a project well. Modern projects are often very complicated, and full-stack engineers can often guarantee technology and quality, thus becoming a key figure in the success of a project.

Reduce communication costs-designers often complain that front-end engineers can't 100% restore their own designs, front-end engineers complain that the data returned by back-end engineers from interfaces can't be used directly, and back-end engineers also complain that the requirements put forward by product managers can't be realized at all. With the increase of the number of teams, the communication cost will definitely increase due to the different skill stacks. Full-stack engineers can not only independently complete the front-end and back-end development (even design), but also avoid technical risks and filter unreasonable demands if they can get involved in the early stage of the project, thus significantly reducing the communication problems caused by different technical differences and project risks.

Start-ups-We have come to an era of entrepreneurship and innovation for all. Those start-ups have mushroomed. Startups often have a good idea, but they often encounter the embarrassment of "just lacking a programmer". What I want to say is that they are not short of programmers, but a full-stack engineer. Start-ups often have limited funds, and an excellent full-stack engineer can help start-ups launch their own products at the lowest cost and in the shortest time. This is the most crucial step for startups to survive, get more investment and even become a member of the "unicorn".

Full stack engineer skill tree

Seeing this, you will definitely ask, what skills do you need to do a full-stack project? The picture below is from Medium. The author layers all aspects involved in software development, and takes the main technologies contained in each layer as components to make this full-stack technical diagram.

From the above picture, we can easily see how huge the current technical system is. Every year, new technologies are added to these layers, and existing technologies are constantly updated. So it is impossible to master all the technologies, and you don't really need to master all the technologies to become a full-stack engineer. You should focus on key development skills and some additional skills that you must master.

Key development skills (hard power):

Git/GitHub-You must master how to use Git to manage and share your code. Git is considered as the first key skill, because it is not only a code management tool, but also a recommended way of working. It enables you to develop anywhere and effectively manage projects of any size. Through Git, you can also cooperate with other team members in a distributed way, which greatly improves the work efficiency. Through 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, such as JAVA, PHP, C#, Python, Ruby, Perl, etc. Because most of your core business processes need to be written in this language. You should not only master the grammar of this language, but also be very familiar with how to construct, design, implement and test projects based on this language. If you choose JAVA, you need to master the object-oriented design and development, the application of design patterns, the development of various components based on J2EE and so on.

The use of development frameworks and third-party libraries-popular development languages are generally accompanied by excellent development frameworks, such as Spring of JAVA, MyBatis, Hibernate, Django of Python, Thinkphp and yin of PHP, express of nodeJs and so on. These development frameworks usually follow some best practices in the field of software development and are created by very good developers. Skillfully using these development frameworks or third-party libraries can avoid unnecessary work and make your work more efficient. More importantly, these excellent frameworks or third-party libraries are generally maintained continuously, which is the most effective guarantee for the quality, safety and convenience of your products or projects.

Front-end technology-Front-end technology is independent as a key technology because it is becoming more and more important in the research and development process of projects and products today. In addition to achieving the required functions, whether a product is easy to use (user experience) is also becoming an important criterion to judge whether a product is successful. And all this depends on the realization of front-end technology. You should at least master the basic front-end technologies such as HTML5, CSS3 and JavaScript, and further learn the front-end frameworks or libraries of third parties 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. At present, the most popular databases are MySQL, MongoDB, Redis, Oracle, SQLServer and so on. As a document database, MongoDB is used more and more in Internet products. I still recommend MySQL or commercial Oracle as the back-end database for larger projects. In-memory databases such as Redis can be used for caching to improve system performance.

Basic design ability-most articles or discussions about full-stack engineers will not regard design ability as the key skill of 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 creativity and functional realization, but they are not good products at first glance, and users have no desire to use them at all. Because of the poor design of these products, developers are often completely unaware of the existence of problems, such as inconsistent colors, messy typesetting, inappropriate icons and so on. The basic design ability I suggest does not require you to make wonderful visual effects like a professional designer, but you need to master the most basic UI design principles, such as color matching and basic typesetting, and have good aesthetic ability and some basic UI design ability, so that your products will not be too bad.

After mastering these core skills, you can learn other technologies according to your own interests and development direction. For example, interested in data processing, you can learn the technology of big data. If you are interested in the mobile Internet, you can learn Swift and develop ios applications. Knowledge is always related, and it will be very easy to learn other knowledge after having a good technical foundation.

Additional skills (soft power):

Communication-Unless you are working on a personal project, you always need to communicate with colleagues, stakeholders or customers for larger projects. Successful communication is often the first step to obtain effective demand and build team confidence. In the process of the project, you need to determine the scheme through effective communication, eliminate misunderstandings and work together with project members. Good communication skills will make you more influential in the team and get more respect and attention.

Ability to solve problems-Full-stack engineers are engineers first, and they must master engineering methods to solve various problems they encounter. Almost all the highlights of my career are related to solving problems, from providing the architecture scheme of the whole project to solving production problems as quickly as possible. In fact, there are many ways to improve the ability to solve problems, but none is more effective than practice. The excellent engineers I have met can often give the correct solution in the shortest time by intuition, but what you may not see is that behind this is actually the experience accumulated through a lot of practice.

Time management-As a full-stack engineer, you may be assigned to take on different roles in different projects at the same time. You need to allocate your time reasonably and ensure that all the work can be completed on time. Also in your spare time, you need to spend time reading and studying, or you may have your own sideline. Therefore, it is very important to allocate time reasonably and plan some key tasks. You may feel some pressure, but it will stimulate your creativity and make everything go in an orderly way.

Curiosity-full of curiosity about any job, and willing to constantly learn and improve, which is also the common feature of those excellent engineers. The field of software development brings together the smartest people in the world, and various types of technologies, products and frameworks are changing with each passing day. Excellent full-stack engineers need to keep learning to grasp these changes and keep up with the development of computer field. People often ask me that there will always be something new in the computer industry, and it will be very tiring to keep learning. What I want to say is that for those who take continuous learning as their living habit, learning new things is not a burden, but a pleasure.

Leadership-excellent full-stack engineers are often given the role of technical director or even project manager. Being a manager is not to let you dominate others, nor to let others do things for you. Managers need to know the advantages and disadvantages of your team members and know how to maximize the output of the team with a service attitude. I have met some excellent engineers. They are exclusive when they are assigned to the management team. They usually like to work alone. But I want to say that being a manager will make you more wise, reliable and trustworthy, and it will also bring great benefits to your future career. So, when the opportunity comes, please take it as a challenge and don't refuse.

Experienced technical leaders often examine the technical ability of candidates and the above-mentioned additional skills at the same time when recruiting, but for the recruitment of junior programmers, those additional skills are often valued by excellent technical companies. Developing skills is your hard power, while adding skills can be regarded as your soft power. Only by having these two skills at the same time can you become an excellent full-stack engineer.

Excellent full-stack engineers need to go out.

A good full-stack engineer should not be confined to his own work, but should go out, contact different technologies, share experiences and make more friends. Here are some of my practices.

Participate in technical meetings-InfoQ, CSDN, GITC, Youyou, TED and other websites will hold various technical meetings regularly. At these conferences, you can not only hear the best technical practices in their respective fields brought by technology giants, but also meet friends in many industries. This is very helpful for you to broaden your mind and expand your technical circle. So, if the company doesn't arrange for you to attend these technical meetings, buy your own tickets as an investment in yourself.

Make public speeches-Full-stack engineers do not need to make public speeches, but as core members of the team, they must make technical and management speeches within the team. If you are a technical expert who is willing to share, you can also try to record personal courses (video or audio) and share your skills and knowledge in various media such as massive open online courses, Netease classrooms, Youku or Litchi, Himalaya and so on. Don't be unwilling 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-make a little progress every day, and you will make a qualitative leap after one year. Excellent full-stack engineers know how to accumulate knowledge. Technical blog is a good way to record their usual practice and thinking, and it is convenient to review later with tag tags. The most interesting thing is that while you keep recording and updating your blog, programmers all over the world will get to know you through your blog.

Participate in more offline activities-Unlike programmers who used to stay at home, young programmers are more willing to share and communicate. Many websites also organize offline activities for different technical topics. In these activities, you can hear the sharing of some technicians, and you can also find many people who are as passionate about technology as you are. And many team members in the open source project I am doing now are exactly what I met in these offline activities.

Full-stack engineers are never built overnight. You need to lay a solid technical foundation, strengthen core skills and keep learning. I believe that one day, like me, you will feel the pleasure of using technology freely and developing excellent products.