The question comes up every so often but OK.
There are many things that can be used to make homebrew on the DS.
First up stuff like lua, basic and various other interpreted languages (no real java I am afraid)
http://microlua.risike.com/
You can make some nice stuff but the DS (I saw some graphic novels and similar things) is a bit too limited for interpreted languages to reach anything like they are with the PC.
Second up is more low level languages like ASM and C (C++ is not used all that often as it is rather cumbersome for the sharply limited resources of the DS, it can be done).
Devkitpro (more specifically the devkitarm toolchain) is the choice here:
http://www.devkitpro.org/
Pretty much everything can be done with this although there are other more specialist libraries floating around.
Nice guide to the basics:
http://patater.com/files/projects/manual/manual.html
Another guide:
http://www.liranuna.com/nds-2d-tuts/
and another for the GBA (GBA and DS hardware is similar enough to be worth knowing about both) but one I really rate:
http://www.coranac.com/tonc/text/toc.htm
You may also want a hardware guide for which we have:
http://nocash.emubase.de/gbatek.htm
On top of this there is palib which is frowned upon by some as it is considered clunky and somewhat slow and indeed it may be compared to hand optimised stuff. It has not stopped a large number of amazing apps being made using it though.
http://forum.palib.info/
Much like all other areas of coding I suggest pulling apart the work of someone else too. The vast majority of applications are open source too.
I suppose the main thing that has to be said it do not go into it expecting to make the next moonshell, dsorganize or PuzzleManiak or even something that you might see in the rom release lists (I am probably biased but some homebrew I rate above lots of commercial releases) as it will not happen as a first project. It know it should go without saying but we have still seen a few people do this.