The greatest task for programmers has little to do with coding. Encoding is a kind of logic practice, which is relatively simple compared with other tasks in the daily work of programmers. If you think you are a general programmer, make sure you have overcome the following obstacles before you can truly enter the ranks of experts.
1. Explain what you are doing
It is very difficult to explain the software development process. Those who are not programmers may know a lot about programming, but obviously they don't program. For them, our life is consuming coffee in a dark room in front of the keyboard.
If you meet such a person in your friends, family, and colleagues, he will think that encoding is not a correct profession.
2. image presentation software solutions
Based on some brief requirements-usually half-understood, you need to design data structures, software architectures, code algorithms, communication protocols, and all other components of solutions for business problems. Then you need to express them in terms that the layman understands and submit them to the customer within the specified time.
Few programmers can do this well.
3. Estimate the Construction Period
This is the root cause of programmer pain. Before the development task is completed, it is absolutely impossible for you to determine the time required to complete the task. The program may be very similar to the one previously written, but the environment has changed, the problem has changed, and the restrictions have changed.
Experience provides some judgment, but most programmers are used to underestimating the difficulty of the problem. The reason is that they only consider encoding, and ignore other transactions in the task list.
4. Maintain others' code
There may be 10 thousand solutions and 10 thousand writing methods for one problem. Taking over the code written by others means that you have to spend countless times exploring and understanding the author's ideas in thousands of code lines. In addition, if it is a half project left by a programmer who does not believe in comments and documents, the trouble will be even greater.
5. Fuzzy spread of software boundaries and strange functional requirements
Although agile development provides some preparation space for the expansion of software scope, however, this does not play any role-especially when you encounter some functional requirements that arise from the whim of the moment. You know this will definitely fail. Your team knows that this will definitely fail. But the customer thinks it is good, and when the failure inevitably occurs, it is your fault, because you do not understand their true intention.
6. Find a balance between lack of optimization and over-Optimization
Complex software will never be perfect; there will always be some better solutions. You can continue optimization, which is why software projects have never been completed in advance.
On the other hand, the mentality of "This is all you need -- I will optimize it later" is also common. The code is easy to use today, but you know it may be troublesome or unavailable tomorrow. Of course, you don't need to modify it. It will be left to the next unlucky programmer.
7. Test your code
You have also written the unit test and submitted the software to the test group, but the bug still exists...
The software is complex and may contain thousands of lines of code. There may be millions of interaction and logic paths in the system; you cannot test them completely.
Similarly, the software interacts with different software on different platforms under different conditions. You cannot measure all of them.
Writing a good unit test is a boring and hard job. Ideally, the test should have been written before development-but how do you explain to the customer why four weeks have passed and there is still no available software?
Unit testing does not cover every problem point. In the ideal world, there should be an independent team to write tests and actively discover problems. Unfortunately, for most projects, the cost is too high and the time is not enough, so developers are used to write test programs. The Development Team subconsciously avoids many extreme boundary situations.
Programmers like to handle all problems in a logical way. But few users do. They will find unexpected problems.
8. Write Software Documents
Writing documents to code is a laborious and time-consuming task. Few programmers are good at this and love this, and few will spend time reading them.
9. Handle IT problems
You are studying technology every day. You may be an HTML or PHP programmer, but you may encounter problems such as hard disk damage, driver conflicts, or software crashes. Solving these problems is not your primary responsibility. However, unless you solve these problems, you will not be able to continue your development work.
Unfortunately, programmers outside the IT circle should be proficient in software and hardware. When they encounter a problem, they will solve it without having to spend time on themselves and will look for you directly. No matter what the problem is: you are using a computer, you must know how to import the budget table to Sage, how to configure Oracle, or why they cannot send emails on their BlackBerry phone.
Of course, these interruptions cannot be a reason for your failure to complete your work, nor are you paid, right?
10. handling personnel problems
The above problems can all be summarized as "human problems ". Few outsiders will advise a pilot on how to fly or how to wiring an electrical engineer. However, many people are eager and brave to suggest how to develop software.
I believe there is no good way for these people. You need to accept the fact that half of the world's intelligence is lower than the average!
[The Ten Toughest Tasks in Development]