I have been puzzled by this question for a while.
High-frequency quantitative trading on the Strategic division of the program design ability requirements are high, although the computer department, the sense of inadequacy or long companion.
Later, I met two Daniel in the work, I like them to ask the difference between the college program design and industrial programming, only to find that the original school teaching is pit dad's thinking way of the 90 's.
The most shocking difference: The algorithm is not big
All kinds of competitions in school the algorithm is referred to the infinite height. In addition to the bottleneck in the actual work, the advanced algorithm is useless. And in the work of advanced algorithms usually have a dedicated module package to provide, no one would be a fool to write their own hands.
The most comprehensive subversion: ease of maintenance higher than execution efficiency
Industrial programming is mostly done in large groups, it's normal for programmers to quit and change groups, so the biggest problem in the job is to read other people's code and write code that others can understand (don't tell me you're writing documents alone, document maintenance costs are high, and often there are document code mismatches that are confusing). So knowing the balance between efficiency and maintainability is the sign of getting out of college.
Best Tools: Profiler
The way that Daniel writes to me is: Spend a lot of time designing the architecture, and then write the implementation in the quickest and easiest way, then profiling, dig the bottleneck and make the improvement. It is a common mistake for students to consider detail design at the outset.
The biggest gap: multithreading
There are only two kinds of programmers in the world, one that can be left and right, and the other not to call themselves programmers. If you can not play to multithreaded design, or career change to do other career better, such as many people go back to school when the teacher taught programming.
The biggest challenge: the architecture design of large multimode system
Great architects are like the conductor of a band, and they understand a real problem: Different modules are written by different people, they have varying abilities, they may not be familiar with each other, they have not even seen them, and they are hostile to each other. Architects must have prestige, otherwise each group will find an architect complaining about too much module work to make the other modules share a bit. The architect must have leadership skills, or the problem will be buck after the line.
So the architecture is not just how the procedures and procedures communicate, but also the different groups of people who communicate. Good architecture allows different modules to blame trenchant, different groups of people clear division of labor, this is not only conducive to the initial function of the implementation of the system after the maintenance and growth of health is also critical. This is not learned in school.
I think about that for a while. I've gone to the second line for quantitative strategies because I can't get around to it. So we can only give a 2cents to a bystander.