This is the first destination from our Roadmap where I want to discuss my technologies screening. This was, and still is an exciting journey and I want to do it in several parts. Feel free to comment this blog or send me a mail with suggestions and I would come over it into the next part.
The good thing about my project was that I has to solve a domain specific problem so I don’t need to care about other soft factors a professional developer maybe need to care about. I had a white paper with an open mind but was limited by my skills only.
In 2010 when I was deciding to start my own development I was able bring around 5 years Matlab, Simulink from my day job and fundamentals in C and Fortran 90 into the project. Unfortunately this was not applicable directly cause each technology was leaking in one or more mayor demand.
I started to room around and tried to find out what are the industry standards. My approach was to learn from the pro’s, how are they doing it, and to break it down to my scale and for my needs. But this was not really successful cause the pro’s use a special mix of technologies to get the best of each for their special demand.
From my journey around financial engineering tools I started to define all these the demands:
- Service Oriented Back-End with high performance Database and Message-Processing
- versatile Front-End with easy and fast to develop User Interface
For Back-End technologies mostly they use C, C++ or Java sometimes in combination with Erlang and others. The Front-End and all not that nano second sensitive parts, are mostly in Java/Scala, .Net, Python. All this together with a special mixed sauce of different Database and Messaging technologies is what you find if you look at the institutional guy’s.
Not to mention that I don’t want to learn coding in all that technologies, but also maintaining the code would be a hassle with all that different techs. It would took years in learning all that stuff without realizing my trading ideas. The need to have something helping me to realize my ideas, was and is the motivation for doing all this.
So after I listed all the animals from the tech-zoo with their attributes, I was trying to find the minimal number of animals for doing the job.
- C and Fortran is not a fun to deal with if you are not really into it. Also the design of user interfaces is a painful and slow process.
- Matlab would match with my development speed demand, but is not the tool to choose if you want to development reliable and maintainable Software. I really like Matlab for prototyping and first look over huge data arrays. Simulink is nice for prototyping and developing control based models and deploy them on realtime machines or micro controllers.
- To me it was looking like Python had similar downsides as Matlab.
At least there were Java and .Net in my Zoo.
In Java there are some great open source and commercial end to end trading platforms available. Also the large community is awesome. So I started to play with different IDE’s like Eclipse and Netbeans to have a first look over it. Soon I realized that it will be work to learn Java. I was forced to step back and need to learn the basics first. The largest problem I was confronted with was the Object Oriented Paradigm.
After endless tutorials and examples sessions in Java and C#, I was able to fall into the way of modern languages and developing methodologies. A side effect was I came in deeper into Linux, Windows, all the mayor IDE’s for Java and C#.
Why I decided to use C# as the language of my choice.
During traveling around the Java and .Net world, I came to the point that the .Net tools especially Visual Studio where simple and more idiot prove than their Java analogies. I had never used a better IDE than VS and each new version becomes better. With VS I was able to reduce my tool chain so drastically because except Java it fits for all languages I would possibly need in future (C, C++, Python, …). And its free 😉
This was one of the main reason to stick with C# and .Net, and at this time it was foreseeable some downsides become solved step by step in future (platform independent, open source, …).
Also the performance is similar or better than e.g. “out of the box JVM”. During my tech shoot out, I felt the performance discussions often getting quite religious. Mostly the people do some loop with function calls and compare the time for processing. This is OK if you want to find out the best performance for special atomic use cases, but a complex Back-End or Front-End application with many entities is a different story!
During my next post I want to go deeper into tool chain topic. I will introduce what I has chosen and explain why. If you have suggestions or comments, don’t hesitate to contact me at firstname.lastname@example.org