Code learning is endless, how do programmers plan their career development?

round table topics


  • Topic 1: Since open source has been included in the national plan since 2020, there have been more and more open source projects. The emergence of open source projects provides a way for everyone to learn and deeply understand the upgrade project. From a learning perspective, how does a developer get involved in a project and learn about a project?
  • Topic 2: The main direction of the CloudWeGo open source project is the cloud native microservice framework. What are the main usage scenarios of such projects? What is the value of learning this type of project? What is the experience of the mixed community?
  • Topic 3: What is the difference between the roles of programmers as project users and the roles of developers as open source project designers ? As a community Committer who has gone through this kind of role transition, what lessons can you share?
  • Topic 4: From the perspective of the community and the overall situation, talk about why major factories are recruiting Go engineers? How should programmers plan their career development? Where is the final destination of programmers?
  • Topic 5: In the sharing session of the big guys, bloggers/technology-learning websites/books recommended by the big guys.

guest


Issue one


Since open source has been included in national planning since 2020, there have been more and more open source projects. The emergence of open source projects provides a way for everyone to learn and deeply understand the upgrade project. From a learning perspective, how does a developer get involved in a project and learn about a project?

Shared by: Wang Weichao


The introduction on this issue is mainly carried out from the following four aspects:
  1. How to get connected with Kitex and CloudWeGo communities;
  1. Personal knowledge about cloud native and open source culture;
  1. Why participate in open source and the spirit of open source as I understand it;
  1. Personal future thoughts on open source.

How to get connected with Kitex and CloudWeGo communities

In fact, the relationship with Kitex is very coincidental. Although I have done back-end development for several years, I feel that there are still some bottlenecks in technology, so I want to improve myself. Looking back on my past experience:
  • In September 2021, I will try to do output in InfoQ, and the challenge will be updated on the day, and it will be more translation;
  • At the end of October, I decided to learn a specific technology, and found that I had learned more about "Tao" and "Fa" before, mainly about the knowledge and understanding of programming concepts, and rarely about "skills" and "tools";
  • Reminiscent of the words of Confucius: "I taste that I don't eat all day long, I don't sleep all night long, thinking is useless, it is better to learn", that is, thinking at the level of thinking and structure before, it is better to learn some specific techniques. Therefore, I decided to find another topic and start from the aspects I am interested in, but the topics of Docker, cloud native, architecture design, and microservice thinking are very hot and competitive, and it may be difficult to start and make my own things for a while;
  • I remembered that Kitex, which was just open sourced, and some related middleware collections in the CloudWeGo project that was just open sourced should have less information and practices, so I started the "CloudWeGo Microservice Practice" series, and made a small collection, but I didn't write it completely. , just wrote about operating data, not a complete business practice.
For me personally, learning about microservices frameworks is a great way to get started, and more importantly, to be able to get involved in the community. In the process of learning about the framework, I often learn about relevant trends in the CloudWeGo Feishu group, take a look at CloudWeGo-related PRs or issues, pay attention to some of the latest developments, and see what can be done by myself. Later, I mainly made some contributions to Kitex service discovery, service registration related components, unit testing, etc.

Personal understanding of cloud native and open source culture

So how did I understand or come into contact with open source culture step by step?
This is probably going back to 2018-2019. At that time, I often participated in some technology summits, Meetup and other activities in Shenzhen. The technology atmosphere of this city is still relatively good. At that time, it was obvious that cloud-native and container-based virtualization K8S must be a technical trend. At that time, because of my interest in Docker, I paid more attention to these related technical fields of K8S.
Finally, by chance, I learned that the Linux Foundation, the Linux Open Source Foundation, will have some technical certifications. At that time, I wanted to take this opportunity to learn some specific technologies on purpose. For example, they launched CKA and CKS, so this is also a kind of learning channel.
Not only that, but I also often pay attention to some open source projects launched by the foundation. At that time, when I was learning K8S, I browsed K8S related documents and mentioned some PRs for their documents. This is my earliest exposure to open source.

Why get involved in open source and the spirit of open source I understand

  • Learn about great open source projects
Avoid being the frog in the well, go out and see what others are doing. For example: excellent coding, code specifications, design patterns, architectural ideas, etc., look for more positive examples and best practices, and broaden technical horizons.
  • The open source world is an inclusive and open world
You can discover, work with, and learn from more and better people in the world on Github. Understanding their technical ideas, ways of thinking, and career planning will also inspire you.
  • Co-construction, starting from bit by bit, integrating into the community brings a sense of achievement
