I kind of snuck my way into the programmer’s door and ran. 26, before almost no experience of writing code, accidentally chose a graduate start-ups cannot provide training, in the daily worries company collapse, afraid of being fired and colleagues in the cold small triple pressure upstream, departure after one half a year, has 5 million users products main path of the background. I used to be afraid of computer technology. I assumed that if you were good at it, you’d have a Buddha’s light, and you’d be spitting out thousands of lines of code day and night. Now that I have seen some of the world, I do not find any inspiration when I look back on the process of feeling uneasy like the first night, but take it as a matter of course. The ideal programmer is no different from the ideal architect, the ideal accountant, the ideal masseuse, they are essentially a group of craftsmen. I believe that the ideal programmer can be anyone.



Nearly three years in the Internet circle together, I have known some programmers, worked with some programmers, led some programmers, and interviewed some programmers. They have different educational backgrounds, some from Peking University, some from training institutions, some have a doctor’s degree, some do not finish high school. Qualifications vary, from BAT to a failed fund (also a salesman); They range from 0 to 15 years. But I think there are only three types of programmers: talented programmers, ideal programmers, and mediocre programmers. I can only say I’ve worked with three talented programmers. It’s destiny. 7 points determined when you were a sperm. Excellent mathematical talent, a cool, dense logic, and a technical passion for solving difficult problems that delighted you in a sleepless night. Three points comes from starting early. I wish my peers had started playing on computers while playing in the mud. I wish I had broken the 10,000-hour rule before I graduated from college.

Talented programmers are hard to find and hard to find, and 90% of the programmers I see are still mediocre. The expansion of the IT era has made programmers as common as printers in the Renaissance, and most of those who join their ancestors are just for a bigger job, higher pay, and a better livelihood. Mediocre programmers write rotten code with no specification or consistency, cling to old world languages, and talk about big architectures and performance better than they do. Without exception, they assume that technology is a dead end, that product, marketing, and management is a higher craft, and that 99% of them naturally reveal that they happen to have that talent, and don’t bother to know why the process breaks down.

I like to spend time with ideal programmers. I want to live and eat with them, and if I can, I want my team to be full of their flags. The ideal programmer has a good heart (they’re never the darlings of office politics, they’re simple, bright, happy artisans) and an innocent curiosity (their eyes often glint with a “Wow, how did that work!” ), always striving for the best (their mantra is “I’ll look into it a little more”), and willing to share (they’re active on GitHub, q&A communities, and on your side, giving their precious time to help newbies). Yes, they don’t need to be managed, just given a big direction that always returns unexpected results.

The ideal programmer and the mediocre programmer are separated by a wall. The gap between the two is only 6 little bit, and the gap between people, it is in this little bit accumulated over a long period of time, was forever opened. Interestingly, I’ve found that these six little bits have to do with consciousness, which means that programmers, like any other job in a new industry, need only consciousness and time to reach the desired stage. The ideal programmer is also a good problem-solver.

Number one: Focus on the present

I’ve seen so many distracted programmers that I have to put “focus on the present” at the top of my list. They tend to have a variety of small dream, such as a small tea farmers, do a little goose vendor, do products, sales, investment, has been the programmer’s high salary or not turned to drive “delay”, but because they do not focus, they don’t do your duty, don’t care to temper their own skills, don’t care about learning new technology. Of course, there are great products (like Lord Joe), great sales (like Larry Ellison), and great investors (like Peter Fey), all of whom are programmers. But have you heard what Warren Buffett said about Bill Gates? If Bill Gates turned to selling dogs, he must be the biggest dog dealer in the world. I firmly believe that all but a few geniuses can succeed in many fields if they keep focused. And even if you want to sell dogs next year, the programmer experience will still train you to be logical, careful and patient, which is a considerable competitive advantage in any industry.

Number two: thinking and motivation

I think dealing with bugs, crashes, tuning, intrusions, and so on is more indicative of the gap between mediocre and ideal programmers than the programming itself. When facing an unknown problem, how to locate the core problem under complex conditions, how to analyze the potential cause of the problem, how to eliminate interference to restore a minimal verifiable scene, and how to seize the key data to verify their guesses and experiments are all the best scenarios to reflect the thinking power of programmers. Yes, thinking is more important than experience in evaluating the ideal programmer.

Sometimes when a friend comes up to me and asks me, “I submitted a task and got stuck, what should I do?” I always think he could do better. For example, you can check to test other tasks to rule out the cause of the code itself; You can check exceptions through the Web UI (if there is no account, you can ask me to provide it); Check the host logs or delete the cache, or worse, always provide me with the task ID and console logs. The ideal programmer never waits for things to move forward; he does whatever it takes to make things move forward.

