Methodology and methodology-programmer's Achilles heel
By Liu weipeng (pongba)
C ++'s Luo Yun (Http://blog.csdn.net/pongba)
Toplanguage (Https://groups.google.com/group/pongba)
In the past, I thought that a thing would not be used directly to me and I would not care about it. In psychology, we all wear our ownCognitive BiasColored glasses to goSelective ViewIn this world, the vast amount of information passes through ourCognitive SchemeAfter filtering, it becomes a small number of ordered events. Therefore, we all pay close attention to some things and ignore other things. However, this may lead to loss of valuable information, I always keep my knowledge in my own small world. Of course, this is not to say that I have to learn everything. How to strike a compromise between the two, I think a good solution is to briefly think about what this is, what its nature is, and what needs it to meet, wait for a while to compare "high-level" Problems (that is, "What" and "why" rather than "how"). These problems can be concluded through simple research and consideration, as for the technical details behind it, if you plan to enter the course, you can learn it. If you do not plan it, you can skip it, at least the previous thinking and simple research can ensure that you will not hide your eyes when there is valuable information or opportunities in front of you, doing more such thinking is also of great value to the breadth of thinking. Recently I started to think that the best way to learn is to first traverse the breadth first (first, find out what and why), and then select the most appropriate branch (how)Dd studentsIn a post on toplang, we also mentionedSimilar ideasI admire dd as soon as I enter the university ).
Methodology seems to be a very abstract thing, and there are indeed some methodologies that are abstracted to over-generalized (over-generalization), but to be honestIn practice, I always find that (correct) methodologies are unrealistic.For example, what everyone understands is that if the direction goes wrong, the work will be in vain (for example, "If the method is the right one, you can get twice the result with half the effort, on the contrary, it may take a lot of detours ")-but how many people can actually practice this method? The vast majority of people only focus on solving the current problem. They have caught the head and lost the head. More people do not know what the problem is, simply apply a similar solution that can be thought of in the mind in a similar situation. In the past, I always thought that the role of CEO/CTO in a company is a basic decoration, but I don't think so now. At the level of how, when we make things well and make them a good programmer, we can make them good at most. Many people can do things like this, and it makes perfect. In other wordsProgrammers basically solve a defined problem and implement a defined solution.. However, the decision-making problem is different. The decision-making problem is to define the problem and weigh the best solution. No matter the Decision-Making technical architecture or the decision-making business strategy, it is a very complicated process of thinking, yesCombine and weigh a large amount of information, This capabilityThis is not something you can do with your head. In many cases, you need to look up your head to avoid seeing the trees disappear from the forest.. (The above is why I posted a post in the discussion group (What is an algorithm? Why learning algorithms? And to what extent?) I thinkIf you are proficient in mathematics, you may not be able to think about the cause of daily decision-making problems.-- Mathematics almost always solves a defined problem, and uses well-defined logical derivation. However, in reality, the problem is a complex system where many variables affect each other. How to weigh the best scheme is actually a complicated overall planning. More importantly, you often don't even know what the problem is. Being able to abstract the problem from the complicated information is a great capability. Recommended hereIs your light on?AndLogic of failure)
Of course, I have not been able to reach this level, so I still need to continue to practice and summarize, so I can only talk a little bit about my feelings, and I am afraid that it will be vague. In this regard, I would like to give you an example that programmers like to hear. In the eyes of programmers, to create a project, you may first think of the language, framework, and library used, in this direction, what seems to be the use of Java? That's boring. My brother in elementary school can master Java's mentally retarded syntax, and I have no sense of accomplishment (unfortunatelyWhat really identifies mental retardation is not what language technology is used, but what products are made to meet what needs). This is a simple (or naive) decision that only considers a single isolated factor. This is a pity as long as it makes me feel better.It's not just a matter of making yourself feel good, it's a matter of actually solving the problem.Always find out what the problem is. In the latter sense, some topics that are often not attractive to technical programmers have extremely significant value-for example, when to design and when to refactor, when to integrate and go up to the next level, these are all secondary issues. The primary issue is what needs the product to meet and what market it has (that is, it is not worth doing ), many people often hear about one sentence,If you don't know what to do, setting up the 12-layer architecture won't helpThe method is never a cause, but a result (I wrote in another article"Failing to see the big picture-mistakes we make when learning Programming).
For another example, if I want to create a feature for my website, I think this feature is very powerful in technology, in addition, I just had the opportunity to use the recently developed XX framework and XX language. This is also very challenging, and it is not something that most people can do. In combination with the above three points, I immediately felt hard to get rid. But how should we analyze this problem? First of all, considering the above three points, this will be a very large investment project, so its benefits must be able to afford this investment. Technically, it does not mean that the business is good, if the rare feature cannot bring commercial value, it is a negative benefit. All in all,
1. One thingOnlyIt doesn't mean this is worth doing;
2. One thingOnlyIt doesn't mean that this is worth doing.
These two statements do not conflict with our daily understanding.We can almost always find valuable, interesting, and challenging jobs.. For example, do students with excellent mathematics in their undergraduate courses occasionally feel blind? What are the practical uses of these questions? It's like you're always grinding a knife, and it's so shiny and sharp that you can show off your knife to others, but it's just five steps in the dark, you don't want to let it go. Whether you use mathematics in mathematics or physics, artificial intelligence, machine learning, cryptography, or communication, it's a sense of accomplishment, at the same time, there are meaningful and valuable things. For our programmers, you are very proficient in a language, not only understand all of its syntax details, traps and defects, but also how its underlying implementation model is. You think it is a great sense of accomplishment-indeed, we are all proud to do what others can't do. However, apart from the emotional value, is there anything you feel about the value of this kind of thing?If you are only cutting a pencil, why is it necessary to sharpen the sword of the Dragon Sword?On the contrary, if you are working on a software that features a lot of innovation and value, then language technology is actually secondary.It doesn't look as dizzy as possible. The key is to choose the most appropriate tool for comprehensive consideration. The Swiss Army knife may be ugly, but it is very practical for jungle adventures.It is also unreliable to survive in the wild with a Dragon Sword.
Programming languages are designed to implement software, and software is designed to serve people. It is true that understanding all aspects of a language enables you to use it more effectively. However, if you find that the language does not solve your problem at hand, what should you do? InvestedSunk CostsDo you feel unwilling to influence it? Likewise, because you have invested a lot of energy in a tool,This tool has been hooked up with your emotions, so if you want to decide what tool to use to complete a task, you will almost certainly think of the one you are most familiar.This is an explanation of the sentence "when you get a hammer, everything looks like a nail.The original problem was that a technology was used to achieve the most cost-effective product. However, when you got there, the problem quietly turned into "using a technology makes me feel the best ", all other factors that require comprehensive consideration are selectively ignored., SoIf you are a language-based fans, you will almost certainly become a bad decision maker.. Recently, I have heard more than one person on the methodology of learning and research (see the logic of failure andHere-The advice of a Nobel Prize winner (as described below) advises us not to use tools, but to forget what the purpose of tools is.
... The microphotography experts we mentioned earlier are good at taking photos of silicon algae. zooologists are fascinated by insect shells and birds with beautiful feathers. The most happy thing about our book lovers is reading the latest books and special opinions. He thinks these things are very important and can stimulate his mind, but others can't find another book. Our model of erudition, through this strategy, surprised his friends and admired his friends...
... Among the less efficient scientists, there is a small kind of crazy people who worship research instruments. They are very fascinated by the flashes of metal, just as the night e is fascinated by its shadow in the mirror. They carefully take care of what they worship, and wipe the instruments with a clear wipe. They can be used as mirrors and place them in the highest place, as if they were in the holy altar in the church...
CodinghorrorThe author recently followed in his blogSteve yeggeThe student declared that if one thing he wanted to teach programmers, It would be marketing. Coincidentally, when I had a mealBao zhiyunI also mentioned that marketing sense is very important. In fact, you should not always think about writing code, use the language technology, or fall into the technical Strange Circle. Instead, you should first understand the value of doing things and first find out what to do, why, and how to do it again, so that the subsequent effort will be valuable.
You won't -- youCannot-- Become a better programmer through sheer force of programming alone. you can only complement and enhance your existing programming skills by branching out. learn about your users. learn about the industry. learn about your business.
Of course, what must be stated at the end is not to overdo the above, misunderstanding the above points of view, the above points of viewIt doesn't mean that basic skills in the student age are not needed., Some very basic effort (such as computer architecture, data structures and algorithms, two main schools (imperative and declarative) the main programming paradigm used by programming languages, the advantages and disadvantages of mainstream languages, and the knowledge of application scenarios are necessary, on the one hand, we are not all able to make judgments and decisions, and coders are always a reliable profession. On the other hand, grasping the overall direction of technology is also the basic knowledge of decision-making, just don't fall into the endless technical vortex and become a technology chaser. In addition, there may be a small benefit: if the boss forces him to use an unfamiliar language, it will not be very unpleasant, becauseWhat really matters is the product you complete, not the language you use..
An interesting Appendix
Our thinking has many weaknesses. We have mentioned these weaknesses in the previous article. For more information, see.Here, AndHere. I have always believed that the correct way of thinking is the foundation for efficient learning. For example, see the following two examples. a wrong way of thinking has a much higher possibility of failure.
[1] People always prefer to follow their previous learned experiences and use analogy to deduce them. When I took the subway at a subway terminal for the first time and looked at the subway from a distance, I was puzzled-"every car is so long, how can I adjust my head? (I didn't see a U-shaped bend at the end of the rails )? ", When I started driving the car, I realized that the car could be driven in both directions.
[2] people like to look for cause and effect from association. Once my wife went to the bank to withdraw money and went to the automatic door of the ATM room, I jokingly brushed it with the meal card at hand, then -- the door opened. I immediately came to the conclusion that the card swipe device was not safe, at least not capable of identifying UnionPay cards. I even quickly generalized a more general theory to explain this phenomenon: it is possible that all magnetic cards can be used to open the door. My wife threw a cold disk of water at my satisfaction: It's not necessarily your card. You don't need to swipe your card to try it. I don't believe it. How is it possible? I thought that I had to swipe my card and opened the door. There is a more obvious causal relationship than this. But to my surprise, I stepped out of the door, but this time I didn't swipe my card, and the door opened. It turned out to be a sensor door. Originally, this ATM room was indeed a hacker, but later I changed it to a sensor door, the device that swiped the card was not removed and left there.
[3] from the perspective of cognitive psychology, the logic of failure systematically introduces how we make judgments and decisions in complex situations, which is worth reading.