Open source often uses love to generate electricity. The first step in open source is to open up the code, and then it is often driven by the community to drive iteration and evolution. The essence and meaning of open source is the high level of fire that everyone gathers. The bits and pieces we contribute to the community may help many users solve problems in the future. This is the embodiment of the vitality of open source projects and the source of our sense of achievement.

Personal future thoughts on open source

If possible, I would like to use open source as a career in the future. The main reasons are as follows:
  • dream
There was a dream of being able to work remotely, contributing code to an open source product or working in a foundation.
  • preacher
You can deal with people and things you like without thinking too much about commercialization and introversion.
  • Future plan
The current idea may not be achieved overnight, but at least it has found an entry point in CloudWeGo, hoping to better contribute to the community. From the perspective of ByteDance's series of dynamic and strategic layouts, CloudWeGo will definitely be able to make more influential open source projects in the field of Go microservices in the future.
Finally, I would like to share an open source enthusiast. I think he is a very representative and geeky person. His name is Su Yeqin. He is a pediatrician in Yunnan, but he is actually a Linux player in his spare time. If you are interested, you can learn more.
Finally, I hope everyone can find fun in the world of code!

Shared by: Yang Wen


Regarding this issue, starting from my actual experience, I will share it from two aspects:
  1. the angle of doing it yourself;
  1. The perspective of participating in the project.

do it yourself angle

Doing open source by yourself is actually not very hard-core, such as a Repo like Go Night Reading.
Go Night Reading currently has 1W+ stars on Github. In fact, the number of stars itself does not represent anything. It represents more of an experience. From this point of view, I think the reference of the number of stars helps us understand open source. , or rather it is the feedback that open source brings.
  • Clarify the significance of the operation of open source projects
Whether it is a very hard-core project or a basic component, or some content that can solve practical problems and help everyone learn and grow, we have to think about whether this thing is helpful and how to do it. This is actually thinking and participating. A model of open source. If you're trying to earn Stars, that might be counterproductive. In fact, in my opinion, you have to operate it as an open source project. What you can learn from this or understand the spirit of open source and some positive feedback brought by open source is actually quite a lot. You don’t need to pay attention to the number of stars. itself.
  • Project development needs process
  1. In the beginning, the development of an open source project may be initiated by one or two people. In this process, you can introduce some people who are interested in this aspect, or help others through your project, and then attract others to come in, and then gradually expand the scale of the project. No matter what kind of project, this is actually the process. Even those projects that are relatively mature and large-scale at this stage, such as Go Night Reading, PingCAP's TiDB and some other Go Repo, are actually done in this way.
The first thing is to do it, to a level that you think is not bad, and then promote it in your circle of friends or community. For example, CloudWeGo actually solved some of the scene requirements by actually solving the problem, and then open source it, and then developed steadily step by step. An event like ours today is actually helping people in the community. If the project itself is valuable and dynamic, whether you are a team leader or a participant, as long as you join it, you can actually learn a lot.
The above is to start from your own point of view, find a project you want to invest in, or a pain point problem that needs to be solved for you, and then continue to iterate. Gold always shines, and so does the project. As long as the project is truly valuable, it will always be noticed by more people.

Participation in the project perspective

Another perspective is to participate in some projects, but you must make a choice before participating in the project. The selection criteria can refer to the following three aspects:
  • can solve your problem. This is the criteria or criteria for judging how you choose the project and participate in the project.
  • Determine the development language. Choosing a development language with a relatively wide coverage, whether it is project construction or open source operation, will be more systematic and standardized to avoid stepping on pits.
  • The purpose of participating in open source projects. Consider the influence of open source projects, whether you can learn and gain something and output some of your own value for the project.
As far as my experience is concerned, it is recommended to choose a more complete and influential open source project. In 2018, I participated in TiDB and obtained Active Contributor. Although the dimension of my participation in actual hardcoding is not very deep, it is more about participation. A lot of things have to be invested in in order to continue to generate and output your value, and at the same time continue to absorb the feedback from the community to you.
In short, choose what is right for you at the moment, and identify what kind of person you want to be, what kind of role you want to take, and then find some projects to help you achieve your goals accordingly. In fact, participating in open source projects should also be done according to one's ability, choose a field that is really suitable for oneself and interest, and then continue to cultivate in this technical field. Only through long-term technical investment can we really have some relatively good outputs and results in this field, so as to truly learn the core and improve.

