Recently, a programmer from another project team in the same department was “ Voluntary resignation ”了, Although I have never worked with this programmer , But I've heard about his internal sharing once or twice , I think the technology is very good . Later, I chatted with a well-informed colleague , The real reason is that the boss thinks A Difficult to communicate , Make other procedures ,QA All complain . Years of work , A lot of colleagues around me come and go , Active or passive , It makes me think about what kind of programmers are qualified programmers .

   Although everyone claims “ Manon ”,“IT migrant worker ”, But I believe , It's just self mockery or self denial , Most programmers should still recognize their profession , of course , I'm not a good programmer , Because I've never contributed code in the open source community , Not proficient in whiteboard algorithm , Not crazy about technology , No geek. My goal is to be a qualified programmer : Do your job well , Yes, I can afford my salary , Balance between life and work ,996 What is it? I can't accept it .

   Address of this article :

   For programmers , It is of course very important to pass the technical level , It's hard power . But it's not good only to know technology , After all, most programmers still have to deal with people , Soft power is also indispensable . How to be qualified , I think there are the following points :


Solid foundation

   The field of computer is a field of rapid renewal , There are new languages every once in a while , frame , Thought production , I'm tired of following every new technology . But think about it , In fact, there are not so many new things . Many new things are just packages of existing technologies , Or other technologies used for reference . For example, cache database redis,memcached, Isn't the basic idea of caching in the operating system ; Partition and replica set in distributed storage , No, it's in the file system RAID Is it an extension of ; also Google Of MapReduce frame , It's not from the functional programming language map
reduce Do you . Master the basic knowledge of computer , Be able to see new technology more essentially .


Make good use of tools

   Sharpening your ax will not delay your job of cutting wood , It's very important to build your own Toolset .

   A lot of tools will be used in the development , Whether it's an editor , Debugging tool or monitoring tool . Everyone likes to argue about which IDE better , But it doesn't make much sense , The key is to be able to use your favorite tools skillfully , Master various shortcut keys , Highly customized , This can greatly improve work efficiency . And for the repetitive operations in daily life , Best script automation , Here are some suggestions python, Writing gadgets is fast .

   in addition , Two tools for programmers , That's browser and VPN. The latter is known to all , Not much , It's mainly because of the latter that we can play the power of browser . Browser is used every day , But how to use it efficiently , For example, search on the specified website , By title ,url filter , Choose the right keywords
It's still worth studying , For programmers , To use a good browser , It's got to have the next ability : English


Good English

   Have to admit , In the field of software innovation , China is still behind the rest of the world , New technology , First hand information is in English . Before new technology is widely used , We found a translator in Baidu machine
translated, Or mistakes . The biggest problem of translation depends on the translator's own level , Even if the translation level is very high , But there are often different translations at the same time , Lead to confusion when reading articles , It's better to read the original English directly . Most original texts , Remove professional vocabulary , It's better to understand , and , I found a lot of great projects , There are very easy to understand documents .


Good coding habits

   Code is written for machine execution , At the same time, it is also for reading and maintenance . The maintainer may be someone else , It could be a few months later . Good code specification , necessary , Clear notes can help you to be less greeted by your ancestors .


   For code style , There are also many online disputes , The most important thing is to keep the unity within the project . As technical director , Make sure to top the code at the beginning of the project , It's hard to unify when a lot of code is piled up , And do a good job review.


Keep learning

  The profession of programmer , Compared with other professions , Maybe a lot younger . Especially at home , Many of the oldest programmers have been transferred to management , Again 10 year 20 year , What will happen to us , No one knows . Huawei recently 35 Year old programmer's resignation , It's a wake-up call for us , Beyond sorrow , I have to study hard , If you can't fight for strength, fight for ability and experience

   Learning is complicated , I think two things are important : Basics , learn in order to practise .


