So you want to talk to NetworkManager?

NetworkManager provides a detailed and capable D-Bus interface on the system bus. You can use this interface to query NetworkManager about the overall state of the network and details of network devices like current IP addresses or DHCP options, and to activate and deactivate network connections. A network connection is a bundle of settings that describe a connection to a particular computer network, like a specific mobile broadband provider or a single wifi network. These connections are provided by other D-Bus services, called "settings services", which also provide a D-Bus interface and allow you to query and change stored network connections and preferences. The NetworkManager D-Bus API specification provides a detailed description of each object and interface that NetworkManager provides.

Or you want to hack on NetworkManager?

First, you should probably consider joining the mailing list as there is a lot of useful information there from other NM hackers: http://mail.gnome.org/mailman/listinfo/networkmanager-list.

Second, read the Design Goals of NetworkManager to get an idea of why things work the way they do.

To checkout and build the latest, hottest sources of the core NetworkManager daemon from git:
git clone git://anongit.freedesktop.org/NetworkManager/NetworkManager.git
cd NetworkManager
./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install

The development branch of NetworkManager uses ModemManager to control 3G modems now, so you'll also want to:
git clone git://anongit.freedesktop.org/ModemManager/ModemManager.git
cd ModemManager
./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install

And if you want to play with the applet, you need network-manager-applet, too, this time from Gnome git:
git clone git://git.gnome.org/network-manager-applet
cd network-manager-applet
./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install

There are also VPN service plugins for vpnc, openvpn, and pptp. Each has its own git module, so replace 'vpnc' as appropriate in the following example:
git://git.gnome.org/network-manager-vpnc
cd network-manager-vpnc
./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install

Actually hacking on it

If you make changes to NetworkManager, create the patch using a Unified diff format (ie, diff -u) and mail the patch to the NetworkManager list. Others on the list may make suggestions, please take these into consideration. Eventually, your patch can be checked into NetworkManager SVN.

Stuff to work on

The most up-to-date list of work items is kept at the live.gnome.org Wiki here.