Ranked in these QuestionsQuestion Ranking
Pro Runs asynchronously
Warns of syntax errors as-you-type - you don't have to wait until you save your code or manually invoke syntax-checking (can be disabled).
Pro Lints as you type
Doesn't wait for you to save before linting, it lints the buffer, not the file.
Pro Add fixers (prettier, standard...)
Pro Works with Language Server Protocol
Pro Works with minimal configuration "out-of-the-box"
ALE can be used almost immediately after installation. Some linters that need fiddling before they're usable with Neomake or Syntastic will "just work" on ALE.
Pro Being actively developed
Ale has a large, active community that keeps integration with language backends up to date
Con Mixes responsibilities (LSP support)
While main purpose of ALE is to run linters and fixers it also supports some (not all) of the LSP calls. The developer likes this functionality but it's a somewhat popular opinion ALE could relay on a different project for this and therefore delegate some of the maintenance burden.