43 Qa Discussion on Career Development and Choices

43 QA Discussion on Career Development and Choices #

Hello, I’m Jiaoxiao.

In the previous few classes, I shared some experiences and thoughts about working at Facebook. Many students have raised their concerns and hope that I can provide some advice on career development. Based on these questions, I have selected the following three main themes to talk about my views on career development and choices.

Q: What are the main types of positions for programmers? How should I choose? #

A: Whether it’s during the job search stage or after formally entering a company, you will find that engineers are generally divided into several positions based on different technologies.

  1. Front-end: This includes mobile (Android, iOS) and web front-end (JavaScript, CSS) development.
  2. Back-end (server-side): Mainly focuses on server-side development. Simply put, it involves handling requests and sending responses to clients.
  3. Algorithms: Mainly involves machine learning, such as how to better implement personalized recommendations in recommendation systems, how to return search results that better meet user needs in search engines, and so on.
  4. Architecture: Involves system architecture, more oriented to the lower level, with C++ as the main language.

In terms of salary, generally speaking: algorithms > architecture > back-end > front-end. Of course, this is mainly determined by the market supply and demand relationship.

Speaking of the algorithm position, there is generally a shortage of algorithm talent in the domestic market. This is also because this position requires more difficult training and a greater investment of energy. For algorithm engineers involved in the research and development of core products in top internet companies, it is common to have an annual income of 1-2 million RMB after three years of work.

However, when I talk about algorithm talent here, I definitely do not mean the kind of talent that has only read a few papers, written some MATLAB code, and worked on a few research projects in school. The algorithm skills required for this position require practical experience in certain product lines. You also need to have a true understanding of the market, such as how the recommendation algorithm works in Toutiao (Today’s Headlines), how Google’s search engine works, how the advertising ranking is done in Toutiao, and so on.

Now let’s talk about architecture, which is currently a hot direction. I have always believed that this is a very engineering-oriented and hardcore field with good development prospects. It can be said to be the cornerstone of a product. Taking the recommendation system mentioned earlier as an example, strong architecture support is required for the positioning and ranking systems of advertisements. Therefore, this field can also be considered as one of the talents in short supply and is one of the positions that companies are willing to hire at a high salary.

Unlike algorithms, this field does not involve deep mathematical knowledge. The main focus of engineers is on how to improve system performance, including how to make the system highly scalable, reduce system latency, and reduce the required CPU capacity, among others. Architects need strong programming skills, and the commonly used language is C++. Of course, the most important thing is to accumulate first-hand experience gained from large-scale projects and have a principled approach to handling common problems.

Finally, let’s talk about back-end and front-end, which are the positions that the majority of programmers engage in and the positions I chose when I first entered the company. Perhaps compared to the previous two positions, some people may think that the salaries of back-end and front-end engineers are lower and there are no good prospects for development. This is totally wrong! From a product perspective, can you do without back-end and front-end developers even if you don’t have algorithm engineers or architects? Obviously, this is impossible.

Back-end and front-end are like the framework of a product. Only when the framework is built can machine learning, algorithms, and other enhancements be added. Admittedly, in the past two years, back-end and front-end positions have not been as popular as the previous two positions (mainly due to market supply and demand). However, this does not mean that these positions have no good prospects for development or that you can underestimate their technical content.

Compared to algorithms and architecture, the threshold is indeed lower for back-end and front-end positions, but they still require a high level of technical expertise. For example, for a product or certain components of it, how to design and build the framework and structure of the back-end and front-end development is what many senior development engineers are doing.

After discussing all of this, let’s come back to the fundamental question: how should you choose?

The advice I give here is: first and foremost, start with your own interests, because only when you are interested in something can you do your best. For example, if you are interested in front-end, why would you go for machine learning? Of course, some people may not have a clear preference. In this case, I recommend that you try out as many options as possible, as this is the best way to understand your own interests. In addition, from a broad perspective, the field of computer science offers two directions for study: deep and broad. It’s important to determine which direction you belong to. “Study deep” refers to specializing in a specific field for decades, aspiring to become an expert in that field. On the other hand, “study broad” is similar to being a full-stack engineer, having a comprehensive understanding of a product or system from end to end, and being able to handle any role at any time. This is particularly evident in startup companies.

Q: How can one become a full-stack engineer? #

A: I believe many of you who are reading this are working in startup companies, and as mentioned earlier, there is a great demand for full-stack engineers in these companies. So, how can one become an outstanding full-stack engineer?

Simply put, the best method is to “explore and practice as many projects in different fields as possible.” Putting this into action is always the best way to learn new knowledge and enhance skills.

Of course, at the beginning stage of each field, you may find it extremely challenging. For example, if someone who has never worked with front-end development is asked to create a webpage, they might not know where to start. In this case, I suggest starting with “copy and modify.” By reading and modifying similar code written by others, you can eventually accomplish the functionality you want. Over time, as you see and use more, your understanding will naturally deepen and your proficiency will improve.

For those who have the opportunity, such as working in a company with a culture like Facebook, you can explore different projects by transferring to different teams within the company. This is undoubtedly the best option because collaborating with experts in specific fields is always more effective than working alone. You will quickly learn a lot.

However, for those who don’t have such opportunities, don’t despair. You can still “charge” in your spare time and work on projects to cultivate and strengthen your abilities in other areas. After all, self-study is the primary way for adults to improve themselves.

By doing this, in the end, you should be able to single-handedly handle the development of an entire product line and have a comprehensive and in-depth understanding of the entire workflow of the system.

Q: After completing this column, how can I continue to advance in the field of Python? #

A: In my opinion, the main goal of this column is to help you master the common basics and advanced usage of the Python language. The next step in advancement is the application of Python itself in various different directions. Taking backend development as an example, you need to master how to build the backend of a large-scale system. A good backend development naturally requires:

  • Well-designed systems and frameworks
  • Concise and efficient code quality
  • Robust and comprehensive unit testing
  • Outstanding performance

Specifically, is your backend system easy to expand? For example, if there are new product requirements after six months, can you implement new functionality with minimal modifications to your framework, without having to start from scratch?

Furthermore, does your backend system meet the requirements of high maintainability, reliability, and thorough unit testing, thus minimizing the occurrence of bugs in the live system?

In summary, when you reach an advanced stage in a specific field, you need to consider not only the implementation of certain functionalities, but also aspects such as the performance and quality of your code, and even the overall system design.

Although I have talked about many things, I want to emphasize that success can be achieved in any field. There is no distinction between superior or inferior in any domain. As long as you persist in learning, practicing, and thinking, you can excel in any field of the computer industry, and even in your entire career.

So, how do you view and understand career choices and development? Feel free to leave a comment and discuss with me. I also hope that all of you who are continuously learning in front of the screen can find your own direction, keep progressing and innovating, and achieve your life goals.