Shared by: Li Long


Regarding how developers can participate in open source, I provide the following three reference methods:
  1. Contribute/solve community issues by participating in the First Good Issue;
  1. Through actual combat (project actual combat/performance comparison, etc.), find the points that can be optimized, solve and feedback to the community;
  1. Read the source code directly.

Participate in First Good Issue contribution/solve community issues

  • The general community will have a lot of backlog issues, and you can choose some simple issues at the beginning.
I originally did open source because of the writing business. Basically, all Go services inside Byte will use Gorm as its ORM. When I learned about Gorm, I found that there were actually quite a lot of Issues in Gorm at that time, including a backlog of more than 100 now. So I found that I can get involved in open source by solving some community issues.
Some Issues may be bugs in usage, you can try to fix these bugs. By constantly solving Issues, I am gradually familiar with the framework, and there are simple bugs to fix, which lasts about one to two months, and I am basically familiar with this framework.
  • Open source communities generally provide novice tasks from time to time, and everyone can actively participate.
The CloudWeGo community often sends out some First Good Issues, that is, novice tasks, and you can participate in the community by taking novice tasks. The novice tasks that Mr. Weichao and I took at first were the extension of service registration discovery, some demo services, sample services, etc. When writing these sample services, we could actually find some problems and then fix them.
To sum up, you can participate in open source by sending Issues in the community or actively finding Issues yourself. In contrast, Gorm itself has a lot of Issues, and interested students can choose some simple Issues to participate. CloudWeGo will regularly send out some novice tasks, and everyone can actively participate.

Actual combat (project combat/performance comparison, etc.)

  • Modify the example Demo on the document to feedback to the community.
Some developers may look at the Demo on the document and paste the Demo to run, but find that it cannot be run after pasting directly, or the document is written incorrectly. In this case, you can modify the example Demo on the document to feedback the community's participation in open source.
  • Do some stress tests to depress the performance of different frameworks.
Before, some students like to stress test to compare the performance of different frameworks. This method needs to ensure the principle of fairness and clarity as much as possible, understand the framework in advance, and find out the points that can be optimized and iterated after the stress test, so as to contribute to the community after optimization .

Read the source code directly

Of course, you can also read the source code directly, but it is more difficult and painful for Xiaobai to get started.
The above are three ways to participate in open source. In addition, in terms of object selection, I am more inclined to study the projects that I usually use, such as Kitex or Gorm, which will make me feel better.

Issue two


The main direction of the CloudWeGo open source project is the cloud native microservice framework. What are the main usage scenarios of such projects? What is the value of learning this type of project? What is the experience of the mixed community?

Shared by: Li Long


Usage scenarios of CloudWeGo

If you want to choose a framework with high performance, flexibility and can meet internal customization requirements, the microservice framework provided by CloudWeGo will be a good choice. The CloudWeGo open source project mainly has the following characteristics:
  • High performance (Netpoll / Sonic / Frugal etc.)
For example, the underlying Netpoll itself is a high-performance network library; Hertz has built-in Sonic high-performance JSON encoding and decoding library.
  • Provides a wealth of expansion capabilities
Both Kitex and Hertz provide rich extension capabilities. For example, Kitex is like current limiting extension, Transport Pipeline-Bound extension, etc. Hertz itself has strong extension capability and can meet some more personalized customization requirements.
  • Optimized user API interface
Some user-friendly API interfaces are provided, and they are not particularly complicated.

Learn the value points of this type of project

  • Learning framework layered design / some better design points
[Example] Hertz's four-layer layered design has no coupling between layers and has strong scalability.
  • Learn some performance optimization tips for the framework and expand your horizons
[Example] Why is the performance of Netpoll much higher than that of the standard library in some scenarios?
Reference: https://juejin.cn/video/7046282096435789835
  • Stress test framework performance, discuss exchange and learning
Many students in the community like the stress testing framework, especially for Kitex and Hertz, and its two Benchmark repositories. We very much hope to see these low-level technical optimizations and related discussions in the community, regardless of the differences between the Kitex and Hertz frameworks and how they are used. By testing and comparing the performance of frameworks like Hertz, Fasthttp, and Gin, you can focus on their performance improvement and performance optimization, which is a relatively low-level technical depth logic.