Independent thinking

   Qualified programmers solve problems , Rather than implementing a solution . product manager ( Especially a product manager who knows a little bit about technology ) A requirement of may be just a solution to a problem , He thinks this method can solve his problem , So we think of the solution as a requirement , Not the real problem . Programmers should communicate actively , Ask more why , Understand the real problem , Maybe there's a better solution .

   There was an example before , Demand given : For every user ( Users have unique id Marking ) Generate a unique invitation code , At the same time, we also need to pre generate invitation codes for users that may be added in the future , Save to database . And the real need is for old users to share their invitation codes , If the new user uses the invitation code , Old users will be rewarded accordingly . And my plan is very simple , Unique for direct users id Generate reversible invitation code , This eliminates the need for database storage at all .


   Product managers often change requirements, which is the biggest headache for programmers , As a programmer, I should also stand PM Thinking from the angle of , help PM Analyze the essential needs , This may reduce the need for change . of course , If you have to do something, love something , Need to have a certain understanding of the business .


Think before you act

   When you write code, think it out before you write it , Instead of writing a bunch of code first , And then I started to repair it bug.

   Cease bug When , Take a look at the context , Find out why bug, Modify this bug Possible impact , And then modify it . There are two kinds of negative textbooks : The first is to change the code at will , But I don't know why it's fixed , take a chance , Maybe there's another one bug I can't find it . The other is , Headache, head and foot pain , Do not carefully assess the impact of the changes , This often leads to new problems .

   One way for programmers to grow is to bug, It can't be used by others bug, But the premise is to find out bug Why , In this way, similar mistakes can be avoided , Gain something .  
Smooth communication

   It's not like a tongue spring , It's not a hoax . All you need is to listen patiently , Then express your opinions clearly .

   Current software development , It's no longer a single fight Era , Most software , Products need more than one person , Multisectoral collaboration . And communication , Communication is very time-consuming and labor-consuming . Before communication , Think about the goal first , Organize the language , Try not to diverge , Don't digress , Right things wrong people . For important things , Keep communication records , Better have mail , So that we don't get confused .

    Communication is a complex art , The most basic thing is to understand , Make it clear .


Manage your temper


A programmer , To be PM resentment , To be connected interactively , To be QA resentment , The demands of re metamorphosis may be ,QA It's for you BUG May not belong to you . and , And pig like teammates ( I'm not like that in other people's eyes ) And subordinates . No matter who is right or wrong , Lose one's temper , It's no use arguing , After the fight, we still have to solve the problem .calm
down, If you have anger, you have to wait a few seconds , Maybe think about it rationally these few seconds , Can solve the problem .

responsible for

   ability ( Technical capability ) Who is more important than responsibility , All important . If a new person has the potential to develop , So responsibility is more important . 2 People , The first one is very technical , But the sense of responsibility is very poor , Not interested in the project ; The second one is worse , But strong sense of responsibility , It's my own problem. I must be responsible to the end , Ask for help even if you can't . I think the former is more harmful to the project , Especially in the critical period of the project , Because the person with strong ability is generally responsible for the complexity , Difficult functions , It takes time for others to get started , At this time, if you put a load on it ,bug No repair , Then it's very difficult .

   The typical example of irresponsibility is bullshit , Pass the buck : It's not mine bug, It's none of my business. . Where there is collaboration, problems are more likely to arise , For example, front end and back end , Between departments . If you don't know who's the problem then , Take the initiative , Help troubleshooting .


Don't always say no

   As a programmer , There's always work that hasn't been done before , Maybe it comes from the needs of product personnel , Maybe from the spontaneous optimization of the project . I've seen some programmers , In the face of unknown problems , When challenged , Always used to say : can't , no way out , impossible , This kind of programmer is not qualified . in fact , This kind of programmer is to leave a way for himself too early , In fact, the problem may not be as difficult as you think , Maybe it can be solved after some exploration . If you are used to saying no to the unknown , So in other people's eyes, it's just not good , Influence personal image and reputation , And always staying in your comfort zone is not conducive to self-development .

   of course , It's not about blind confidence , I'm in a hurry to pat my chest to make sure it can be solved , This is often the pit of their own .

   therefore , Facing new demands , Be cautious , It's not easy to veto or promise , It needs to be studied first , Evaluate whether it can be completed , Resources and time needed .


   So much for the moment , Of course, I'm not up to the standard , For example, you can't control your anger easily , Share with you