.

As a tech person, it’s common at the end of the year to do a self-reflection or review to look back and see how much you’ve grown during the year. This writer is no exception and plans to record my annual review from 2017. Although this kind of summary article is not a purely technical article, in order to avoid keeping a running tally, I tried to present it in a novel way to the reader. So we plan to use a more concerned problem to run through the text. Not surprisingly, the pattern will be the same every year. One macro problem a year. The experience in the article is guaranteed to be 100% of the author’s own experience, there are successful cases and failure cases, of course, the reader’s own situation will be different from the author, you can learn from each other according to their own situation. Some of the views in the article only represent the author’s personal views, if there is anything wrong, welcome to discuss and criticize together.


The author’s Chinese pen name on the Internet is “a wisp of broken, flowing and hidden half of Ice Cream”, which is often referred to as “Ice Cream”, “frost vegetable” and “frost”. Since this year’s annual article is so special, let’s give this series a special title. In Chinese culture, four-word idioms can be read more connotation, idioms must also take the word “frost” and time meaning, through a lot of searching, we decided on the title of this series — Star frost flies.

[Explanation] Star frost: the stars run once a year cycle, every autumn begins to frost, because to batch years. Refers to the gradual passage of time.

Tang · Wen Tingjun “Send Mr. Cui” : “Star frost flies no message, misty misty change name.”

Well, I’ve covered all the points in this series of articles, and I won’t do it every year. The text begins.


Technological change is accelerated

Mobile development has been booming since 2010, the first year of the mobile Internet. I also joined the wave after graduation. At the height of mobile development, hairdressers were paid a monthly salary of $1,2 after a few months of training, which shows how hungry they were for mobile talent. However, by the end of 2014, the entry requirements of mobile development returned to rationality and gradually increased. Up to now, basic large companies no longer recruit mobile developers below senior level. Interviews are certainly more difficult than in previous years. BAT interviews may examine cutting edge technology, hotfix and cross-platform, underlying technology, LLVM + Clang, basic technology, WebKit and JSCore. A portion of iOS developers around are also increasingly developing transscript JavaScript. Domestic iOS developers may also feel that the advent of the big front-end era has impacted their technology. (Of course, foreign iOS developers don’t like this, and foreign gameplay is still native.) Going back to the domestic market, when something big front end is gradually eating up the development area of iOS developers, perhaps before everyone is familiar with or proficient in the various frameworks of the front end, then AI appears again in everyone’s view. Machine learning, deep learning a whole bunch of concepts came flooding in.

In late 2012 and early 2013, a large number of startups were born. By the end of 2014, a large number of companies did not survive the winter. In 2017, there are still a large number of startups born and dead, such as various bicycle companies. In the capital market is so cruel.

Some colleagues around also have anxiety, to tell the truth, I have anxiety. Tuyere technology changes every year. At the beginning of the year, blockchain and the three front-end frameworks may not be playing, but at the end of the year, AI will immediately crush another wave. One of the front end gods explained to me, “Technology needs to be followed all the time. If the front end does not follow new technology for several months, it may be strange to see new technology. If you stick with the old technology for a few years, you may learn about the new technology, and the front end framework has changed.” Maybe this answer is a bit of an exaggeration, but it also shows how fast the front end has grown in recent years.

You can also think about how technology has changed in recent years, and maybe feel that technology has changed at an accelerated pace.

The origin of anxiety?

I’ll use iOS developers as an example. There are three graphics that are commonly seen in the iOS developer community.

One is iOS development is out of demand and iOS development is out of demand. These two images are often used as a meme in various discussion groups. Why? Because part of the demand for iOS development is taken on by the front-end developers. Many small domestic companies also directly write requirements on the recruitment requirements of JS, RN, Weex and other technologies. No one wants iOS development that directly leads to not being able to JS. Every time Apple “kills” or does anything with cross-platform or hotfixes, native developers are greeted with a wave of “iOS wants again” emojis. The front end may also have anxiety, anxiety may come from the mastery of the three frameworks, if only proficient in one framework, looking for a job encountered proficient in the three frameworks will also feel guilty.

