The .m suffix is the old way of saving package files, and is used only for backwards compatibility. Use .wl for new stuff.
If you only write use-once code, then there is no need for making packages. I suppose that the majority of Mathematica users use the language as an interactive calculator, and so would never need to build a package. However, if you write code that will be used again, then making a package has advantages. It is the closest thing in Wolfram Language to source code files, such as .c or .swift files.
If you open a .wl and a .nb file in a text editor, you will see another difference. The .nb file has a lot of information on creation dates, modifications, etc. that are useful for a notebook file, but not so much for computer source code. For this reason, source management systems, such as GitHub, are much more effective with .wl files.
Maeder's book is older than Wellin's book, and his emphasis is on package development, as opposed to Wellin's book, which emphasizes programming using Wolfram Language. Maeder's book assumes that you already know much of what Wellin is presenting, although a lot of stuff in the newer book did not exist in versions 1 or 2 of Mathematica which is the time frame of the older books. There is still a lot of useful stuff in Maeder's books, but you need to "translate" it into the world of Mathematica 11 or 12.
In my own work, I do explorations using notebooks. I typically produce what are now called computational notebooks using just .nb files. However, when a project warrants it, I will make a package so that 1) the code is better organized, and 2) it can be reused in other projects.
You can do almost everything you need to do to make packages from within Mathematica or Wolfram|One itself, except preparation of fancy documentation like you see int he documentation center. For that you will need Wolfram Workbench, which adds an extra level of complexity into the process.
My suggestion is that you use the File menu to start a package project. It makes things easier to manage. You can convert a .nb file to a .wl file, but you need to know what you are doing. In my case, when I am ready to make a package with some code I have created in a notebook (.nb), I start a new package file and cut and paste the code.
Hope this helps.