This guide is all about learning to program, in particular using the F# programming language. We'll discuss this in more detail soon but for now let's talk about what the aims of this guide are and who it is for.
The main aim is to take the reader from zero knowledge of computer programming to being able to confidently solve simple programming problems, like the easier bronze tier problems on /r/DailyProgrammer.
The secondary aim of this guide is to get the reader to that point using only those features of F# which are considered to be best practice and avoiding the features of F# which are considered to be less idiomatic. This also involves ignoring many concepts which more traditional programming languages rely upon.
The advantage of this approach is that the reader will be simply unaware of all the ways in which they might be able to shoot themselves in the foot when writing F# code. The hope is that this will make the reader a better programmer faster, even if this does make learning to code initially a little harder.
For anyone simply trying to learn to program, there are much more accessible, well written, interactive and all round useful guides online which focus on programming languages that are much easier to learn in the beginning - allowing the reader to focus on the programming concepts rather than the language features.
This guide, by it's very nature, focuses heavily on language features rather than programming concepts - although programming concepts are introduced throughout. The hope is that the examples and exercises will be enough to introduce these concepts, and the later chapters (once the necessary syntax and language features have been introduced) do focus on concepts which will be required to solve general programming problems.
If you are curious about programming and the F# language, this guide is for you.
The chapters in this guide have been written in the order in which they are intended to be read. That being said, if a particular chapter is proving troublesome, skipping ahead is encouraged. Some of the concepts introduced in this guide take some time to understand. However, these concepts are used regularly later in the guide and the continued exposure to the concepts and techniques may be all that is required to gain the necessary understanding to use those techniques yourself.
Make sure to run the code snippets in this guide for yourself. The outputs are often shown here but running the code yourself will help to solidify your understanding. Doing this also allows you to change the code snippets and experiment with them. This is fully encouraged.