This is also a source of anxiety, not certain knowledge will lead to not finding a job or a good job.

Another anxiety may be caused by “backsliding”, right?

Tuyere technology changes rapidly every year. For example, the popularity of AI technology this year directly leads to the situation that after fresh graduates get offers from AI, their salaries are directly and ruthlessly beating those who have worked for 2-3 years. People who have been working for two or three years, even if they are constantly working with these new technologies, will feel pressure. So there is the second picture above, please don’t learn, we can’t keep up.

After all, few people can guarantee that they have a large chunk of time to learn new skills every day. In addition to finishing the work of the company, plus the possible overtime hours, people will be tired and need rest when they go home. There’s not a lot of time in the day for learning new skills.

People learn at different speeds and levels of mastery. After comparing with each other, they will find that they learn less slowly than others. If they are forced to compare, they will indeed feel anxious that they are not as good as others.

How to study effectively?

Facing the rapid change of technology, how should we learn efficiently to stay competitive? This writer has experienced nearly 10 months of growth, on this issue has a certain say. Please listen to me put my experience and experience of this year slowly.

I’ll start with psychology and end with my learning method. Come according to this train of thought, hope can let reader can have benefit.

1. Put anxiety and confusion in perspective

Once a programmer is anxious or confused, his sense of accomplishment is greatly reduced. This can lead to a lack of motivation in the long run. But the reality of the causes of anxiety after the previous analysis, but also objective existence. So what should we do about it?

Here’s how I deal with it.

In the process of technological change, if you blindly follow the new technology, have you ever thought about the purpose of following the new technology? Is it for job-hopping or job transfer? Or is it to raise your salary and realize your dreams and self-worth? Both of these reasons are true, but it is important to be careful not to blindly follow new technologies. Blindly following will only lead to eventual enslavement of technology. We need to be the masters of technology, more calmly facing technological changes.

How to choose? If in the case of not changing the post, in the case of no goal, to learn some knowledge that may not be used in the job, it may be a little “blind”. The learning process may not be efficient. Inefficient learning meets the rapid growth of others, a comparison, new anxiety will arise. I know this firsthand.

Here are my own failure cases to share with you.

In July of this year, I bought a Haskell book to study the granddaddy of functional programming. It was also after contacting FP that I became interested in Haskell. I chose the Haskell skill point purely for fun. I rarely (if ever) use it at work. If you search for “Haskell Development engineer” on a job site like Hook, you will feel cold. There is no corresponding position in China. (There are some abroad, but very few). I bought the following book:

I read this one

If you can’t beat the air man in the book, you can’t learn Haskell. I was slow to learn Haskell because I didn’t really get to practice it. After reading the book, I did have a better understanding of FP, but there were few opportunities to use it for development. Haskell is a great language, but my learning curve was too painful. There were a lot of detours. Later, the team leader said something to me. He thought that learning without a lot of practice is inefficient. It turns out that Haskell was inefficient for me. I don’t have a lot of practice. I learned, but at a very slow pace. There are gains, but there is also a lot of frustration. I am not defeated. I will continue my study next year when I am free.

There is nothing wrong with learning. What is wrong is choosing an inefficient, time-consuming, and energy-consuming way forward.

The author’s suggestion here is to give priority to the knowledge used in the company’s projects and dig deep into the technical pain points. Have extra time to get to know others laterally. Same as T – type talent, first specialized, and then broaden breadth. Breadth without depth means you can’t even get a job.

There are two sources of confusion. One is that you can’t see your value to the company and the other is that you can’t see your future development path.

First, the source of confusion is that you can’t see your own value. Many people write business in the company every day, commonly known as “moving bricks”, every day to move, feel a little progress. If you go back to the framework department or the researchers in your own department, they’re working on frameworks or tools every day. When a large number of people use it, it can be very fulfilling. And I think the business has no technical content, and the logic and process in the business will not have any advantage after changing to another company. This idea is actually wrong, wrong and one-sided. How to correctly recognize and change this idea will be discussed in more detail in the next section.