Community experience sharing

  • A good case: Contribute to the brother community by learning excellent design and performance optimization points in the community.
    • [Example] @Halst's discussion on the size adjustment in shardmap · Discussion #306 · cloudwego/kitex , initiate discussions in the community, and apply the excellent and learnable places to other open source projects.
  • A bad case: Some vague questions/evaluations about the framework used.
    • [Example] Classic comment: "The design is not very good/the design is too heavy", you need to give reasons for the specific design where the design is not good/too heavy. Please avoid this case in time, and try to speak with data.

Issue three


What is the difference between the programmer's role as a project user and the developer's role as an open source project designer ? As a community Committer who has gone through this kind of role transition, what lessons can you share?

Shared by: Wang Weichao


Project user perspective

As a project user, consider the following points when considering open source projects:
  • Whether the open source project will be maintained continuously;
  • Is the documentation rich?
  • whether the community is active;
  • Whether the current project is available and easy to use, and can solve the technical problems of the current team;
  • Whether the unsatisfied place can be expanded.

Open source project designer's perspective

As an open source project designer, I mainly consider how to help users solve their problems better or faster. Taking the CloudWeGo project as an example, as a summary of the internal practice of Byte, the open source is to help more people solve some common problems, so the following issues may be considered more:
  • Accept user feedback through maintenance projects, and what common problems are not covered;
  • Develop some new features;
  • Whether the maintenance of the bug is timely;
  • Can you help users solve their problems faster?
  • Document maintenance and continuous enrichment, sorting of business cases.

Issue four


From a community perspective and a global perspective, talk about why big factories are hiring Go engineers? How should programmers plan their career development? Where is the final destination of programmers?

Shared by: Yang Wen


Why are big factories recruiting Go engineers?

  • The evolution of the Go language
I think the important reason for the development of Go is the development of cloud native direction, the field of Docker containerization, K8S including the entire ecology of Grpc connected in series, which has led to or triggered the development of some basic components. Coupled with the application of cloud native and K8S in various manufacturers, it has triggered everyone to do a lot of infrastructure, flow control, distributed link tracking services, and the open source of many basic components in the future have chosen the Go language.
  • Features of the Go language
Based on the language features of Go itself, doing these things is relatively good. The Go language itself is high-performance and simple, with low switching costs and low barriers to entry. In terms of language foundation, the C language can basically achieve seamless connection. If it is a scripting language, it may be relatively necessary to change the way of thinking, but the performance of go is better, and the conversion of PHP to Go can solve a big performance problem. Moreover, Go is quick to get started, and the official documentation runs the demo very quickly, so if you want to learn, don't worry that it will be difficult to get started.
  • Application scenarios of large factories
In fact, large factories will have an actual application scenario and the need to solve problems. The Go language can quickly get started and complete related businesses, and its fast speed and good performance also meet its business needs. From the perspective of infrastructure, in the past, large factories may use C, C++ or JAVA to build the entire link. One set will affect the efficiency. In comparison, the implementation of Go will be faster and more efficient.

Programmer's career development and final destination?

I have a point: language is just a tool for problem solving.
Here are a few things to consider when it comes to personal career development and career paths:
  • You are good at language, and you want to make efforts in technical depth?
  • Combined with your business, do you want to improve your business capabilities, related personal soft qualities and management capabilities?
  • Use technology to solve business problems and bring business value?
From a personal point of view, if you want to look at career development, you may not just look at your technology stack or your technical points, but at what you are good at, and in your foreseeable time period, your strengths and In the direction you want to develop, combine it with your current job and clarify your needs.
The value dimension brought by Go is only a language tool that can help you step into the threshold or help you solve problems. Personal career development mainly depends on your current position and value. Whether Go is used for business or for infrastructure and low-level content depends on your own field or job needs. It is just a language tool that can meet your professional development needs.
In addition, I currently understand that the work of go engineers is still more business-oriented, or the product functions are more, and there are relatively few in the infrastructure or the bottom. Large factories should also have more business or products, but the demand for other aspects such as infrastructure may gradually increase.
Aftership Go applications are mainly on the business side, and some of them will have a certain relationship with cloud native or infrastructure, but they have not covered a wide range, or have a special architecture department like Byte to do the infrastructure construction of the Go ecosystem. There is not yet, depending on the stage of the company's development, it may still be needed and developed to do this.

Issue 5


In the sharing session of the big guys, the bloggers/technology-learning websites/books recommended by the big guys.

Shared by: Li Long


Recommended reason:
  • Designing Data-Intensive Applications
It is a particularly classic book, which will cover some problems encountered in all aspects of the development process, and is relatively comprehensive.
  • "Programmer Self-Cultivation: Linking, Loading, and Libraries"
