← blog

3 Nov 2010 · by Haksun Li

The Demand of Good Financial Engineers

It is very difficult to find people who can produce effective code for mathematical models. In general, mathematicians do not write good code and computer programmers do not understand the (advanced) mathematics. Yet, computer language is the only language we use to turn an idea into a product that people can use. I foresee that the truly valuable talents are those who have creative ideas and are able to implement them. They are the most-sought after in many engineering disciplines, e.g., finance.

Speaking from personal experience, I have been working exclusively in the financial industry, Algorithmic Trading in particular. This field is where mathematics and computer science meet. As an algo-trader, my job is to develop mathematical models and write computer software for automatic execution. In addition, I lead a team of mathematicians to design trading models and a team of programmers to build these systems. From these years of job experience, I find it exceedingly difficult to hire the perfect candidates to work in this algorithmic trading industry.

I have hired some very good statisticians and mathematicians from the top schools. They produce good research and design very sophisticated mathematical models. Unfortunately, they are not able to program to the professional standard their models that are ready to be used by other people. Often the programmers need to translate into C++/C#/Java their prototypes in Matlab/R. On the other hands, it is unrealistic to expect the programmers to develop these mathematical models simply because they do not have the training. In summary, my dilemma is: mathematicians cannot differentiate between inheritance and interface; programmers do not know about hidden Markov Chain.

It occurs very surprising to me that given the prevalence of computer programming in the industries, such as finance and bio-chemistry, universities have not been placing enough emphasize and proper training on their students. In my opinion, in a scientific corporation programming skill is as essential as speaking English. It is a way to communicate ideas (models) in a form that other people can actually use, i.e., a product. Our school curriculums have a number of drawbacks.

First, programming courses are not mandatory for many students, even science students. For instance, statistics students can graduate without ever taking a course in computer programming. They might very well be proficient in Matlab, R, and other specialized software. However, these are not real programming languages. These have little use in an industrial production environment. The students are still not trained in terms of object-oriented concepts, debugging skills, software engineering principles, team collaboration, quick adaptation of new tools and technologies.

Secondly, the professors, instructors, or lecturers teaching the programming courses usually have little industrial programming experience. Speaking from my personal experience, I thought I was a good programmer when I graduated with a PhD in computer science and after spending many years programming for my thesis and homework. It turned out that I was very naïve and ignorant. I was proved to know nothing about industrial programming on my first job. Looking back, the professors teaching programming in universities are probably in the stage where I once was. Most have never delivered a real product (not hands-on anyway).

Therefore, as we are now in the era of a technology driven world, the truly valuable talents are those who can have creative ideas and are able to implement them. I foresee that, gradually, the schools begin to recognize that having good programming skill is as essential as having good communication skill on the job. I am looking forward to changes in the academic curriculums. More emphases are placed on computer programming training across all majors. At the least, all engineering students must be proficient in one modern programming language. Equally important, these programming courses should be taught by experienced professionals rather than academic people who are trained to write journal papers.

In conclusion, I would like to see in universities a new course to teach numerical programming. This is a course to educate science students (not just computer science students) how to code mathematical models. That includes a modern programming language, software engineering methodology, debugging, algorithm design and analysis, effective implementation, and design pattern.