Let’s talk about the second source of confusion. I can’t see where the future is. This confusion, I think, comes from the unclear positioning of oneself. A teacher told me that for the first five years after graduation, you can choose between development, front-end, back-end, mobile, whatever you want. What is this for? It is to find their own interests and their strengths and plan to do the direction of a lifetime. If you can’t see where your future is going, consider looking a little wider and looking at what interests you. If you can do something that doesn’t force you to work overtime, write code late into the night, or pull an all-nighter, that’s what you’re interested in. Once you set your direction, you won’t be confused. Run towards your goal.

2. How to choose business and architecture?

There may be a chain of scorn among programmers, architecture writers despise business. This contempt is biased.

First of all, most companies derive their income from their business. Except for a few companies. Those of you who write business don’t have to think that business has no value, you should understand that you write business to make money for the company.

Of course, students who can write internal framework or tools in the company must have accumulated skills to a certain depth. Frameworks and tools are not created for nothing, they are created to solve problems or pain points. Either to address pain points in development, or to improve development efficiency. How can I deeply understand and feel these pain points without a certain understanding and understanding of development? If you don’t understand them, you can’t create a framework or a useful or useful tool to solve the problem.

I believe that if you can write frameworks or tools, you must have accumulated a certain amount of technical knowledge and be able to understand and see some pain points in development or business. So something has been developed to solve these problems.

For now, at least, most companies in China can’t do without writing. Small companies can survive without writing frameworks and tools, but not without writing businesses. Big companies need to write business. It seems that there is no company in Korea that does not write business. If you make money by writing frameworks or tools that other companies can use, then that becomes the company’s business.

Let’s talk about the understanding of architect or more advanced titles.

We have an architecture team in BU, all of whom are P7 architects and above. What do they do? Someone who provides solutions to current development pain points. I have communicated with them that although they do not understand every line of code word by word, they have an overall understanding of the whole business process and data flow of the company. They have a deeper understanding of the business, a deeper level of understanding than we do in a single business. On this basis, they can also solve the difficulties and pain points in the development, and provide their own thinking for the business development of BU department. Architects also have the ability to discover business value on their own.

You might think that architects don’t write code, but they need solutions. Solutions are in some ways harder than writing code. What was the inspiration for the solution? From the deep understanding of the company’s business and deep accumulation of technology. Lack of understanding of the business, the proposed solution may not be completely suitable for the company. Lack of deep accumulation of technology, the proposed solution may not be the best performance.

I don’t think you should despise the writing part of the business. If you’re a programmer writing business in your company, don’t give up on yourself. The company gives you a job, and your ability to deliver it on time and efficiently is your current concern. When you are good at your current business, you have a deep understanding of this area. Think again about understanding the process of understanding the product line, the line of business that you’re in. Understanding the process while considering the current company’s architectural design why design this way? What are the advantages and disadvantages? What can and cannot be changed, and what is the result of problems left over from history?

Only in this way, when you accumulate a lot of business experience, as well as a lot of good and reasonable architecture design in business scenarios, you can move towards the direction of the architect.

I am a firm believer that when a company pays an architect to do a job, the job is to design and accomplish architectural things for the company. As the saying goes, there is no best architecture, only the most suitable architecture. The value of an architect lies in this. After a deep understanding of the business needs of the company, the architect can customize a set of best and most suitable architecture for the company’s business.

In the company, I sat next to a P8 senior algorithm expert. Before I knew his title, I observed that his usual work content was to implement various algorithms and solve the pain points and development difficulties in the company. Every time a product or developer asks him a certain logic, he knows exactly what it is. For a while, I thought he helped develop all the logic in question. It was not until later when I knew his professional title that I felt the value of algorithm expert more.

In non-academic industrial production, the value of an algorithm specialist is to use a variety of algorithms to solve a variety of business pain points in the company. I saw that he used various graph theory algorithms and machine learning to solve the problem of intelligent scheduling in actual production. He has a deep knowledge of his business. (Of course, in academic research, the value of an algorithm expert should be to create or improve algorithm efficiency.)

