Any Good Book/Course Recommendations Please for C#?

Are you a reader or listener? (I.e. preferred learning medium?)

One thing that's quite practical these days is there's a lot of sites enabling you to simple type code into a web page without even installing Visual Studio. E.g. https://dotnetfiddle.net/
Here's another one, which I think offers a bit more extensive choice of languages and it kinda resembles VisualStudio.
 
You might ask what is a better representation of language popularity? Job searches. This would put the most popular languages as Java, C#, Javascript, Python, C++ in no particular order, and everything else would be a very, very, very distant competitor.
Definitely Python and JS. Golang seems to be gaining popularity as well.
 
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#.
 
Last edited:
TIOBE is universally a laughing stock among actual programmers. They use Google searches, which disproportionately benefit high ranking websites like stack overflow that are flooded with Javascript/etc programmers. It is not an indicator of language popularity except in terms of absolute number of Google searches. If you created a brand new language that caught headlines despite being a heaping pile of garbage you'd rank very, very high on TIOBE. You might ask what is a better representation of language popularity? Job searches. This would put the most popular languages as Java, C#, Javascript, Python, C++ in no particular order, and everything else would be a very, very, very distant competitor.

F# is bad for another reason - if you have no idea how to program you won't understand how to program in a functional programming language. This is hotly contested issue in language design circles (if you start with functional programming you will by definition understand it - a nasty catch 22), but the algebraic nature of functional programming requires mental refinement a novice programmer won't have. The struggle to value ratio is very, very high even among professionals.

I love F# because its OCaml on .NET. I wouldn't recommend it to a new programmer at all. Having tutored programmers, explaining something as trivial as a flatmap in simple terms is relatively difficult, and having them understand the utility is even more difficult. Whereas there is significant value in functional programming, the value falls on deaf ears to novice programmers. This obviously isn't helped by the absolutely obnoxious programming circles that think not understanding category theory, type theory, and monads makes you a troglodyte.

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'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 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,

I've been a professional futures trader for 12 years. I am looking to learn coding for obvious trading/career benefits.

My plan so far is learn c# basics via traditional learning methods, but want to get working on trading systems asap. I think the only way i'm going to learn properly is by playing around with code in a trading environment as it is not exactly interesting learning abstract concepts with no obvious application to trading. After 6 hours of getting an "if statement" to tell you how old you are i still feel a million miles from ever being able to build a trading system.

I picked c# as NinjaTrader runs this and is a flexible, inexpensive way to test out my c# skills.

However, im struggling finding a resource to bridge the gap between books on learning C# fundamentals and something that applies it to trading.

Are there any good books or courses that take a beginner in c# and blend it with the trading world? I suspect probably not as i've searched a fair bit. But this would be hugely helpful.

Thanks

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.
 
Back
Top