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.
3 Comments
Hi,
I totally agree with you that there is more demand than supply.
I am a researcher in parallel scientific computing. Our aim is to produce efficient algorithms and code for simulations of e.g. ground water flow. At the same time this code should be well organized, modular and reuseable. Therefore we need people, who understand the math and at the time are able to reproduce the developed algorithm in code ready to be publically released.
A few years ago the group, that I am part of, moved to another university and was assigned to the computer science department. Formerly we were part of the mathematics institute and it was always hard to attract good students with a decent level of programming skills. We had hopped that with being part of a computer science department, many brilliant programmers would now be available. But again there were only very few with enough C++ experience to be able to extend our libraries. (Mainly because most people do not teach it but prefer Java, etc.) And even those usually had a hard time understanding the math. It turns out that it is very hard to learn the math a usual computer scientist is lacking. It seems to be easier for mathematician to raise their programming skills. Of course this takes years and the mathematicians must be willing to learn which is not always the case.
BTW of course we (and probably a lot of other groups) teach numerical programming for years now and the situation is improving. At least we now know the skills of our students and they know what they are up to if they a write a thesis at our group.
For the industry it would probably be a good thing, to find groups that are active in scientific computing/financial engineering and a aproach their students directly. This is probably better than relying on labels like first tier/elite to recruit people.
I doubt that making programming courses mandatory is the solution though. We always experienced that the really good people were not those with most (mandatory) programming courses but those guys ambitious enough enough to do a lot of self learning far beyound the scope of any courses. Of course this attitude is hard to assess. Still mandatory courses could be a starter for ambitions.
To sum this up. What you demand is there already. Admittedly, it is not well advertised and advocated, but with a little bit of research it should be possible to find just the kind of people your are looking for
@Markus B.:
Hello Markus, thank you for the information. It is nice to hear about the usage and development of mathematical programming from the academia.
Would you be able to shed some light on the programming course you teach, or maybe a link to the syllabus?
c.f., “we (and probably a lot of other groups) teach numerical programming for years”.
I myself as a professor in a university in Singapore is designing a similiar course. It would be good to have some reference. Numerical Method Inc. is also constantly hiring such talents.
Yes, I absolutely agree with you that “the really good people were not those with most (mandatory) programming courses but those guys ambitious enough enough to do a lot of self learning far beyound the scope of any courses”. To me, programming is an art beyond engineering. You need some sort of innate drive of “getting better” to produce elegant code, just like painting.
Kudos to you! I hadn’t thought of that!