programming Ability is a problem-solving ability. If the problem is not solved well, it is useless to know more.
programming ability is the ability to solve problems by using machines. The first is to determine to what extent the problem can be solved by the machine, such as theoretical computer science will tell us what to do, what is theoretically not done, what can theoretically do not do in practice. Then the machine is better able to understand the problem, such as the computer is (Turing-von Neumann model) equivalent, but different problems may be applicable to different programming languages. The latter is to allow the machine to solve the problem more efficiently, such as the same problem may have a huge efficiency difference algorithm.
the ability to program is an abstract problem. Borrowing a wheel is a good way to save time and effort. Today, any software engineer will use many wheels unintentionally, from the operating system compiler database network to the algorithm data structure. If you want to borrow the wheel efficiently, you need to decompose the problem and decompose it, abstract again. Any practical system (excluding textbook sample programs and simple scripting programs) requires a lot of spin-offs and combinations. So system design is a high-level skill in programming capability, and it is especially difficult to add reasonable assumptions to simplify the problem, not discussed here. The difference between a master and a novice is that the novice often does not know the scope of the wheel, and the master's hand on the number of wheels and familiar with various wheel differences, so the different problems can easily find the right wheel, when really can not find the right wheel when it is possible to manually transform the existing wheel. Usually have time to disassemble and transform the existing wheels will be more helpful to improve the level. Of course, it is also a capability to know how to quickly find a wheel in a search engine.
programming capability is an ability to consider extensibility. Many algorithms in the algorithm competition consider the single-machine memory algorithm, the computational model is highly abstracted, in practice the model of the machine is more complex. such as single-machine multi-level structure brings a variety of time and space complexity of the trade-off balance, how to improve the performance of the multi-machine network in the further optimization of the overall performance. In addition to extensions on the machine side, extensions at one end of the programmer are also important. Complex problems and engineering often mean teamwork and longer development and maintenance, teamwork and design communication here for the time being. Give an example that is easy to overlook, a comment in the program. The expert will be more concerned with the complete and clear comments, because this is for the present and future teams (including themselves and other members) to see, directly affect the long-term overall development and maintenance efficiency.
programming ability is a kind of trade-offs ability. The local optimal solution is not necessarily the global optimal solution. If a wonderful solution needs to postpone the completion time by a month or two, consider whether to use an ordinary solution to solve the problem before you optimize it. This is especially true when your work is delayed and hinders other people's work. When you find a great optimization plan, think about whether this optimization is really valuable, if it's just a small part of the system, then don't spend a lot of time putting on a nice wheel for mental gratification (see Amdahl Law).
Programming ability is a kind of ability to foresee the future. What are the assumptions and limitations of the current scenario, and under what circumstances will there be problems or even crashes? Whether the problem needs to be redefined in the future, whether the system needs to be redesigned, whether the code needs to be refactored or optimized, and so on, need to be proactive.
programming ability is a kind of engineering ability. Without it, only hand-cooked.
programming Ability is a problem-solving capability。 If the problem is not solved well, it is useless to know more.