i have used "Writing GNU Emacs Extensions" available here: https://www.oreilly.com/library/view/writing-gnu-emacs/97814... from a long time past for elisp programming. mentioning it here in the hope that it is is useful to others as well...
Since that book is over 20 years old, is it still relevant and useful?
Emacs takes backwards compatibility seriously. Not kernel-level seriously, but seriously.
Moreover, a book written 20 years ago was still written more than 20 years after initial Emacs release. By then, a lot of best practices were already discovered and they remain common in Elisp code to this day.
There was a lot of development in that time and many things became easier to do, but the basics of writing Elisp programs didn't change.
IMO the book is especially worth a read if you want to change your perspective: it does a really good job at showing that Emacs is, in essence, a runtime environment and a development platform akin to web browsers, with a huge stdlib of libraries and applications, and focused on mostly-text display. Next time you find yourself reaching for ncurses, stop and go for Elisp instead. You'll get the (optional) GUI and sane defaults for free, along with rich text editing functionality where needed.