There are a lot of options when it comes to coding Smart Contracts on Tezos. My question is simple, which of the supported languages is the best in terms of support, east of use, documentation, and being battle-tested in the real world.
First of all, Fi is no longer updated and Liquidity no longer supports Tezos, which leaves Ligo, SmartPy, Michelson and Morley. To this list, I would also add Archetype.
All of these languages can be considered production-ready and well-documented. Your choice of implementation language should rather be guided by your specific needs. What type of testing will you require? What languages are you already familiar with? Is the size of the produced Michelson of utmost importance?
Ligo has several syntaxes, depending on your taste. It is well-documented, and is aiming to achieve certified compilation, which will give higher confidence in the produced Michelson code.
SmartPy is written in the general purpose language Python, and so should be of interest if you're already familiar with that language. It also comes with a built-in test framework and several hand tools for simulating and deploying your contracts on test networks.
Morley is an embedded DSL in Haskell. Using it requires being well-versed in Haskell. Whats more, you'll also need to understand Michelson, as Morley is basically an embedding of Michelson. On the flip-side, you get the full strength of the Haskell programming language for your meta-programming: poly-morphism, typeclasses, and a wide range of testing frameworks.
Archetype is a DSL: as opposed to the above languages that are general-purpose, Archetype restricts the type of programs that can be expressed. However, the set of expressible programs covers a wide range of common use cases. And the reason for this restriction is that it makes Archetype programs easy to specify and easy to verify formally.
As the state of the above languages advance, the case for writing your program directly in Michelson is becoming harder to argue. In almost any general purpose scenario, your better of writing your contract in Ligo or SmartPy. That being said, an understanding of Michelson will make it easier for your to understand the code produced by the high-level languages, and also to understand their design choices.