In the field of iOS, everyone also all know di elder brother, elder brother is an architect, and di elder brother after communication, di elder brother of the daily work content is to department personnel organization, decision of technology selection, on the business organization, the architecture of the solution, so I think the architect’s job is to solve business problems, to promote business growth as the foundation, on top of that improve the architecture of the company, So that it can provide more excellent external performance, and has the ability to organize people, technology, business.

A good product must be able to perfectly solve the pain points of users. How to understand and discover business value is also an ability. At the very least, this ability is a must for architects. At present, I am also practicing in the business. While deeply understanding the business of the company, I am also considering how to design the architecture. Why should I design this way? I can’t say I’m definitely going to be an architect, but AT least I think I’m working towards that.

3. Different and unified technical division of labor

The author this year front-end and back-end are involved. The front end is the closest end to the user. And now in the big front-end era, you may find that the front-end can do more and more work, before, can be involved in the client, can be involved in the future Nginx. The technology stack of front-end engineers has also become very broad. Backend engineers are less busy than front-end engineers.

The front-end data source comes from the back-end, which is more UI, interaction, and design oriented. The back end pays more attention to interface performance and data correctness. However, with the gradual improvement of cloud infrastructure, the back-end infrastructure has been moved to the cloud, and the configuration and management of this part has become extremely easy, all of which are left to the cloud.

Now front-end frameworks and browsers are advancing so fast that part of the business logic has been taken away from the front end, and even now the front end is taking on more and more of a role in the company. There’s a joke: the big front-end engineer says to the back-end engineer, “You’re just writing interfaces. Spit strings.” The back end engineer said to the big front end engineer, your front end is just a page, the front end is just a beautiful string. What they say is not accurate, but it abstracts from the side of what they do.

So the front end and the back end of the division of labor is different, but they are still a cooperative relationship, one is indispensable.

In Airbnb female doctor Zhu Yun’s small close circle to see a question and answer

Question: as a back-end developer, how can I improve my ability to control complex business logic, design ability and abstraction ability? If you inherit a system that is not stable enough, how do you converge the complexity and gradually improve the stability?

Teacher Zhu Yun is very capable and beautiful to give the answer:

Mastery begins with mastery. Understand the ins and outs of all business logic, know some typical system designs and their problems, and compare the pros and cons. Exposure to some real-world systems. From there, it is possible to apply the appropriate design to the current business logic, to abstract the existing business logic into an existing (partial) solution, or more classical.

Take over a system that is unstable, and if you don’t have enough time to design from scratch and completely refactor it. Know at least a few key elements that affect stability, and prioritize them in order of importance, urgency, and resources (time, skill set, people, etc.) needed to solve the problem and attack them one by one. For all corrective actions, make sure you have appropriate measurements and monitoring so you know how effective the different actions are.

The relationship between architecture and business, as discussed earlier, is also unified. Whether it’s the front end or the back end, whether it’s the business or the architecture, the end goal is the same: make technology drive business growth and double the company’s profits. Students who write frameworks or tools write better frameworks and tools to improve development efficiency, while those who write business use technology to make business stability and logic more stable and reliable. The ultimate goal is to grow the company’s business. I think when you see that, you can see your value in the company. When you find your own value and realize the value of your company, you are less likely to be confused and the sense of accomplishment will be easier to obtain.

4. Efficient learning methods

At this point, I will use my experience this year to talk about what I think the efficient learning method is. By the way, I also summarized the work content and harvest of this year. There are probably three stages.

Phase one, iOS phase

I came here in February of this year. The first task assigned to me after I came to the company was to solve the problems related to memory leakage in the project. Because RAC was used in the project, students in this group did not have a deep understanding of its principles, and it was easy to write codes with memory leaks. When I get here, I’m gonna take care of every memory leak-related problem in the group. Then the group began the componentization work, so I began to research and implement the routing scheme suitable for the use of the group.

A cross-platform solution, Weex, was developed internally. I was also very honored to be assigned to study this content. From reading the source code, I also learned a lot. This is the end of May this year.

The second stage, the front-end stage

After June, the group received a new job, I also took the initiative to apply to write this live front-end page. After understanding Weex, we chose Vue as the framework. So I started writing Vue related projects.

