Hello, I’m Miss Huang.
Recently, I often see some similar questions in Zhihu — “Is it true that the average programmer can’t survive the 35-year-old crisis?” . These questions are usually asked by people over 30 who want someone to share their experience.
I am 33 years old this year, and I have been working for more than nine years since graduation. I will be 35 years old soon. So I would like to talk about my views on this issue based on my own working experience and some phenomena in the industry.
Why 35
Have you ever wondered why there is a crisis at the age of 35? In fact, 35 is just a approximate number. Usually, people around this age have married, and most of them are burdened with mortgage and car loans, so there will be certain economic pressure.
In addition, with the increase of their own age, physical quality is not as good as before, like young people to work overtime, or even stay up late. In addition, the parents have a small family, also need to part of the energy to take care of the family.
Many people begin to worry that when they really reach this age, if the company downsizes, will they be the first to lay off themselves? If I go out to look for a job again, will I be rejected everywhere?
That’s why most people are anxious, but if you think about it, isn’t this a common problem? It doesn’t seem to be tied to the programmer profession, and most industries have this problem.
So why do programmers seem to be more sensitive, and do companies really reject older programmers?
Do companies really hate older programmers
In my opinion, companies do not exclude older programmers, but older programmers whose abilities do not match their seniority. If you were a business owner, would you hire an older programmer with more than 10 years of experience and only two or three years of experience?
Some say the profession is getting better as doctors get older, because they get more experienced with their years of service. So aren’t programmers? In my opinion, they should be the same. The longer they work, the more solid their technical foundation is, the richer their work experience is, and the broader their technical vision is.
The group of programmers is a pyramid structure, and the current situation is that there are many people at the bottom of the tower, because the threshold of this industry is low and the income is high, many people flock in. There aren’t many people at the top of the pyramid, and the industry is starved of technically competent programmers.
Therefore, excellent enterprises for those fierce old programmers, not only will not exclude, but very eager. Enterprises in the recruitment of some architects, technical experts, also clearly write xx years of work experience, which fully shows that not only technical ability, rich work experience is also important. Length of service should be an advantage, not a disadvantage.
But if you’ve been working for years and you’re still at the bottom of the pyramid, it’s inevitable that you’re going to get knocked out. How do you climb up the pyramid and survive your 35-year crisis? Don’t worry, I want to share with you my personal growth experience first.
My story
I graduated from University of Science and Technology Beijing with a master’s degree in Computer Science and Technology in 2012. My undergraduate results can also be successfully recommended for admission to the graduate school. During the postgraduate period, I was sent by my supervisor to practice, so I skipped many classes, so my comprehensive scores were not ideal. However, my professional scores were not bad. As long as there were large programming homework courses, my homework was often taken as the object of reference by my classmates.
I didn’t learn the front end at school, I taught myself C#. Different from today’s students, we didn’t have many learning materials and ways at that time. Unlike today’s online courses, I learned by reading books and writing codes. Of course, I also did internships and part-time jobs in some small enterprises at school.
It was not until graduation that I was embarrassed to find that none of the first-tier Internet companies offered positions in C#. In order to enter a big company, I chose Web front-end development. Although I did not have front-end experience, fortunately, I wrote a lot of code in school, participated in competitions and won awards, but my tutor in Baidu still let me pass, so I joined Baidu as a front-end rookie.
Baidu’s first year, mainly business development. As I just started the front end, I mainly did some simple page function development in the early stage, and gradually came into contact with some animation development and slightly complicated interactive logic.
I remember at that time, we often had some operation lottery activities during the festival, and the students at the back end wrote a set of universal lottery procedures for this purpose. In fact, these so-called Web sweepstakes are nothing more than the front end initiates a lottery request, the back end returns the result according to a series of processing, and the front end displays the result through some kind of animation or game.
The lottery process is similar, so it can be reused on the front end. After a discussion with my tutor, I decided to make a set of general lottery JSSDK. The user can configure the game type of lottery (turntable, slot machine). Through this configuration, the user can realize a set of lottery system in a few lines of code.
This experience made me learn to actively find the pain points in the business and improve the efficiency of research and development with technical means.
In the second year, I followed my tutor to do the front-end performance optimization project of our home page, and the performance optimization this time was realized from the perspective of engineering, without any perception of the business code writers.
At that time, we referred to the technical solution of Facebook’s BigPipe, which divided the page into multiple blocks of Pagelet, and each block was rendered with front-end JS. Because we were using PHP’s Smarty template for page development, each block would be identified by a Pagelet tag, and then the JAVASCRIPT, CSS, and HTML of each block would be dynamically analyzed and collected at runtime in PHP, and then the CSS would be loaded when the block was rendered. Render HTML after successful loading, and finally execute JS.
At that time we have realized the front-end modularization, each JS module can use the require keyword to load other JS modules, also support require.async to load asynchronous modules, this part of the code is handed to me to write. At first, I didn’t know much about this area, so I studied the implementation of some mature schemes in the industry, such as require.js and sea.js, and finally realized a complete set of front-end modular schemes according to the characteristics of our framework.
After the implementation of this performance optimization framework, through performance monitoring, we found that the performance optimization effect of the first screen was not obvious. Although we adopted the block rendering scheme, we still loaded and rendered all the resources of the block in the first rendering.
So the task of continuing optimization was handed to me. I searched some articles about first-screen optimization, among which a first-screen optimization article on the home page of Taobao inspired me greatly. It was mentioned in the article that the premise of rendering the browser as soon as possible is to make the DOM rendering of the first screen as little as possible.
Our home page has several screens, so it’s not necessary to render anything that isn’t the first screen for the first time. Therefore, BASED on the front-end framework I implemented before, I implemented the delayed BigRender: for the invisible block can not render, when the user scrolls the page then render the corresponding block. This reduces not only the number of DOM renderings on the first screen, but also the number of images and data interface requests for invisible modules.
Through the optimization of BigRender, the performance of the first screen of our page has been greatly improved, and no matter how complex the business is written, it will basically not affect the performance of the first screen.
This experience made me learn to refer to mainstream solutions in the industry and learn their articles or source code when encountering problems.
The front-end framework we developed was built and packaged in PHP. I used PHP to implement an online click-through packaging tool, which was used to implement split chunks before launching. However, this was a process requiring human participation and did not fully automate the construction process.
At that time, Baidu was pushing a front-end building tool FIS internally, and they also had a PHP + Smarty front-end solution based on FIS. However, compared with the front-end framework we implemented, this scheme only realized the front-end modular development, without any improvement in performance optimization.
In fact, the implementation of FIS itself is very flexible, support plug-in, a bit of the meaning of webpack plugin. So I decided to study the construction mechanism of FIS, and referred to the implementation of its existing plug-ins, and then wrote relevant FIS plug-ins to cooperate with our runtime framework. Finally, I came up with this thing, and realized the automatic construction scheme of the front end.
When I finished FIS, I thought it was not enough and wanted to push my front-end framework into the industry. At that time, FIS was mainly used internally by Baidu, and gulp was a popular construction tool in the industry. Therefore, I studied a wave of GULP and developed a set of gulP plug-ins to simulate the construction behavior of FIS. Although the program of GULP has been successful, it is still too young to be promoted.
This experience expanded my knowledge of how to write front-end build tools using Node.js.
Later, due to the low technical requirements of the business, I did not grow much in Baidu. Therefore, after working in Baidu for three years, I chose to leave and join the unicorn company — Didi, which was then developing rapidly.
When I was interviewed for didi’s public sector, I had a good conversation with one of didi’s technical talents. Although I only had three years of work experience, he was very positive about me and gave me an offer that was hard to refuse.
Coming to didi’s public sector, I experienced what it was like to start a business in a big company. As the first front end of this department, the infrastructure here is almost zero. The department manager talked to me for the first time and told me what kind of things we would like to do, you can see.
Baidu’s infrastructure is quite perfect, from the development of the project to the final online, there are mature systems. When I came to Didi, THERE was almost nothing, even the front-end static resources back machine, I applied to OP.
After I came to Didi, my development direction shifted from PC to mobile, and the front-end framework I worked on in Baidu was no longer applicable. At that time, front-end engineering was not long emerging in China. Teacher Zhang Yunlong, the preacher of this aspect, published a number of blogs, which inspired me deeply after reading.
In UC, Zhang Yunlong developed Scrat, a modular Development framework for WebApp based on FIS secondary development. I saw it and thought it would work in Didi as well, so I asked him about it in detail, and we started Scrat in Didi, with a separate development model for the front and back, and zepto as a runtime enhancement library.
This experience made me realize the process of putting together the whole front-end engineering scheme by myself.
Since I joined the didi public department, I need to write many company-level JSSDK, such as H5 unified login JSSDK, which can get through the login state of each page on the mobile terminal. Unified map JSSDK, gaode map and Tencent map to do the packaging; JSBridge SDK smoothes the differences between Web and iOS and Android terminals.
The users of these JSSDKS are also developers, so in addition to functionality, flexibility is important. In developing these JSSDKS, I also referred to some of the good design ideas I had seen in the source code.
These experiences not only taught me how to develop good JSSDKS, but also increased my influence within the company.
My main business in Didi is to develop the homepage of WebApp. What I do is to gather various business lines and ensure their smooth integration and independent launch. I mentioned the difficulty and challenges in Didi WebApp 5.0 Vue 2.0 Reconstruction Experience sharing a few years ago that the overall architectural design has a bit of a “micro front end” flavor.
This experience trained my ability in architecture design and external communication.
Since I wanted to return to my hometown for development, I resigned from Didi in 2018 and joined the current company Zoom.
As a matter of fact, I have been paying attention to the employment opportunities in my hometown since I graduated in 2012. However, hefei, a second-tier city, does not have any good Internet companies. Until I heard that Zoom was a good company later, I interviewed and joined Zoom with the recommendation of my friend.
When it comes to returning home for development, I would like to say that in addition to paying attention to the employment opportunities in my hometown, MY goal for myself is to return home as a technical expert.
At 18 or so, I had a feeling that, at least on the front end, I didn’t need much guidance, and that I could keep learning new skills for my own use. Frankly speaking is in Beijing technology has learned enough, can go back to build home.
After coming to Zoom, I made a full study of the current situation of front-end development of Zoom Web project, analyzed the pain points and problems, and then combined with the characteristics of Zoom Web products, I designed a complete set of architectural design schemes with the separation of front and back ends, including project initialization, local development, joint investigation, testing, online and other links. And landed in multiple projects.
I also produced a lot of tools and plug-ins along the way. Through the new architecture solution, the front-end can have the most advanced development experience, greatly improving the development efficiency; From the perspective of project deployment, the front end can independently publish and deploy the project, decoupled from the huge Web project, and can support rapid iteration and grayscale release of the project.
At the same time, I fork ZoomUI based on ElementUI, and work on resolving Accessibility issues and performance optimization. In addition to basic components, we also design business components for some business scenarios to greatly improve development efficiency.
In addition to front-end architecture and common components, I was also independently responsible for some complex business development and often helped my colleagues solve various technical difficulties. Although I have been working for many years, I still insist on writing code in the front line and enjoy it.
In fact, looking back on my work these years, it is not difficult to find that in addition to daily business development, I have also done a lot of different work, tried different directions, every year I have a lot of harvest.
But in fact, I did not have a smooth road, because most of the things I did at that time are certain challenges, there will be a lot of difficulties, sometimes it is very painful, and even need to feel the stones to cross the river. But once I overcome these difficulties, I feel a sense of enlightenment, a great sense of accomplishment, and improved skills.
In addition to my work, I also take part in my spare time, such as doing courses, writing books and articles, which not only bring me extra income but also improve my ability.
In the process of doing these things, I turned over the vue.js source code, but also feed my work. For example, in order to support CSP, I changed Vue. Js 2.6.11 to support CSP. I also studied vue.js source code some performance optimization techniques, applied to my development work.
My philosophy is that it’s ok to earn extra money, but you have to improve yourself in the process, otherwise it’s a waste of time. Of course, the premise of doing these things is that your technical ability has reached a certain level, if you are still in the middle level, and self-learning ability is not strong, I highly recommend buying some paid courses.
For me, there is no 35-year-old crisis because I can continue to bring value to the company, which in turn is in great need of technical expertise in the front end. What’s more, I joined a fast-growing company with industry-leading business and abundant cash flow, so I didn’t have to worry about any problems. I also enjoyed the engineering culture and WLB’s comfortable pace, and I could have stayed with the company for more than a decade.
Even if I have to leave this company for some reason, with my experience and technical skills, I believe that many excellent companies would offer me an offer.
The growth of ordinary people
Maybe some people will look at this and say: Huang, you are too Versailles, and not everyone can join a big company after graduation like you. Yes, maybe some of my readers haven’t worked in a big company yet and have mediocre degrees. What should they do if they want to grow up and survive the 35-year-old crisis?
If you happen to be one of those people, before I answer this question, think about two things: Do you really love writing code? Are you willing to go the extra mile? If you can’t do both, chances are you’ll still be a mediocre coder at age 35.
Harsh, but that’s the way it is. First of all, why do you love writing code? Because interest is still very important. It can drive you to take the initiative to learn, but also let you stick to it when you meet difficulties and challenges.
Secondly, why do you need to pay more efforts, because compared with those graduates of 985, 211, your starting point has fallen behind. They have worked hard enough as students and have probably developed good study habits, and if you want to keep up with them, it’s almost impossible not to put in more effort than they did.
This is not to create anxiety, but to let you understand a truth, no one can casually succeed, all walks of life is the same, those in your eyes, successful people behind the hard work only they can understand.
So how do you do this? I wrote many of these years ago, but they still apply, in my articles “Uncovering the Evolution of Beginner, Middle, and Advanced Programmers (The Front End)” and “How to Become an Independent Engineer in your Company.”
Once you know what you need to do, it’s best to make a plan of what growth goals you want to achieve within what time frame. As we get older, and especially when we have a family, we do get distracted by the small stuff, so it’s best to be a senior r&d engineer or above by the time you’re 30.
What kind of talent do big companies need
If you haven’t worked for a big company, my advice is to join a big company for a few years. Compared with small companies, big companies tend to be better in terms of salary, talent development and promotion. And there are a lot of great people in big companies. You learn more and grow faster when you work with them.
So what are big companies looking for?
For this year’s students, like to recruit good academic background, internship experience, solid technology, strong learning ability, high subjective initiative.
As for social recruitment, I prefer to recruit those with large company background, rich work experience, solid technology, strong learning ability and high subjective initiative.
It can be seen that the three qualities of solid technology, strong learning ability and high subjective initiative are all valued by large companies, no matter in school or social recruitment.
- Technology of solid
Being technically solid means that you have mastered the technical knowledge of your field of expertise. If you want to achieve solid technology, you need to continue to study and practice.
You can learn by reading books, watching videos, etc., and then apply what you’ve learned at work. Therefore, the technical knowledge we learn should also be related to the job content.
Obviously, if you want to be skilled, you may need to try different things on the job and then strengthen your skills through repeated study and work demonstration.
- Quick learner
For graduates, a good academic background and school performance is a reflection of strong academic ability; For those with work experience, being able to learn and master a new technology quickly is a sign of strong learning ability.
So, how to improve learning ability? My experience is to think, to summarize, to ask questions. This is why I like to see all kinds of source code, from the source code I can not only understand the implementation principle behind all kinds of technology, but also learn a lot of good programming ideas and development skills, and summed up for my use.
There are also similarities and references between stacks, so mastering one stack makes it much easier to learn the others.
- High subjective initiative
High subjective initiative is reflected in taking the initiative to undertake some technically challenging work, and taking the initiative to learn and research some new technologies.
People with high subjective initiative usually have a characteristic that they are interested in technology, and they are willing to use technical means to solve problems. Either they are active in the open source community or they regularly publish high quality technical blog posts.
This kind of person basically regards the profession as a hobby, so the output on the work sometimes exceeds the expectation, how can such talent enterprise not love?
These things are best left alone
After talking to you about what you should do, I’d like to share with you some of the best things not to do.
- To touch the fish
Many people complain about endless work and the need to work overtime. In fact, most of it is due to low efficiency. There are usually two reasons for low work efficiency. One is that their own technical ability is not enough, leading to low development efficiency, but also often spend time fixing bugs; Another is to fish at work. It not only wastes a lot of time, but also leads to a lack of concentration on work and affects work efficiency.
It takes time to improve your technical skills, and you can’t suddenly become a technical genius, but you can eliminate cheating at work. You’d better set up a free time to concentrate on coding and improve your work efficiency.
Once your productivity increases, you rarely have to work overtime. In my nine years of experience, I rarely work overtime, and I only accept occasional overtime, such as a rush on an urgent project, but that should not be the norm. If overtime is the norm, you should think about whether it’s your problem or the company’s. If it’s the company’s problem, decide to move on.
- fry
In recent years, the a-share market is good, and many people start to speculate in the stock market. The 721 rule of the stock market, namely 7 deficit 2 smooth 1 surplus, major retail investors have an illusion, feel oneself is that profit.
But the harsh reality is that even at the best of the 2015 bull market, most retail investors lost money. No matter from the news, capital, professional degree, retail investors are not the main capital of the opponent, but also like to rush inside, this is not to send money to the main force?
I have my own bets, but I don’t have a deep understanding of the stock market, and personally feel that my behavior is no different from gambling. Although I fry is to make money, but I am very clear that their money is completely rely on luck, the money earned by luck will eventually be lost by strength, so I earned a wave of decisive liquidation not to play.
If you’re just a non-professional player who needs code, I would strongly discourage investing in stocks. One is not professional, not the main opponent, like you are just a boxing fan, but would you stand in the ring and fight a professional fighter? Another reason is that investing in stocks is so distracting that you can’t help but waste time looking at the market.
Fry fluctuation is too big, you made money, some time the income that compares oneself to go to work is tall still, can produce a kind of to go to work is inferior to fry illusion, but think a little more know, the country how may allow individual investor to fry casually can make money, in that way who still go to work? The fact that the stock market is going down most of the time, and you’re watching your account get smaller and smaller, can be very emotional.
You might say, well, I’ll spend more time researching stocks. If you have less than $20 million in cash, you won’t get as much for spending time researching stocks as you will for investing in your own growth.
I am not against investment and financial management. My suggestion is to leave professional work to professionals. You can use your spare money to invest in some funds and buy financial products without spending much time on them.
- Excessive entertainment
After a hard day at work, it’s good to come home and relax, but there’s a limit. If you go home and spend an evening binge-watching short videos, or playing video games, that’s excessive entertainment.
My suggestion is to allocate some time to study and do some exercise, which is a healthy lifestyle.
The other way
I personally prefer to write code, so I will choose the technical expert development route. In addition, do technical management, independent entrepreneurship is also a way out programmers.
But whether you’re in technology management or starting your own business, you have to be in technology for a long time and have good technical skills.
For technical management, the stronger the technical ability of the manager, the more people below the manager will recognize; For self-employment, the technical requirements will be higher and more comprehensive.
Of course, since MY knowledge of these two parts is limited, I won’t go into them. However, it should be remembered that the three development directions of programmers: technical experts, technical management, and independent entrepreneurship, all need enough technical accumulation in the early stage.
Write in the last
The core idea is that as long as the technology is strong enough, there will not be a 35-year-old crisis, after all, programmers are technical, how can skilled people lose their jobs? So make an effort to improve your skills while you are young, so that when you are 35, not only do you not have to worry about your job, but you can spend time with your family and enjoy life.
Of course, it’s not easy to improve your skills. You have to be willing to jump out of your comfort zone and pursue progress. You have to be able to break through the bottleneck and be lonely for a long time.
In addition, it is also important to join a good company, such as our company. But the premise of joining is that your technology can meet the standards of enterprise employment. So it’s very important to accumulate skills on the job. Don’t wait for an opportunity to come along and blow it.