What is a real programmer
The original text of this article is from: A Little Printf Story
The author modeled "Little Prince" in the plot, through small printf met different types of programmers, finally realize what is the real programmer! The first translation has many improper, welcome to leave a message correct.
The article is a bit long, but you will definitely benefit from reading patiently!
Chapter I.
(Recommended to read the whole article, and then go back to the first chapter)
I was very lucky to be born in a computer and video game is not a universal era. So I can play with my little friends and invent the games that belong to us.
We are very good at playing: Make '??? ' with branches. We can use branches to make anything, except ' boomerang '. Because you throw the branch out, you need to pick it up yourself. (Is the story of the author a lively atmosphere??? )
When we grow up, the game above is becoming very childish. You can't think of a pine tower as a grenade; pretend to have magical magic; when other kids find it cool to be an adult. You will eventually grow up under pressure. But in general it was also a very fortunate childhood.
I had a chance to get in touch with video games and computers. You may want to immerse yourself in this virtual world, which will ruin you.
Most video games: You can't create, you can only react and waste your time. When I was more than 10 years old, I took part in an impromptu show. Where I can play my creative.
I majored in ' Multimedia ' in college, but I ended up working on ' programming '. I think programming is amazing! I can play my creative, but also can make money! And then I did my first game.
"It's not a real video game. "Someone told me:" It's just an HTML form, and the code needs to be simplified. "
This remark made me a little frustrated, it took a lot of thought and time. However, I realized that if I wanted to make something that people recognized, I would need to learn more.
I need to learn the real programming. From the GUI tool JS, go to a better language: like PHP. So I first learned JS, and then to learn PHP, but everything is not very smooth, other people give me the suggestion to try Python. Finally, I studied Python (???). Is that how I went on the path to Python? )。
But something advanced in Python: ' Lambdas ' and ' object-oriented programming ', let me foggy. Later, I was advised to read the construction and interpretation of computer programs, as it is the basic primer for Programming the Bible.
In this way, I know scheme, and then I went to learn C language. Because most programmers will be C, at the same time I sit in the computer course of our school, and follow them to study together. Because real programmers know data structures and math, but I only know a little about fur. I started reading technical articles and books because the programmer was updating the knowledge too quickly.
Over a period of time, I mastered Erlang and started my career. (The author of this article wrote a book: An Introduction to Erlang). Oddly enough: I'm the one who didn't do any production-level development with Erlang, but got a job teaching Erlang.
Chapter II
So I'm busy lecturing around the world, teaching others. However, everyone seems to believe that I am a real programmer. Because most of the things I talk about are not programming.
One day, I ended a meeting home, and the plane was late. I was furious at the keyboard, and a soft voice interrupted me:
"Hello, could you please design a system for me?" "
Me: "What?" "
"Design a system for me!" "
I was amazed at the request. I looked around and found a child who wanted to be a developer. His name is ' printf ' (the protagonist shines). I think the name is silly. His appearance is as follows:
"I don't know much about computers, but you seem to be an expert on computers," he added. I want to write a blog program that people can use and access it. I beg you to help me design a system! "
It was a surprising request, and I hadn't slept in more than 20 hours. I don't fully understand what he said. I told him that it was very difficult to make a system. I don't know what he wants to do: how many visitors to support and where to deploy; so I can't design a suitable system based on the small amount of information he provides.
"It doesn't matter, design a system for me." "
So I made the following structure diagram:
He looked and said: "No, this system is not good enough." Please design another one for me. "
So I did the following again:
Then I explained to him how the system works.
My new Friend (printf) said politely: "It's not what I want, it's too complicated and it's a lot of things I don't need." "
I was so upset that I designed this system to take into account: redundancy, monitoring, backup, caching, load, payment, failover, simple deployment, and so on. I've designed this system to get a decent consulting fee! I've lost patience, so I drew this:
I told him: "This is the system you designed, the system you want in this black box." "I hope this funny answer can send him away." But his response surprised me:
"That's exactly what I want!" "
This is the process of my acquaintance with little printf.
Chapter III
After a while, I knew the level of the kid's programming. In his code warehouse there are only a few programs, a small demo site, trivial program fragments. Are things that are not worth mentioning.
He then began to work on a large program that required many modules. This program requires a socket, a disk to read and write, and a real database. When it first ran up, little printf was very excited. However, this procedure is not good enough.
This program requires refactoring, better testing, documentation, and analysis. It only ran for a while before it crashed. Then again and again the crash!
The setup of the program is wrong, the log does not work, the disk speed is unstable, the network is stuck, there is a bug, the coding is confusing, the database needs to be cleaned, the certificate expires, and no exception processing causes the problem to be found.
Really want to be a mess like noodles.
Little printf said to me, "Through this thing, I find myself simply ignorant!" This program was originally written according to my needs. My original idea is too naïve, and then I fix the bug time and this program to bring me the convenience is not directly proportional! In the end, it was different from what I had originally thought. Even so, I still think this thing has made a lot of gains for me. "
One morning, he decided to leave me here. Goodbye "Little printf gave me the last goodbye. He wants to go out to see the world and see what other people have written about the program.
Small printf write applications, and finally because of the ever-increasing log, causing the hard disk to have no space, completely collapsed.
Fourth Chapter
Little printf walked into an office building, looking for experienced programmers to learn from, get some advice and help.
He met a proud senior programmer and felt good about himself.
Arrogant senior programmer said: "Hey, come on novice!" Welcome to my field of expertise, I am an expert in this field! "
Experts "Little printf asked:" The expert means: can you write any program? "
Yes The arrogant senior programmer replied, and then he said, "to be precise, most programs should be." Because I only write valuable programs, I don't waste my time on meaningless small programs. I haven't written a lot of programs, but they're hard for me! "
"Well, so you can help me refine my program?" Little print asked, then he began to elaborate on his website system, but the arrogant senior programmer interrupted him:
"Sorry, I don't think your website system is of any value. "
Little printf: "Why?" "
"Experience, I am good at writing what I develop, and I only do the development of areas I am good at. I need to make sure that I always have value in my field. This is called job security, also known as survival of the fittest. But that's my style. I only focus on my field! "
Little printf: "Then why don't you help me?" "
"It's not a good idea for me to spend my time helping you, meaning I need to spend my energy helping others rather than improving myself----. My advice is: how hard I try to understand. And you can shape your own mind. "
Little printf: "You said the method, good thinking is not very efficient ... "
"You can go to school to learn, or teach yourself." In fact, this method can eliminate those who are lazy, only like simple things. A person who truly desires knowledge can succeed! "
Little printf: "Do you think co-workers and coworkers can't help you?" "
"No, that's not what I meant." I am doing my job in a state of independent space without distracting me. Every time I work with my colleagues, it's a bad experience. Previous experience: The best way to do this is to take their code and rewrite it. And then it's ready! "
Little printf was amazed at the expert who did not like helping others, and he was annoyed by the skill of others. The expert's vision is narrow, and he cares only about the areas he specializes in. Live in your own world.
Little printf: "I see, I think I'm glad you didn't help me." "
"What do you mean?" The arrogant expert asked, it seems that his authority was threatened: "You do not recognize me, you are questioning me?" "
Little printf: "It's not like that, just as you think I'm a liability, annoying." I'm here to find help, not to look for a curse. "
After that, little printf quickly ran out of the office of the arrogant expert. When little printf left, the expert rediscovered the authority of his field and felt good about himself.
Fifth Chapter
Then, little printf went into another office. There was a man in it, and his seat was surrounded by thick hardcover books (such as the Book of codes).
Little printf: "Sir, you have a lot of books!" "
"Yes, I think these are all books that programmers must read, and if you haven't seen them, it's hard to be a ' Daniel ' (professional). "
Little printf: "I think I am still very vegetable, which of these books do you like best?" "
"Oh, that's the most of these books I haven't read yet. "
Little printf: "So are you now a ' Daniel '?" "
"No, I'm not." "The programmer is very proud to say:" I am actually a very garbage programmer. "
Little printf: "It's embarrassing, I'm trying to be strong." "
"Have you ever heard of the ' G-effect '? "
Little printf: "What is that?" "
Simply put: People who are capable are always underestimating themselves, and those with weak abilities always overestimate themselves. "
Little printf: "That is, if I feel I'm getting stronger, I'm not getting stronger." "
"Yes, you're right," he said. You'll probably be standing still. On the other hand, I preach that I am a very bad programmer, but according to the ' G-effect '. I am underestimating myself, so I am a good programmer, what do you think? "
Little printf: "I ... Amount
"That's why programmers like to laugh at themselves (call themselves a yard farmer, too?") )。 When you think you're good enough, you're relaxed and there's no motivation to move forward. (I still agree with this sentence?? )
Little printf: "You mean: once you feel good about yourself, it's going to be a failure, because it feels like you're not good enough." "
"Yes, but it's dangerous to deal with everything in this way, if you haven't got an offer yet. This way will make you smart, but without any practical use, others will not hire you because you are smart. "
Little printf: "You mean?" "
"Let's say I see a project on the Internet that I don't like," he says. I say that the project is useless, but it is not clear what is wrong. Finally you can say that the author of this project is an idiot, and no one cares about you. "
Little printf: "But what good does this do?" "
"I want them to know that they're going astray, but they don't say it clearly." I'm better at it than they are. But they had no clue, like mirrors. No one can understand what I mean. Wow, "
Little printf: "When people ask you questions, you don't, what will you do?" "
"In this case you say that there are problems everywhere, there are a lot of imperfect things to do, in short, to transfer the topic." Then they feel desperate and finally they have to solve it themselves. "
Little printf: "So that's where you stand?" Is this your usual style? You will have a problem pretending you can't do anything about it, making the person who really can't solve the problem get mad; When you encounter a problem that you don't have, you act like you know it, and make others follow your advice to improve the rest of the place, and to walk away from the truth, wasting time. "
"In many cases, talent is not the most important." But word of mouth is important. People hire friends, people who are not liked, and insignificant people are the first to be fired. MLGB). or change the environment, can not change to adapt, can not adapt to be eliminated. This is ' society '. This is the case in the enterprise, the academic session is also. Do this, you know who, learn to sell yourself, build your reputation. So that you can take a foothold in the enterprise. "
Little printf: "If working in an enterprise is so disgusting, make a trip to others." Then I really do not want to work in this environment! (Dark office politics, fortunately I haven't met yet?? )"
Sixth chapter
When it was time for lunch, little printf interrupted a man who seemed to have forgotten to have lunch. The sandwich on his desk was cold, but he sat in front of the table staring at his screen.
He seems to be very busy, but no one knows what he is doing.
Little printf: "If the primary database is hung up, will it be hung from the database?" (The master-slave database is created to reduce down-time so that the database can remain in working state)
"All the things you run, either sooner or later, will hang out. "
Little printf: "Your past experience tells you all this will fail?" "
"Yes, not only so." All large systems will have problems at certain times. (Just like the millennium bug problem??? )
Little printf: "So what do you need to do to be a reliable system?" "
The man was busy with his own affairs, ignoring little printf.
Little printf asked again: "What do you need to do to be a reliable system?" "
The man is trying to solve a problem in the product, but little printf has been asking nonstop and he hasn't had lunch yet.
So he was impatient and even rude roar: "This is impossible, programming is shit??。 "
Little printf took a breath, half a day to say a word.
Little printf?? "I don't believe what you said," replied angrily. The program is fragile yes, but programmers can improve this while making something better and more useful "
The man had no answer, he was??? Read the document and try restarting a new cluster, but things are getting worse.
Little printf: "And you should believe that there are good and reliable processes." "
"Impossible" the man interrupted little printf, and then said, "I don't believe in a reliable or good program!" Not at all! It was my first feeling because I was working on a garbage system. Can't you see I'm trying to get this thing to run? This is the truth! "
Little printf was shocked and looked at him and said, "Is that so?" It's like you're an expert! It was you who made all the mess. There are millions of and tried-and-tested programs in the world, and they also have bugs and crashes. But people still need them and use them. As far as I know, many procedures are not a problem. Most of the problems occur because of a computer's environmental configuration problem, or a faulty operation. Don't you think that's where the problem lies? "
The man was speechless after listening.
Seventh Chapter
Little printf came to the fourth place and met a man whose computer was almost covered with sticky notes, and no one knew what he was doing.
"Motor-mvc, Quadrangular JS, Goquery, Cometeor, some Japanese soundy thing, ..."
"Hello, what are you doing?" said little printf, interrupting his talk to himself. "
"Alchemist, Bongodb, Mochascript, Walktime.js, Portasql, ...", which man continued to talk to himself
Little printf raised the volume and asked again: "What are you doing?" "
"Oh, I'm experimenting with new frameworks, tools and languages. "
Little printf: "Wow, what you touch is so fresh!" Most people have never heard of this. "
"Yes, this industry is fast with the new!" He glanced at his cell phone and said, "Look, the cardboard.io
framework has launched version 3.5, which declares it incompatible with 3.4." At the same time there are already 4 derivative versions of the community. I have to pick one out of them. "
Little printf: "What did you do this for?" "
"I am the first early adopters, if you do not keep updating the skill tree, still use the old: COBOL or MUMPS (two old programming language?? )。 You also want to seize the chance of success, seize the initiative, the opportunity to start? "
Little printf: "Have you been successful in predicting the hottest technology of the future?" "
Yes I found out that rails was still small and it wasn't popular when I learned about node. js. I am a beta user of redis,mongodb and Riak. I was the first user to try out vagrant, and then I turned to Docker, but now I'm focused on unikernels. "
Little printf: "So cool!" What do you get in return for being the first to try out these technologies? "
"Well, not at all. As rails grew, I was looking for something new. Similarly, the other several technology I also like this (he not only spoil one, but the rain equitably?? )。 I'm pinning my hopes on the unikernels now. "
Little printf mused for a while and said, "What problems do you solve with these frameworks and tools?" "
"I always make sure I don't use immature things because I can't gamble with the company. This is important, because if you use the latest technology, you may not be able to recruit people without paying attention to the new technology and may be out of step with the times. So we encourage the learning of new technologies. "
Little printf: "This is very interesting. "
"In this fast-growing world, if you want to participate in this game, you need to have advanced technology. Otherwise you will be eliminated by The times, no one wants to be eliminated by the times. "
Little printf: "No, you misunderstand me, I mean: good tools are created to solve problems." But you are blindly pursuing new technologies, not for practical purposes. "
After listening to these words, the man stayed, and little printf jumped out of the room.
Eighth Chapter
Little printf came to the next office, where a weary female employee. The table was disorganized, the whole man listless and frantically typing.
Little printf: "Hello." "
The lady did not stop her work at hand and went on frantically typing.
Little printf called again: "How are You?" "
The lady stopped and picked up a bottle of coffee and took a bite.
"I have a very bad job. "I'm a devops (dev, ops, test-in-one job). At the beginning of the good, I used to develop most of the time, and then take some time to fix the bug. But things are getting worse and bugs are starting to go on. In order to get rid of this situation, and at the same time to complete. I had to use some ' artifice '. "
Little printf: "Why do you disregard people to help you?" "
"I'm good at doing these things. I'm used to it all under my control. And because they're used to the fact that I can hold on to everything, it's easy for them to think I'm slacking off if I put myself out of control. "
Little printf: "This is really sad story." "
"That's the way it is." Because you are most familiar with these problems (bugs?? People, you can only become more and more tired, until your boss recruit a person to replace your original work, this is the only way out. But if you have problems when you're worried about other people changing what you write, you can only help others change one bug after another, of course these are all things you hate. Until you feel numb to it all. "
Little printf: "You are so unfortunate." "
The lady was called to work again.
Little printf said to herself, "this woman will be laughed at by the people I met: the senior expert (who focuses only on his areas of expertise), the rock-and-roll developer (who is overly interested in the new technology), and the High-level programmer (who is surrounded by the big-book-loaded x Programmers). Although he is the only one who is helpful in these people. Maybe it's because she thinks it's good to be a pro. "
Nineth Chapter
Little printf found a large office with huge windows and large windows in the building. Here sat a German old man, and piled a pile of papers before him.
"Ah! A developer has come. "The German old man exclaimed at the same time Hello small printf said:" Come in! "
Little printf looked around the window and found it was full of things. It draws a variety of circles, arrows, cylinders and clouds (the graphics on the glass in the picture). I don't know how this old man paints these things.
Little printf: "What's on the window?" "
"Oh, these?" This is our on-line system! The old man casually said: "I am a software architect." "
Little printf: "What is a software architect?" "
"In general, people who know how to build large systems and make every part of the system very stable." The architect also has knowledge of databases, programming languages, frameworks, writing programs, protocols, encapsulation, and reducing coupling. "
Little printf: "Sounds exciting!" Finally, someone can answer all my questions! Little printf glanced at the structure of the glass and said, "Your system is so big, is he running fast?" "
"I can't tell you." The architect said, "It should be quick." "
Little printf: "What about its code?" "
"I can't tell you." "
Little printf: "Do users like this system?" "
"I'm afraid I can't tell you that either." "
Little printf: "But you're a software architect!" "
"I'm really an architect, but I'm not a developer. Architects do not do, for example: Functional modules, classes, integration Lib and so on. This kind of work. The most important thing for the architect is not to write code. He is the one who guides programmers and developers. The architect will take over if there is a tricky, unresolved problem. "
Little printf: "What is this for?" "
"Because we have experience. We understand the system and can solve all of its problems. The developer can develop a good system based on our experience and guidance. "
Small printf: "But you do not write, do not look at the code how to know that this will be a good system?" "
"We believe in developers. "
Little printf: "So you believe that developers can get your ideas right, but developers don't have a chance to make their own ideas?" "
The software Architect was obviously stunned: "I think ... He finally admitted: "You just raised this question, in fact, many of the proposals in the work are not confirmed, or experimental ... He paused and pondered and said, "Sometimes the software architect looks neither a software engineer nor an architect (a teacher?"). )。 "
Little printf left the room and ended his journey. Out of this building.
Tenth Chapter
Little printf went outside and found a man who raised money for charity.
"Hello," said the man, "How do you feel about helping people who need help?" "
Little printf: "That might make me feel better, I spent the whole day in that building (the building where I met a variety of programmers) and I was looking for help." But now, I feel more puzzled than before. "
"Well, I'll analyze it for you: those people are developers, and they don't really help you, do they?" They like to say "programmers change the world," and so it is in real time. "
Little printf: "Then why do I have nothing to gain?" "
"What they do best is helping to turn people's work into programs that make people relaxed. Software is engulfing the world and changing the face of world reform. But in fact it's still an old world. Because changing in this way doesn't mean things are getting better. We still have some deep-rooted problems (for example, the question of thought, or the lack of creativity.) )。 "
Small printf anxiously said: "How to do to make me feel better?" "
The difficult thought for a while, finally proposed to let little printf help him, for those who need help to raise money. Because this man thinks this way can make him feel better. In one afternoon, little printf told the man about his problems and his experiences.
The man pondered for a long time and said, "in a game, they get pleasure from solving complex problems and the fame and identity they value, which is a moment." Because in the end, if you solve a problem without real value (to solve the problem and solve the problem), ignoring the ' people-oriented '. Then you will never get to the real satisfaction! "(That's very nice!) )
He went on to say: "As you grow, you may find a better unit than before." Maybe it's more money, or because it's more fun, it's normal. As long as you know what you want! "
Finally, he added: "In the end, when you solve the problems people really face, you will feel real satisfaction!" Sometimes you don't need a computer at all. "
"You spend a lot of time on your system. The most important thing is that you forget why you created the system, and instead spend time optimizing the system, it becomes a game of ostentation. That's the saddest thing. "
"Developers often forget what they started with (really meaningful things). If you lose the meaning of doing this, but to solve the problem of the system, you spend time on it. That's where the problem lies (if you're just trying to do a good job, rather than solving a real problem, you need to rethink it).
Small printf repeated this sentence, want to print in the mind: "Only in solving the problems people really face, can get real satisfaction!" "
11th Chapter
Little printf sat in front of me, chatting with him, and I began to think seriously: Why I was on the road to programming. Little printf had met everyone before, as if I would someday be one of them (it was a sad scene). I was encouraged to be a programmer like them by such people (the programmers I met before in the small printf).
I was dragged into the game of ' real programmers ', which little printf didn't like. Little printf once said: "Compared to ' real programmers ', I want to be a programmer who solves real problems (programmers who solve the problem, not programmers who solve programming problems)."
Today I sit here and look back at my entire programming career, and I want to make it clear that it is the programmer who solves the real problem, or everything that is done. The two are completely different.
Anyway, little printf thinks he doesn't need to be a real programmer. I think so now, too!
How I feel.
After translating this article, I think this article is very good, he let me realize: programming for what? What exactly is a real programmer.
Self-reflection of the next. I am busy in the pursuit of the number of technical stacks, has been to pursue technology (or work) and learning.
It was as if I had no intention of collecting branches, and suddenly a point. I looked down at a trapped branch, but forgot why I had to pick up the branch. I learn the framework of Python in this sense, in order to work, I learn flask,bottle,tornado framework. But everything is for work. Cause I want to write a web app from scratch without a clue, do not know how to start.
For the future of the road to programming: I should aim for the driving force, not blind pursuit of technology. Often ask myself, what is the point of my doing this?
What is a real programmer