Getting started with QGIS plugin development?
This question has been converted to Community Wiki and wiki locked because it is an example of a question that seeks a list of answers and appears to be popular enough to protect it from closure. It should be treated as a special case and should not be viewed as the type of question that is encouraged on this, or any Stack Exchange site, but if you wish to contribute more content to it then feel free to do so by editing this answer.
C++ plugins are less and less common these days. Most likely because they are more difficult to develop. Most documentation effort has been put into Python plugins. C++ still has it's place for performance critical things and functionality that is supposed to be merged into QGIS core (like new renderers for example).
There is a Plugin builder plugin which helps to create the basic plugin structure for you.
The PyQGIS Cookbook offers a lot of code snippets for Python plugins
The book PyQGIS Programmer's Guide is another good resource.
If you get stuck, the QGIS developer mailing list is there to help you.
Basically you need to know 3 things:
- Python : http://www.python.org/
- PyQT (to make the user interface, if you want one) : http://www.riverbankcomputing.co.uk/software/pyqt/intro
- Qgis API : http://doc.qgis.org/head/
They are all very well documented, to get started I recommend you to browse through the modules of the QGIS API and play with the python console doing basic things like accessing the features of a vector layer.
Later, after you get the feel of the api, you can ask more specific questions here on GIS SE e.g. Using QGIS API and Python, to return latitude and longitude of point?