[Translation] A programmer's epiphany: The ideal programmer is only a little more than 6 more than you

From: http://www.phpxs.com/post/4338/ by Sandy  

  I was tricked into the programmer's door by tricks, and then ran all the way. Before the age of 26, he had almost no experience in coding, but after graduating from graduate school, he accidentally chose a start-up company that could not provide training. Under the triple pressure of daily worry about the company's failure, fear of being fired, and cold eyes from colleagues, he went up against the current for a year. After leaving the company, it is already the main background process of products with 5 million users. I used to be terrified of computer technology and believed that a skilled person must be shrouded in the Buddha's light, running keys day and night like flying and spitting out tens of thousands of lines of code. Now that I have seen some things in the world, I look back on the uneasy process like the first night, but I don't find any inspirational meaning, but take it for granted. An ideal programmer is no different from an ideal architect, an ideal financial engineer, or an ideal massage therapist. They are essentially a group of craftsmen . I believe that the ideal programmer can be anyone.

  In the past three years, I have always been in the Internet circle. I have known some programmers, worked with some programmers, led some programmers, and interviewed some programmers. They have different educational backgrounds, some are from Peking University, some are from training institutions, some are Ph.D., and some are high school graduates; their qualifications are also different, some are from BAT, some are from a bankrupt fund company (or a sales); the years are also from 0 to 15 Years vary. But I think there are only three categories of programmers: genius programmers, ideal programmers, and mediocre programmers. I can only say that I have been in contact with 3 genius programmers. This is destiny. 7 points are determined when you are a sperm, with excellent mathematical talent, calm and dense logic, and technical enthusiasm for solving problems that would rather sleep and enjoy; 3 points come from starting early and wishing for peers When you play mud, you have to start playing with the computer. Before graduating from college, you will break the 10,000-hour rule, and the rest is the game life.

  Genius programmers are hard to come by, let alone long-term, and 90% of the ones I see are still mediocre programmers. The expansion of the IT era has made programmers as ordinary as the printers in the Renaissance. Most of the people who invested in the family of their ancestors were only for a bigger job, higher pay, and better livelihood. Mediocre programmers write rotten code with no specification and consistency, stick to old world languages, and talk about big architecture and performance better than doing it. Without exception, they believe that there is no way out for technology, and it is more advanced craftsmanship to make products, marketing and management, and 99% of them will naturally reveal that they happen to have talent in that area. As for the process The small question of why it crashes is disdainful to understand.

  And I like to get along with ideal programmers the most. I can't wait to eat and live with them. If allowed, I hope my team can be filled with their flags. The ideal programmer is not bad at heart (they are never the darlings of office politics, they are a group of simple, bright and happy craftsmen), and innocent curiosity (their eyes often flash "Wow, how is this done?" !"), always improving (their mantra is "I'll study it again"), and sharing (they are active on GitHub, Q&A communities, and around you, and are willing to devote their precious time to helping newbies). Yes, they don't need to be managed, they just need to be given a general direction that always pays off with unexpected results.

   The ideal programmer is separated from the mediocre programmer by a wall. The gap between the two is only a little bit of 6, and the gap between people, it is in this little bit that has been accumulated over time, it has been opened forever. Interestingly, I found that these six points are all related to consciousness, that is, programmers, like all other emerging industries, only need consciousness and time to temper, and everyone can reach the ideal stage. The ideal programmer must also be a good problem-solver.

  The first little bit: focus on the moment

  I have seen too many programmers who are arrogant, and I have to put "focus on the moment" as the first word of the sky. They often have all kinds of small dreams, such as being a small tea farmer, a goose seller, making products, making sales, and making investments, but they are "delayed" by the programmer's high salary or lack of courage to change careers. Because they are not focused, they don't care about doing their part, honing their skills, or learning emerging technologies. It is undeniable that there are great products (like Mr. Joe), great sales (like Ellison), great investors (like Peter Fei), and they are all programmers without exception. But have you heard what Buffett said about Gates, if Bill Gates switched to selling dogs, he must be the biggest dog dealer in the world. I firmly believe that with the exception of a few geniuses, all beings can succeed in many fields, as long as they maintain enough focus. And even if you want to sell dogs next year, the experience of programmers can still train your strong logic, prudence and patience, which is quite competitive in any industry.

  The second little bit: thinking and driving force

  I think dealing with emergencies like bugs, crashes, tuning, intrusions, etc., is more indicative of the gap between mediocre programmers and ideal programmers than programming itself. When faced with an unknown problem, how to locate the core problem under complex conditions, how to analyze the potential causes of the problem in a nutshell, how to eliminate interference and restore a minimal verifiable scene, how to seize key data to verify one's own guesses and experiments, It is the best scene that reflects the thinking ability of programmers. Yes, thinking is more important than experience when it comes to measuring the ideal programmer.

  Sometimes when a friend comes over and asks me, "I submitted a task and got stuck, what should I do?", I always think he can do better. For example, you can check and test other tasks to rule out the cause of the code itself; you can check for exceptions through the Web UI (if you don't have an account, you can let me provide it); you can check the host log or delete the cache, and if it's bad, you should always provide the task ID and console log to me. The ideal programmer never waits for things to move forward, they do everything they can to make things move.

   The third little bit: Never Say No

   I remember talking to the boss before I left the factory. He said that my biggest advantage was that I never told him that I couldn’t do it. Later, I found that in many teams, there is a confrontation between technology and products. Programmers often block the needs of products with "technically impossible", and products are often ridiculed with "Why Facebook can't do it" programmer. These two sentences should belong to the forbidden language, which is fundamentally not conducive to the mutual love between programmers and product dogs.

   It's easy to say "technically impossible", but how many people are 100% sure when they say this? If not sure, why not go back and google it and answer? Originally, I thought that programmers were full of imagination, and it was because of imagination that so many software and Internet products that changed our lives were born. With more knowledge, I understand that most programmers have become conservative and unwilling to take risks in the fight against bugs, and at the same time many teams are unwilling to tolerate failure. So "Say No" became a habitual conflict. Remember why Zeng Guofan disbanded the Hunan Army? He said that the army was "fading away" and could no longer fight. If you want to be an ideal programmer, you cannot give yourself the opportunity to breed anger. If you face unreasonable demands, you can put out the time cost and show the curve saving plan. Simple and rude "Say No" is not advisable.

   4th little bit: Investing in the future

   Programmers are a very cruel profession. The languages, frameworks, and patterns you've learned may well be a thing of the past in a few years; the other group of programmers you're laughing at now may be able to turn around and laugh at you in no time. Therefore, in addition to doing their part, the ideal programmer also spends time investing in the future. What is "investment"? An investment is the time you put in now that will pay you back in the future with more time or money (look at the current pay for programmers who learned iOS a few years ago!). Take my own field - data mining as an example. Hadoop began to rise around 2008. The concept of "big data" was hot, and Hadoop engineers were hard to find. Internet companies have switched their data statistics, data analysis and data mining business to on a distributed platform. Seeing that Hadoop is still iterating in recent years, Spark has sprung up again, refreshing the sorting records maintained by Hadoop in one fell swoop. The performance advantages and rich data structures brought by storing intermediate data in memory make people fall in love with all kinds of strange small Bugs and a steep learning curve are another setback. Well, everyone with a discerning eye knows that Spark is the future trend (memory will be cheaper and cheaper). Under the condition that the main business is placed in Hadoop, some small modules can be appropriately switched to Spark, and at the same time, pay attention to the development of the Spark community. The performance gains you get from Spark quickly pay for the learning time you've invested in it.

   The 5th little bit: make good use of tools

  Good use of tools can be divided into 4 levels: search engines believe in repetition code snippets automation

  When I first entered the industry, a friend who majored in computer but became a civil servant asked me, you have never learned programming at all, how do you usually write code? I said, Google, and I was ruthlessly ridiculed, so that my account was called 2shou everywhere, and I told myself that I was a shameless second-hand programmer. It's a joke, but if you asked me now, I'd still Google it. The growth of programmers is like a swollen round cake. Outside is an endless sea. The bigger the round cake is, the bigger the surface is in contact with the sea. The more you know, the more you don't understand. The disciplines that are changing rapidly are also the disciplines with the best knowledge on the Internet. It is difficult to use the traditional classroom-style teaching and learning methods. On the contrary, it is easy to obtain the latest knowledge through search engines.

   I don’t believe in repetition. The master’s words are called the DRY principle (Dont repeat yourself). If you write too much code, there will be artificial intuition to judge good and bad code. My standard is simplicity and specification. The less you give yourself, the less chance you have to make mistakes, and the less maintenance costs you will have to pay later.

   If you are unfortunate enough to lose the code from three weeks ago, you may be able to rewrite the remaining fragments in your mind with your extraordinary memory, but if you lose the code from three months ago, I am afraid you will not have such good luck. The ideal programmer will focus on finding an effective way to save data, and save short snippets of code, scripts, configurations, experiences, etc., written in a flash of inspiration at work, so that they can be reviewed at any time .

  The ideal programmer must be lazy. To them, repeated steps are as ugly as repeated code, and if you realize that a job has the potential to be repeated for a long time, the sooner you automate it, the better.

   Bit 6: Managing Time

   The reason why time management is especially important to the programmer's profession is that you have to "walk alone" like a wolf in the wilderness when completing tasks. If you can stably control yourself without external constraints, and ensure that you can work and study efficiently, you will definitely become better than the average person over time.

   Programmers do high-intensity mental work. Generally, 4-5 hours a day is enough to deal with their own work, but outside of work, they must arrange time for study. In addition to studying, it is also necessary to take some time to let yourself go. Take advantage of the gap between making tea or drinking coffee to save precious time for yourself.  

  Having said so much, some people must ask, what is the use of working hard to become an ideal programmer? Will there be high salaries? Do not. Can I get a promotion? Not necessarily. What about marrying Bai Fumei? Better to sell dogs.  

  Kazuo Inamori once told a story that the craftsmen in the Meiji period were summoned by the emperor. Although they were all countrymen who did not read, but they did one thing conscientiously all their lives, they naturally had a noble temperament. The ideal programmer should follow this noble temperament.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324982759&siteId=291194637