Number 3: Never Say No

I remember when I talked to the boss before leaving the former factory, he said that my biggest advantage was that I never told him that I couldn’t do it. What I’ve found is that on many teams, there’s a technology versus product tension, where programmers block the product’s needs with “technically impossible” and the product taunts programmers with “Why can’t Facebook do that?” These two sentences should belong to the forbidden language, fundamentally are not conducive to the program ape and product dog love each other.

It’s easy to say “technically impossible”, but how many of us feel 100% sure when we say it? If you’re not sure, why can’t you just go back and Google your answer? I used to think that programmers are full of imagination, but because of imagination, so many software and Internet products that change our lives can be born. It’s easy to see that most programmers have become conservative and risk-averse when it comes to fighting bugs, while many teams aren’t willing to tolerate failure. So “Say No” became a habitual resistance. Still remember why Zeng Guofan disbanded the Xiang Army? He said that the army was “getting too tired” to fight. To be an ideal programmer, you can not give yourself the opportunity to breed anger, if the face of unreasonable demand, you can put out the time cost, the curve to save the country program, simple and crude “Say No” is not desirable.

Number four: Invest in the future

Programmer is a very cruel profession. The language, frameworks and patterns you are learning will probably be obsolete within a few years. Another group of programmers you’re laughing at right now can turn around and laugh at you. So the ideal programmer spends time investing in the future in addition to doing his job. What is “investment”? Investment is the time you invest now, with more time or money in the future (look at how much programmers who learned iOS a few years ago are paid now!). Return for you. Take my own field — data mining as an example. Hadoop started to rise around 2008. At that time, the concept of “big data” was hot, and Hadoop engineers were hard to find. As Hadoop continues to iterate over the past few years, Spark has broken the sorting record held by Hadoop. The performance advantages and rich data structure brought by storing intermediate data in memory make people love it, but various strange bugs and steep learning curve make people feel bad. If you know that Spark is the future (memory is getting cheaper and cheaper), you can switch some small modules to Spark while keeping an eye on the Spark community. The performance gains from Spark will soon make up for the time spent learning.

# 5: Use tools

Leveraging tools can be divided into four layers: Search engines don’t believe in repetitive snippet automation

When I started my career, a friend of mine who was a civil servant and majored in computer science asked me, “How do you write code? I said, Google, and was ridiculed so mercilessly that MY account was called 2shou everywhere, telling myself I was a shameless second-hand programmer. It’s a joke, but if asked now, I’d still answer Google. Programmers like the growth of the expansion of the round cakes, outside is the boundless sea, round cakes, the greater the contact with the sea surface is, the greater the know, the more don’t understand, the more the computer science is an exceptionally rapid upgrade discipline, as well as knowledge of the Internet the best discipline, it is difficult to use traditional regular type with the method of teaching with learning, On the contrary, it is easy to obtain the latest knowledge through search engines.

I don’t believe in repetition, and don’t believe in DRY principle (Don repeat Yourself). If I write too much code, I will intuitively judge good and bad code. My standard is simplicity and standardization, rather than aesthetic standards.

If you were unlucky enough to lose code from three weeks ago, you might be able to copy the remnants of your brain with a brilliant memory, but if you lost code from three months ago, you might not be so lucky. The ideal programmer would focus on efficient archiving, saving short snippet of code, scripts, configurations, experiences, and so on that can be reviewed at any time.

The ideal programmer must be lazy. To them, repetitive steps are just as ugly as repetitive code, and it’s always too early to automate if you realize that a job has the potential to repeat itself over the long term.

Number 6: Manage your time

The reason time management is especially important for programmers is that you have to be a Wolf in the wilderness when it comes to getting things done. Being able to stay in control without external constraints and to work and study efficiently will surely make you better than the average person over time.

Programmers do high-intensity mental work, and 4-5 hours a day is usually enough to focus on their job, but make sure to schedule time for learning outside of work. In addition to study, it is also necessary to leave some time for yourself. In the gap between making tea or drinking coffee, you can leave precious time for yourself to think forward and think back, and get twice the result with half the effort.

Having said all that, one might ask, what’s the point of trying to be an ideal programmer? Will there be a high salary? Not at all. Can I get a promotion? Not really. And marry Bai Fumei? I might as well sell dogs.

Inamori Kazuo once said a story, the Meiji period craftsmen were summoned by the emperor, although they are not reading country people, but a lifetime of conscientious to do one thing, naturally there is a noble temperament. The ideal programmer should follow this noble temperament.