Confessions of a mediocre programmer

Confessions of a mediocre programmer

[[136897]]

Jacob Kaplan-Moss is the co-creator and core developer of the famous Python framework Django. He is the director of the security department at Heroku. He often attends the annual gathering of the Python community, PyCon, and often gives speeches. At PyCon 2015, he claimed that he was at most a mediocre programmer, and the slides also said:

  1. "Hi, I'm Jacob, and I'm a mediocre programmer."  

This speech was very exciting, and the video can be seen on Youtube (if you don't want to watch the video, there is also a text summary here: https://lwn.net/Articles/641779/). Jacob used the marathon as an example to try to illustrate that most people are average at most things. There are very few who are particularly good or particularly bad, but in the field of programmers, most of what we hear is that certain programmers are rocks or sucks, and there is basically no middle ground, which is a very strange thing. He also mentioned the concept of "real programmers", which is the so-called "10x programmer". You are only a real programmer if you are proficient in certain principles or look like Mark Zarkerberg, but a person who uses various cloud services and APIs to quickly build his own applications is not considered a real programmer, which is very ridiculous. By the way, Jacob's Twitter profile is "not a real programmer."

Jacob believes that this myth about "programming genius" is very harmful. On the one hand, it sets the industry threshold very high, which makes many people discouraged. On the other hand, it also tortures people in the industry, because if you can't rock, you will become sucks, so you have to spend all your time studying and working hard, which affects your life. He believes that we should change this attitude. Programming is just some skills, which does not require too much talent. It can be learned, and it is not shameful to be a mediocre programmer. "It's cool to be okay at these skills." There are many kinds of people who run - sprinters, people who run purely for exercise, people who participate in marathons, etc. Why do you have to be a real programmer when programming, and feel that you are not worthy of programming if you can't do it?

This speech won a lot of applause at the conference, and during the question-and-answer session, some timid voices could be heard saying, "I am also a mediocre programmer." However, it also caused some controversy elsewhere. Some people thought that it was inappropriate to compare running and programming, while others said that the gap in programmers' abilities was indeed astonishingly large. Those who are interested can go and read the discussion on Hacker News.

For me personally, Jacob's speech touched a knot in my heart that I had been struggling with for many years. I was deeply moved. I always thought that I was just a mediocre programmer at best, and no matter how hard I studied, I always felt that I was not a real programmer, and it seemed that I was getting further and further away. Jacob's speech made me realize that I was probably not the only one who had this distress, so I wrote about my own journey here, hoping to inspire others.

[[136898]]

It is dangerous to publicly admit that you are mediocre. If it does not mean that you have a low IQ or no talent, it at least means that you have a problem with your attitude: "If you are mediocre, you should work hard to practice, instead of writing articles to defend your mediocrity." When you say that someone like Jacob also admits that he is mediocre, there will be a lot of "qualification" rebuttals: "Jacob at least wrote so much code, how can you compare with others?" "Others say that because they are modest, you are shameless." Suddenly you will feel that you are no different from those villains who only find faults in great people. Fortunately, I will probably not make programming my career in the future, so these things don't matter, and I can honestly talk about my experience.

My impression of real programmers began in college. Although we were no different from computer repairmen to people from other majors, there was already a vague worship of some advanced things within the major. I remember a classmate said to me in my freshman year: "We are still learning C, but people outside have already started using Java." At that time, there were already many legends about programmers in the major, such as how great a senior was, or how a programmer from Microsoft completed the work of a project team by himself. I believe many people have heard of that story. The general idea is that a person's computer was broken, so he asked a computer expert to fix it. The computer expert took a phone, connected the computer, and spent a whole night writing an operating system with 0 and 1. The ending of the story was "the computer expert went to the United States and never heard from him again." When I heard this story, I was half-believing and half-doubting, and I actually preferred to believe it was true! Because if it was true and I didn't believe it, it would only mean that my technical level or IQ could not understand things at that level, which would be too bad. At that time, I really wanted to become powerful.

As we got to know more about the profession, we soon began to laugh at the view that "Java is newer than C, so it is better than C", and instead believed the argument that "the lower the level, the better". People who write C are better than those who write Web, and those who write assembly are better than those who write C. Why? Because they have "a more solid foundation and a better understanding of the principles." This argument has developed to an extreme: if people who study "hard sciences" such as mathematics or physics switch to programming, they will definitely be better than us. Their algorithms must be better than ours, and it was these guys who invented the computer. For a while, I vaguely felt that people from other majors who switched to programming would be better than me, even a pianist - because his fingers are flexible and he can type faster.

[[136899]]

Another legend that impressed me deeply in college is that experts don't use IDE to write programs, they just use Notepad. Experts can hurt people by picking flowers and flying leaves, but talking about weapons and tools is inferior. Only those who are not good at it spend all day studying which tool is more efficient. So for a long time, I doubted my ability because I didn't use Notepad to write programs. Until later when I started working, I came into contact with Vim and found that it really looked like Notepad.

In addition, there is also the worship of classic books, such as MIT's Introduction to Algorithms and SICP, Knuth's The Art of Computer Programming, TCP/IP Detailed Explanation, and some other classic books on operating systems, databases, etc. If you don't finish reading these, it means that you are not talented enough or have no passion, so it is better to change your career as soon as possible. In an article I have always liked (and still like and recommend) called Teach Yourself Programming in Ten Years, the author recommended SICP at the end, saying: "The book is challenging and will weed out some people who perhaps could be successful with another approach." So even though I have never finished reading this book and I probably won't read it, I always have a complex about it, so much so that I brought it with me when I went abroad two years ago.

After graduation, I started working as a professional programmer. I interacted with programmers every day and paid attention to technology news. At that time, Silicon Valley culture was becoming more and more popular, so I yearned for and admired real programmers even more. Joel Spolsky wrote an article called "High Notes", in which two paragraphs can be regarded as the best interpretation of real programmers:

The real problem with replacing a few good programmers with many mediocre ones is that no matter how long the mediocre programmers work, they will never be able to produce something as good as the good programmers.

[[136900]]

First-rate singers can sing high notes easily at any time, but mediocre singers can never do this. There is a famous aria "Queen of the Night" in Mozart's opera "The Magic Flute". The pitch must reach F6 (the highest pitch of a soprano) to sing this song well. The sopranos who can reach this standard are almost extinct in the world. If you can't reach the famous F6, you can't perform "Queen of the Night".

Simply put, if you lack talent, no matter how hard you try, you can't do what a real programmer can do, and a mediocre programmer is a bad programmer. This kind of assertive article has always been inspiring, and those who think they are smart also like this statement, but for someone like me who always doubts my IQ and ability, it is like a shadow: What if I really can't sing high notes?

Because of this admiration for real programmers, since I started working, no, since college, I have always had an idea: I don't deserve it.

I also won awards for my work in college, but I always felt that my code was a piece of shit and didn’t deserve the award. If there was another real programmer at the time, it would definitely not have been my turn.

When I was looking for a job in my senior year, even though I got the offer after a formal written test and interview, and I was the only undergraduate hired, I still felt that I didn’t deserve the job because I had never written 100,000 lines of code and was not a real programmer.

When I first started working, I was in the company from 9am to 9pm every day, and sometimes I went there on weekends. After finishing the work at hand, I would read technical documents. When I was bored, I would use typing software to practice the correct fingering so that I could program faster. Even so, I still doubted my passion for programming. I felt that I was getting further and further away from being a real programmer and was not suitable to be a programmer.

Later, I went to Yahoo! North Research Institute for an interview, which lasted from 8 am to 12 pm. The next day, I went to the United States for a video interview with my colleague. The test was actually very strict, and I didn’t do any targeted practice questions or other test preparations. But strangely, I still felt that I was not capable enough and just got the offer by luck.

When I help others write code or work with other departments, my first thought is that I am not capable enough. Even though the project was successfully completed and the other party gave me good comments, I still feel that I don’t deserve those compliments, and even think: if they see the real programmer, they will not praise my work.

This mentality has another negative effect, which is constant anxiety and fear of falling behind. Jacob also said in his speech:

  1. If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again. That leads people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.

This passage accurately describes my previous state. I am interested in many things besides programming. From a life perspective, this is actually a good thing, but I often feel guilty because they delay my time for programming, reading documents, and learning new technologies. Those things could have brought me happiness, but every time I did them, I felt sneaky and was too embarrassed to mention them when asked. Looking back now, there was a period of time when my work and life were actually well balanced, but at that time I could only enjoy myself with peace of mind by constantly telling myself "you are mediocre" and even imagining myself as a self-degrading person. It was really twisted.

In the past, I sometimes liked to write something, thinking that I was sharing, but later I always felt that I was not a real programmer, so what was the value of sharing? Moreover, writing articles would delay programming time, and programmer culture particularly advocates "pragmatism" and opposes "empty talk" - writing is "empty talk", and "only talking nonsense" is a very serious insult in the programmer community. I remember seeing a recruitment information before, which clearly stated that "people who often write blogs are not welcome." In fact, writing is not only about expression, but also helps thinking. Many ideas do not exist before writing, and I have benefited a lot from it. Moreover, there is an essential difference between "unwilling to express" and "not being able to express". In the past, if a wretched person who couldn't speak clearly came to me and said "Talk is cheap. Show me the code.", I would immediately feel ashamed, and even think that he might be a real programmer.

All these anxieties and troubles often make me feel that I am not suitable to be a programmer from my personality to my hobbies. What the programmer culture tells me is: if you are not a real programmer or are not on the road to becoming a real programmer, then you are not even a programmer. In the discussion of Jacob's speech on Hacker News, Panjaro talked about his own experience:

  1. I 'm an example how this myth can destroy you. I was programming for 6 years in normal projects and I thought I was not talented. I left job, came to research degree. Now I realized I' m terrible at maths and advanced algorithm techniques. I think about going back but since it has been 3 months I haven 't worked in a company, I feel I am a very bad programmer and no one will hire me . all these people are talented and I'm so dumb.

His description made me feel the same way. I also hated myself for not being interested in mathematics. I spent all day in the study room studying discrete mathematics and algorithms. After work, I often wanted to go back and learn these "basic knowledge". Sometimes, even if you find that algorithms are not as important as the legend in some work, you can't say it, otherwise you will ignore the basics, or you are engaged in low-level work among programmers and fail to appreciate the importance of algorithms.

The attitude of "ability is everything" in programmer culture is often questionable, because except for a very small number of computer scientists, most programmers are engaged in product development, and in product development, there is no way to measure a programmer's ability with a simple standard. A person may have strong programming skills, but he may be so determined to realize his own ideas that he drags down the entire project. In addition, people with strong programming skills may not necessarily be able to do some "low-level" jobs that do not require much intelligence. Such jobs may require a lot of patience, and patience, like the legendary talent, is not a quality that can be used by everyone. I saw a very interesting recruitment information before, which said that it hoped that the applicants would "already be married, or at least have been in a long-term relationship." They think that such people know how to get along with others and are not likely to be a jerk who despises other people's work.

I am not denying the existence of great people. Linus and John Carmack are not to be mentioned. When I just graduated and worked at Yahoo China, I met a great colleague. He graduated from Tsinghua University, was a Christian, married, liked programming and cooking in his spare time, and often completed the work of the entire team by himself. He typed very fast. Many people went to listen to his technical sharing every time, and even HR went there out of curiosity. When the audience asked questions, he could clearly explain the function of a certain parameter of a command that was not often used. He was simply a living user manual. He was very helpful. I often saw him answering other people's questions in the mail list. He gave a clear analysis of the cause of the problem and the solution one by one. What surprised me was that he was also very patient with many trivial things. I remember that the company wanted some people to apply for patents, and I saw him there concentrating on writing applications on weekends. Another colleague who was close to me originally thought that he was quite talented and much better than me. He really wrote 100,000 lines of code in college, but after meeting the great person, he immediately found that he was not talented. At that time, his girlfriend was out of town, and he spent his spare time watching movies and writing code. When he didn't want to write, he would open the expert's Github and take a look. He would usually find that he had new commits, and then he would be motivated to continue writing.

The problem is that not everyone is a big shot, and the entire industry doesn’t need more than big shots. For example, many people who write PHP probably look down on “Wordpress engineers”, that is, people who only know Wordpress but don’t know PHP well enough. But many companies really need to build a small website, and it’s enough for you to develop Wordpress Themes, and there’s no need to study more. Helping others develop Wordpress Themes can make a living, and even make a lot of money, but they probably think they are not real programmers, so they rarely speak out. Some time ago, there was an application that was very popular, but the article of their team said at the beginning that “there is no big shot in our team”, as if it was a shameful thing. Must a team composed of big shots be qualified to develop good things? If you put aside other things, “A person who supports himself with his own ability should be respected”, this sounds like there is nothing wrong with it, but once it involves code, it seems that engineers who only study Wordpress can’t meet people.

Many companies also believe that only great programmers can do things, so when recruiting, they will say that they only recruit the top 1% of programmers. This is actually impossible. Joel Spolsky has already written an article about this. You can't recruit the top 1%, you can only recruit the top 1% of applicants. We can imagine that the best people may go directly to Facebook, Google or Silicon Valley startups, and the worse ones may choose domestic giants such as Baidu and Tencent, or very promising startups. The rest of the talents are people in the market. The top 1% here is no longer the top 1% of all people. So when you see this kind of recruitment, you can evaluate the company. If you are not particularly good, you can boldly apply for the job, because you may already be in the top 1% among those who are willing to apply for this company.

In fact, I really like the idealism of this industry. In the past few years, I have made many friends and found many thinkers, which inspired me a lot. Unfortunately, I often feel uncomfortable and incompatible with this programmer culture or geek culture. Although I tried very hard, I found that it still didn't work. Of course, it may not be a cultural problem, but because people like me and Panjaro are timid and impetuous, care too much about other people's opinions, and are prone to anxiety and depression. Such people are probably losers in any industry. I hope others can live more confidently.

In the past, I always hoped to find the purpose of life, but when I doubted that I was not a real programmer, I was glad that life was a mess and that life might have no meaning. Otherwise, I might have to live in a "contempt chain" every moment.

<<:  Common problems after Swift open source

>>:  12-inch iPad Pro is coming soon!

Recommend

How do you know what an elephant eats? Look at its poop!

If you were an elephant detective, how would you ...

Small knowledge, big questions! Why do common fans only have 3 blades?

One leaf fan is invisible Two-blade fans are rare...

Hackers, opponents or users, where does Apple’s interest come from?

Apple continued to appear in court on Wednesday t...

5 basic skills for brand private domain implementation!

After experiencing the epidemic in 2020, brands a...

How do mini programs obtain traffic? How to get traffic for your mini program?

Zhang Xiaolong once mentioned in a WeChat open cl...

Brand Retail Private Domain Solutions

Precision marketing based on big data is really s...

Bud parenting class: 10 abilities to let children take control of their lives

This is a course that teaches parents how to put ...