At the moment if someone wants to write an application for Ubuntu, he has to search the web to know how to do common things. For example: how do I empty the Trash? How do I add my application to the notify area? How do I create a Control Panel window setting? Ecc...
If you're good enough to search or if you know someone who can tell you how to do these things it's pretty easy. But Ubuntu development should be more easy for everyone.
I've a concrete project in my mind that has a very good API, documentation ecc.... and final developers don't need to know if things change or how they're implemented, they just have to write code and follow the API: the example is Qt libraries.
What we need
- a stable API with bindings for C, C++, Python ecc...
- a solid and clear documentation
- lot of examples and "getting started with..."
Documentation - improved documentation: nothing original here in my mind. My idea is simply to have something very similar to Qt documentation. Finding a library must be easy and fast. All libraries must be documented. Actual documentation is not complete. Take a look, for example, at this one http://developer.ubuntu.com/api/ubuntu-11.10/cplusplus/dbusmenu-qt/index.html
- Stable API - we must define a stable API for desktop libraries and keep it stable. In this case I only have few examples that come in my mind but I hope it will clarify the problem. When I needed to read a setting I didn't know if it was better to use gsettings, dconf ecc.... Changing the implementation from a release to another can be ok, but we need to keep the same API call: getSettingValue(...) method (it's just an example) must remain the same for years, however you decide to implement the underline API. Don't think only to amatorial developers, think also to professional companies. If you've investigated a little, you'll know that one of the reasons why they don't develop for Linux is why the libraries and API often changes from a distribution to another and from a release of a distribution to another.
- Code examples - it's very difficoult to find code examples of Ubuntu libraries, in particular Unity libraries. Many times I had to modify something, I needed to ask to some Unity developer or trying to find the code by myself. This doesn't really speed up the Ubuntu development. There should be clear and easy tounderstand examples of every library used. How do I use the notify bar? How do I interact with Unity Launcher? How do I access the Unity libraries. Once again, developer.ubuntu.com has some hints and examples, but the documentation should be more complete.
- Bindings - We must be sure, when we release a library or a new API that at least we cover the main languages available. C, C++/Qt, Python should have API bindings available.
There is already a lot of this stuff around the web: it's spread in the wiki, in some pdf, in some personal blogs ecc... we need to unify all of this stuff and create a proper Ubuntu Development Guide.