It’s easy to understand why men named Edward are called Ed or Lewis called Lou (or Lew) and maybe even James called Jim (there are a lot more) but why does William=Bill and Robert=Bob?
I think it is an Irish thing,
John – Jack
I think it goes back to when everyone was called a specific name, for example, if a Father was named William, then his son was named William, but they called him "Bill" to keep them apart,