Note: I will try to keep the articles conceptual, language agnostic* and unbiased, but as Code Quality is subjective, there will not be any clean conclusions or clear recommendations. The goal is to help a beginner (or a less experienced type-safe programmer) to have a better understanding of Types and Typesafety — The concepts noted here would make sense only for statically typed languages (Scala, Haskell, Rust), which take help of a compiler to catch errors as early as possible (At compile time). I’d recommend knowing the basic difference between statically typed and dynamic typed before reading any further.