One of the few benefits of working for myself is that I don't need to worry about compatibility with legacy systems. I am free to use whatever open source tools to get the job done well. The downside to this is that there are so many technologies out there that it's hard to choose the right ones for the job. To give you a sense of what I meant, here are some of the topics that I have either tried or seriously considered in the past year.
- Programming languages: Java, Python, R, C#, F#, Scala, Clojure, Haskell.
- Data storage: HDF5, CSV, Binary, MySQL, PostgreSQL, MongoDB, MonetDB, Redis, HBase.
- Cloud server: Amazon EC2, Microsoft Azure, [Google App Engine], Rackspace Cloud, plain old VPSs.
Programming language choices are important because they sit at the bottom of a technology stack. Most of the work that I do are built on using them. For a long while, I settled on using a combination of Java, Python, and R. I prototype small ideas in Python. Implement production code in Java. And perform analysis in R. I discussed why use the right tool for the right task a year ago. By the end of my previous project, I am finding that the popular development triplet of Java, Python, and R, is not ideal for a solo-operation. Seeing that I have more time on my hands because I am using QTD to trade for me now, I am taking a break this summer to expand my knowledge and learn new technologies. Some of the technologies that I am experimenting with includes:
- an in-memory data store for instantaneous and persistent tick data
- parallel programming for concurrent processing with no locks
- mathematically intuitive algorithm implementations using high order functions
Don't mind me as I help myself in this open buffet of technologies.