Absolutely agree. I just got into 3DS development last year and it's been such an exciting development experience. The open-source tools are excellent (even supporting remote debugging!), and the system hits that sweet spot between being powerful enough to build interesting things and taking real work to make those things fast.
Over the last year or so I've been squeezing individual fps's of performance out of the PSX emulator and it's been some of the most fun hobby programming I've done in a long time.
Plus you can write for a platform with a 3D screen! How cool is that?
devkitpro (https://devkitpro.org/) is the toolchain and base libraries, and sets up a package manager for downloading others.
For the basic stuff you can use the usual C libraries. I picked up a lot by reading and tweaking the examples, which are installed along with the toolchain: https://github.com/devkitPro/3ds-examples
libctru, installed with devkitpro (https://libctru.devkitpro.org/) is where a lot of the platform-specific APIs live. There are also some higher-level libraries built on top of it
A good understanding of ARM will take you a long way. A lot of what documentation there is (especially on 3dbrew.org) assumes you understand the terms and general architecture of an older ARM platform. This book https://www.brucesmith.info/arm-a32-assembly-language/ was great for building enough understanding that I could understand most of the official reference manuals. From those, I found the ARMv7 reference manual and the ARM11 MPCore Technical Reference Manual to be the most useful, and I refer back to the ARM instruction set reference card a lot.
Besides that, it's reading and modifying the source of other projects, and trying things out. If you look at homebrew apps like ctrQuake (https://github.com/masterfeizz/ctrQuake), you'll notice there's usually not a lot of platform-specific code -- most is just standard C / C++.
Hope that helps. Just like anything, it's knowing enough to get started (a toolchain, some C, and some examples) and using your questions and ideas to draw you into the next thing to learn.
Over the last year or so I've been squeezing individual fps's of performance out of the PSX emulator and it's been some of the most fun hobby programming I've done in a long time.
Plus you can write for a platform with a 3D screen! How cool is that?