Here's another one, which I think offers a bit more extensive choice of languages and it kinda resembles VisualStudio.
Good points by all. Since OP is an independent trader, his main concern would be finding people to code in F#. Try a posting on F# you'll get smart programmers immediately who wouldn't cost much more than other programmers. Otherwise, less buggy code means for more fun coding. Edit: also he says he wants to use NinjaTrader so then he might as well stick with C#.
There is a fair amount of correlation between search activity and language popularity. I am aware TIOBE has deficits making it inadequate for precise language rankings, but it's arguably sufficient for showing the several orders of magnitude popularity difference between C# and F#. Your other points are good. I've gone through a fair number of functional languages but I exclusively use mostly imperative hybrid languages to this day for my work. I have my own reasons for that: Most of my applications are performance critical and imperative languages exposing HOW something is done goes from being a bad to a good thing. The second point is that making a small interface change in e.g. Haskell tends to lead to nasty refactoring all over, even if the resulting program is with a high probability bug free, i.e. functional programs tend to not like the sprawling code interfaces occurring in many real world applications (OK so in the Haskell example, the type system is the biggest blame). For instance, writing computer games in Haskell would be horrible. However, trading logic would map to functional code rather well and not suffer this latter issue. Since I actually don't use (non-hybrid) functional languages on a professional basis my view is surely different from that of a functional programmer though.
I’ve been enjoying the CS50 course. I’m in lecture 3 now. Doesn’t cover c# but from the little experience I’ve dabbled in programming. Most languages are quite similar. Syntax is a small part of it, methods and the way to think are what I find hard. So far the problems to solve in C have been just hard enough that I didn’t have to google the entire solution as a copy and paste hack job. The lecturers I found well done and kept my attention, buddy’s enthusiasm is great.
I go back and forth with Haskell. On one hand I'd probably never use it for anything. On the other hand, the type system is beautiful. The one professional project I worked on in Haskell was nightmare fuel, and when I have to start saying things like "a monad is a monoid in the category of endofunctors" I generally want to walk away. There are more productive uses of my time. I think the mental separator is that imperative languages read like a book, or if you prefer, like the CPU would process instructions. Line by line, one at a time. Functional programming languages are built on the idea of composability which when taken to it's limit (Haskell) is pretty abstract and gets hard to follow. I spent some time learning the lambda calculus from first principles, and while it was a useful exercise, it did not help me at all in the professional Haskell project I worked on. However, it did change the way I thought about programs in general for the better. To your point, I've had pretty good luck adapting functional programming to trading systems. F# was a real treat for me since if you treat a time series as just an array of numbers you can map over it, compose indicators, etc in a way that feels like you're writing a math formula rather than anything complicated. It's not for everyone, but it certainly was nice for me. Moreover, the immutability and atomicity inherent in functional programming makes adapting an algorithm for parallel or concurrent environments far, far easier.
Hi Tommo, I'm pretty much in the same boat as you. I'm really looking for stuff just for making c# for Ninja add-in such as indicators. Time is my big constraint. My approach will be to find a list of all existing tested methods (sections of code - used to be call subroutines and functions) and have a program that is just one method call after another only writing new code where absolutely required (I found a list a while back but I'm not sure where it is). I don't have the answer to the book/course for you but I did start looking a while back and found this series (I haven't watched it yet): Please let me know what you find (re book/course). Thanks.
Professional C# 7 and .NET Core 2.0 (2018) - Christian Nagel. In additives, you can read Sharp and Troelson.