In just over 2 months of project iterations, I learned a lot. The company’s internal use of various scaffolding, front-end development process, front-end page buried, front-end release process, front-end project continuous integration, page performance monitoring APM, front-end engineering, componentization… All of these things exist in iOS as well, but I was exposed to them in just a few iterations. At the same time, compared with other students began to say that learning front, my progress is relatively “fast”, at least AFTER I complete the whole set of learning, he is still in the process of exploring JS.

Although MY front-end experience is still very young, I am still competent to write basic business iterations as a P4. I also deeply know that the content of the front end is very much, only a few months is just a fur in the fur. But at least it gave me a taste of the daily grind of front-end development.

I think MY front-end learning is efficient. Why efficient? Because I learned by doing. Use the company’s real projects to train yourself, really study very efficient. For the problems encountered in the project every day, I would search for solutions on the Internet purposefully on the subway. The purpose of learning is very clear. I made much faster progress than my non-practicing classmates who looked at grammar every day.

As for getting started with the front end, I can offer my route.

The first, of course, is to understand JavaScript and Css. The way to get started is to read. I looked at these books:

The Definitive guide to JavaScript (6th edition), advanced JavaScript Programming (3rd edition), The Art of JavaScript DOM Programming (2nd Edition), Introduction to the ES6 Standard (2nd Edition), Effective JavaScript writing quality 68 Effective Ways to Write JavaScript Code Speaking JavaScript

After that came a lot of actual combat project training. Participate in the ravages of corporate business iterations and learn a lot quickly. It takes a few iterations to get through the process.

Of course, I practice my own tackling on Github to improve my training. At that time, I was also very interested in the Electron framework, so I wrote this open source project Vue Family bucket + Electron to develop a cross-three-terminal application.

In addition, I also recognized 3 masters in the company and took my front-end technology to fly. One is zhihu front end big V, @AoTianyu, this girl has a lot of titles, Are you hungry? Front end mascots, Tiange, Tianzun… I can’t count how many. She’s been working in the front-end architecture group right out of school. She’s very capable. Again, I would like to thank her for her patience in answering my questions. Answered a lot of questions along the way. (Here, a group of amway girls have opened Live on Zhihu. If you are confused about the way forward, you can listen to it and it will definitely answer your questions.)

The other master is Peng Peng who joined the company on the same day as me. He is also a front-end developer with very strong technology. I have a very good relationship with him, too. Usually there are front-end problems will ask him.

The last master was my roommate in college. He was also very good at the front end and would ask him for help when he didn’t understand.

Thanks to the above three teachers for their answers and answers, they carried fly the little white who had no clue at the front.

To summarize this section of front-end learning, a lot of project practice + active and purposeful reading learning + guidance = efficient learning.

The third stage is the Go stage

In July, I transferred back-end business with the team leader. In just a few months, it grew very fast. The basic usage of Go is well understood. My Go learning and growth route is also summarized and recorded, interested students can see this article “Go beginners’ growth road”, here is no longer repeated.

After converting back-end business, the language is not much of a problem, feel more headache is the whole backend ecosystem. Many things such as the tide will drown me.

The business in our group is all about location. So I did a really deep dive into spatial search. All of the research results are also published here in the Spatial Search Articles Collection.

Participated in project iteration so far, all back-end development processes, Thrift RPC framework NEx, Docker, K8S, ELK logging, Redis, Huskar SOA configuration, GoProxy configuration, ETrace monitoring, MaxQ delayed message queue, Eless publishing, Workflow, PostgreSQL, Google S2…… These basic uses are mastered. Watching the development of their own service QPS gradually grow, the heart is more a sense of achievement. This project is like one’s own child.

In addition to reading and studying by myself, the team leader and team members answered all kinds of technical questions I encountered in the project. The same rhythm that took me flying. If one learns by oneself, one gropes by oneself, if one wants to master above so many things, do not know how long to understand.

To summarize this back-end learning, again, lots of project practice + active and purposeful reading + guidance = efficient learning.

