2016-01-16 11:44:53

Choosing A Language

I'm back after a hectic holiday calendar and a bad flu. Fortunately in the intervening four weeks the platform has become more stable so we should be able to make more progress.

I just read an article about what it takes to be a stock broker at one of the biggest brokerage firms on wall street:

http://www.zerohedge.com/news/2016-01-14/so-you-want-be-citadel-trader-here-are-requirements

Note that "human" trading is not even mentioned in the posting:

Quantitative Trading Systems Developer: Undergraduate, Master’s, PhD and Postdoc (New Grads)

Location: Chicago, IL

Are you a natural programmer who loves to optimize and make systems more efficient? Do you have a sophisticated computational skillset – code optimization, systems architecture and library design? Do you know your core languages like you do your native tongue?

At Citadel, Quantitative Trading System Developers are responsible for designing, building, and optimizing our automated trading platform. Developers work closely with our research, simulation and live trading teams. We are seeking top undergraduate, master’s, and PhD students who are entrepreneurial self-starters and enjoy being in a fast-paced and dynamic environment for exciting opportunities in our automated quantitative trading businesses. This opportunity offers excellent exposure to a quantitative trading career path in one of the world’s leading global financial institutions.

If this is what excites you:

  • Developing core trading infrastructure
  • Designing low-latency, high-throughput trading systems
  • Optimizing massive parallel computing platforms.

And this is what you’ve got:

  • Advanced training in Computer Science, Computer Engineering, or other related fields
  • Extensive programming experience with strong object oriented design skills and fluency in C, C++, or Java
  • Expertise with algorithms and data structures
  • Demonstrated ability to communicate complex ideas in a clear, concise fashion
  • Ability to thrive in a complex, fast-paced, and highly technical environment

Useful:

  • Scripting languages (e.g., Linux shell, Python, Perl)
  • Analytical packages (e.g., R, Matlab)
  • FPGA development and high performance computing
  • NoSQL databases (e.g., MongoDB)
  • Distributed computing using MapReduce
  • Multi-threaded programming
  • Network programming

What caught my eye was the fact that not a single one of the 189 participants that have chosen to make their github repositories public have decided to write in R. R programming language is mature and stable and has an active user community. It is listed as one of the "useful" skills in the above job description. Note that the required skills are C, C++, and Java. Not a single one of the participants chose to write in C or C++ and only 13 of 189 or 6.8% chose to write in Java. In addition if you write in Python ( chosen by 15% of the participants ) you are considered to be writing in a "scripting" language. This word "scripting" is a pejorative that means that you are not writing a "real" program. It is somehow not as good as a real honest "man's" programming language. This is a slap in the face to all the Python, Perl and Bash programmer out there who's collective work holds the internet together. The arrogance and dismissive attitude galls me. I have written primarily in Bash for many years and I consider my work to be professional and of tremendous value.

chart of langages used on github for stockfighter challenge

One might conclude that the participants either do not wish to be hired, or think that their skill in other languages will be thought fungible. In light of the fact that the Stockfighter challenge bills itself as a job placement web site, I have to conclude the latter. My experience with human resource departments at large institutions is that they are inflexible and frankly incompetent. They cannot make a determination about the technical skills or conversely the trainability of candidates. In general if you know one language it is pretty easy to pick up another one in a matter of weeks. The current buzz word is "Object Orientation" and the job description mentions only C++ and Java as candidate OO languages. Given the huge academic and industry move to Java as a standard over the last 15 years or so I think it is a given that they are only looking for skill in Java and most likely specifically Hibernate + Spring + Maven or Java EE with all the trimmings. These frameworks take years to learn and genuinely are not fungible skills. Moreover, this type of programming damages your brain making you incapable of writing small efficient programs that can, for instance, trade stocks quickly.

Á Propos of my previous discussion on the stability and maturity of Python; it seems to me that there is an emphasis on Time to Market in the brokerage business rather than maintainability. This is the same pressure I saw in the advertising industry where web sites are frequently made live for a period of a few hours and never used again. My goal here is to write Functional Programs. To a considerable extent these Programming Paradigms are fads that come and go. Industry has latched on to Object Orientation because it allows them to write spaghetti code in a maintainable way. Functional programming by it's very nature produces clean compartmentalized code without excessive loops or branches. I write in R because it is stable and mature and above all because it is a rapid development environment. Functional Programming is a desirable, marketable life skill. I leave you with this excerpt from the Wikipedia page on Programming paradigms:

Parallel Computing


Main article: Parallel computing

Carnegie-Mellon University Professor Robert Harper in March 2011 wrote: "This semester Dan Licata and I are co-teaching a new course on functional programming for first-year prospective CS majors... Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum. A proposed new course on object-oriented design methodology will be offered at the sophomore level for those students who wish to study this topic.


Posted by StarFighter | Permanent link