The content will be relatively low-level related, mainly including linking, loading, compiling, etc.
  • Google SRE Workbook
Not only SRE needs to be watched, but also R&D.
  • "Microservice Architecture Design Patterns"
Some of the problems you encounter when developing microservices, you will get some solutions here for your reference.

Shared by: Yang Wen


Recommended reason:
  • "Mini Habits"
It is more biased towards individuals, starting from the dimensions of the mind and personal thinking of developing micro habits. The idea of ​​mini habits is to imagine a very small dimension that you can achieve no matter what, without the burden. The concept I want to express in the book is that many times doing things is mainly about action. Why are habits so hard to form? The main thing is that you will think it is a burden, affecting your normal work and life, disrupting your rhythm, so you can't do it. So start small. Take a period of time and use a small action to restrain yourself to gradually form a habit, and finally realize your dream or achieve your goal.
  • "Boiled New Decade"
The reason why this book is recommended is that there are many friends who have just graduated. Although they know the mobile Internet, there may be many things that they don’t know very well, or they don’t know much about the ten-year (2010-2020) development of the Internet. In the past ten years, what kind of enterprises or applications have there been? What are some mobile applications and how did they evolve? What problems and changes did you encounter in this process? This book will explain in more detail.
  • Salesforce Legends
This book is related to ToB SaaS in my current industry. Salesforce is a leader, or rather a pioneer, in the sale SaaS industry. This book is an introduction to the entire process of Salesforce from its inception to its gradual development and growth. It is a growth history of Salesforce. This book has a great guiding role for the SaaS industry. How to get to which stage step by step, what method can be used, or what stage will it go through, there should still be a lot of understanding of SaaS in this industry. helpful.

Shared by: Wang Weichao


  • book list
My book list recommendation is actually more inclined to the level of "Tao". "Tao" means that many of these books are some architecture or coding and programming thinking. There is a bit of object-oriented explanation in "The Future of Code" by the father of Ruby Matsumoto Yukihiro that impressed me a lot. The book explains why our current coding and programming should be made from process-oriented to object-oriented. What are its benefits? What is the background? You can take a look if you are interested.
  • blog
Faith-oriented programming, Geek Tutu, these two are more typical blogs. One is for the bottom layer of Go-oriented design, and the other is for the implementation of some frameworks and middleware for Go coding. Go night reading is more comprehensive, if you want to learn about Go's technology stack, you can learn about it.
  • soft skill
This is actually a big topic. In terms of soft skills in the workplace, such as agile development, many companies are proposing them now. As developers, we can also learn about the standard or best practice, how agile development should be done. There is also communication and feedback, each has its own success, and everything has an echo. These communication skills also need everyone's attention.

Q&A

Q: How about the evolution of some of the overall architecture of the Go language? Mainly to support what?
A: It is mainly for performance issues and supports some business development. For some scenarios inside ByteDance, framework tuning is mainly for performance optimization. For example, for the framework, the overall loss of transmission is a real cost on the basis of large-scale accumulation, so some losses in our cost can be reduced by optimizing performance. Because of this, ByteDance, including CloudWeGo, has continued to advance in the field of performance in order to achieve the optimal state. At the same time, I hope to pay more attention to this aspect of the technology, and hope that some extreme performance frameworks can be obtained here, including some students who experience extreme performance, continue to pay attention to our projects.
 
Q: What are the needs and requirements of big manufacturers for Go engineers?
A: The current business side of Dachang’s recruitment of Go engineers will be more. Another part is doing the content of the infrastructure, mainly for the basic framework, and overall tuning its performance. The language involved in this part will be more hard-core, and you may not only use Go but also be very familiar with the core of Go, including language ecology and underlying logic, and then do some performance optimization of related frameworks in it. .
Combined with the status quo of cloud native, it is currently in a state of development in the industry. Many enterprises are in the stage of cloud transformation, and this process takes a certain amount of time, and may not be able to be migrated in place at one time. In this state, a lot of background logic and operations will actually be involved, so architecture adjustment and evolution may also be a career direction for the subsequent development of Go engineers. According to the development stage of different companies, after more companies develop in the future, they may increase the demand for infrastructure construction, promote and maintain their own infrastructure, and thus the demand for Go language engineers will also increase accordingly.

More information

{{o.name}}
{{m.name}}

Guess you like

Origin my.oschina.net/u/4843764/blog/5567708