The above experiences are relatively successful experiences. Compared with Haskell’s learning, I made remarkable progress at a “fast speed”. While solving the pain points of the company’s projects, I also quickly learned and improved a lot of knowledge. Recall what the group leader said before, practice in the company’s projects is the fastest growth. It took me a year to prove this to be true.

5. To summarize

How can programmers maintain high growth rates in the changing tide of technology? My answer is that practice in the company’s projects is the fastest growth. First of all, the iteration schedule of the business will help you not to delay your learning. You must complete the assigned tasks in the schedule, which is a good guarantee for your learning progress. Secondly, the practice in the actual project will enable you to have practical experience in language proficiency, language ecology, development process, bug search process and monitoring of all aspects. And the actual project can also let you encounter a variety of pits, the pit step on the growth. The correct way of learning should also be to combine learning with specific business scenarios to help companies develop business services and create value by using their own technologies. In this case, this growth must be the fastest.

One computer guru advises programmers to grow up learning at least one new language a year. Judging from this year’s results, I’m done.

After a few years in the business, programmers should look beyond their own development language. You can look beyond the development language and think at a higher level. Of course, the author above these thinking in the level of higher people may be average. The people who are better at it must have worked their way up to the point where they were able to influence the whole industry. So that’s what I learned this year outside of technology. All come from my own “valuable experience”. Hopefully, you’ll find something here.

Of course, everyone grows in a different way. I just provide a method that I find feasible after practice and verification. If readers have a better method, they are welcome to share their own better method. If the readers themselves lack some methods for growth, they can consider trying the methods of improvement in this article, mutual encouragement.

6. In the future

The group started using Python again for business. This language in this year’s fire through the sky, next year I also learn well. In addition to that, Go is further refined.

The last

A year ago, ali from P9 asked me this philosophical question: “You’ve been a programmer for so many years. How do you feel about software development?” “I said,” Front-end or iOS?” “Can you go beyond the development language? Give your own perspective on the definition of development, the process, etc.” I couldn’t answer it immediately, not because I couldn’t say it, but because I thought the question was too broad to answer. Until now, I have had my own answer to this question after being exposed to different development tasks in different languages and positions. Asking such questions may reveal a person’s level of competence from the depth of their answers. If the software development does not have several years of training, do not have enough wide knowledge and depth, the answer to this question is a relatively simple answer. This is like you have mastered the high number, test a pupil to solve a single equation. No matter how he solved the equation, how he did it, you could tell at a glance that he was good at it. In the same way, the above question is also a god standing on high, no matter what your answer, in his seniority, the depth of your answer can roughly tell how much your seniority.

I don’t know whether readers have a perfect answer in mind when they see this? This is a question I plan to save for next year as the topic of 2018.

Finally, a bit of recent experience. There is a holy book, “Clean Code”, the Chinese translation is the way to Clean Code. The author of this book has taken it out again recently, intentionally or unintentionally. Reading it a second time, a third time or even a fourth time is a different experience. Reading the first time may be due to their lack of qualifications, and the author of the book does not resonate with many places. More is to read the text and code in the book, experience the author’s intention. Of course, this is the most basic. But I recently discovered that when reading a second time or third time, and the book the author can produce more resonance and resonance will come from its own development process, with some examples in the book’s own experience, or from the refactoring a function, or from the racking their brains to design a structure, or from a particular demand, All kinds of personal experiences will recur in my mind. Part of the book I felt I had internalized. And of course there’s a part that doesn’t resonate.

Reading a book over and over again will give you different insights into the various stages of a programmer’s development. At first, the book feels very thick and boring, but after you have experienced a lot, you will find that the book is actually very thin. Looking back, the book is like a memoir of your own different stages, and you have experienced a lot of the contents of the book yourself. This may be their own level of growth. This is also the most direct physical embodiment of their growth.

Well, that’s it for 2017. If you have any objection or want to discuss, please feel free to communicate with me.

On December 30, 2017, in Sydney


Reference: Vue Family bucket + Electron developed a cross-three-terminal application Go beginner’s growth path space search article collection

Making Repo: Halfrost – Field

Follow: halfrost dead simple

Source: halfrost.com/halfrost_20…