Writing open source is sometimes a passion rather that a job. If you could make a living from your passion, that would be a perfect job! Starting with components, plugins and modules is a good way for building your freedom, working on your skills and doing what you love...
1. Why do it?
Freedom, learn and grow.
Writing components will slowly but consistently guide you to be free to work in any location at the time you want, for long as you want. On this life journey you will learn a lot and grow as an individual, as well as grow into a market full of opportunities.
You are investing in a growing market. Enterprise Content Management Market will be worth $12.32 billion by 2019 according to MarketsandMarkets™ . It is hard to say how much comes from open-source because the software is free and its license value is not included in above figures but the good news is that most of the revenues comes from services and not from intellectual property.
Consider that a third of the world wide web is built on Wordpress, Joomla and Drupal, all written in PHP sharing similar principles and design patterns (statistics here from w3techs). That means you do not have to choose which one to embrace because what you develop for one can be adapted for the other.
Wordpress has the largest piece of the donut with 60% of the CMS sites while Joomla and Drupal together represent 11%. Other CMS systems are just "others" with no software or platform getting more than 2% of the market. These figures have been stable for a while, meaning your investment is not in danger.
So, if you decide to develop components for these three open-source platforms you know you have a prominent future.
2. Where to start?
For learning purposes, start with simple components, even if similar components exist, start simple. Joomla offers reasonable documentation, you may need additional Google search and lots of answers will come from stackoverflow.com, you can trust that source.
Joomla offers a good developers tutorial at: https://docs.joomla.org/JDOC:Developer_Tutorials_Project.
3. Learning curve
My recommendation is to follow Joomla coding standards and MVC architecture (some can argue that it is not an architecture, but that's "off-topic" for this article purposes). Just adopt it and you will find it's value when you have to maintain, extend and upgrade your component.
It is not just programming PHP! Joomla has classes and methods you must learn. It is a long process but you can evolve gradually.
3. Short cut to code
Download and use other components, extensions and plugins, read the code and learn how other people are doing. After you develop something simple, then you are ready for creativity, innovation and more complex extensions.
Some of the free extensions are hosted at Github, join the development group, fork the project and share experiences.
4. Using FOF
The drawback is the long learning curve due to limited documentation but it is worth the effort, because it is a well structured code to learn from. With FOF you can skip the time required for writing repetitive code for Model, View and Controller, and focus your creativity on writing your component's functionality.
The indirect benefit is stability and security. Because FOF is used in other Akeeba paid extensions, FOF code is frequently updated and secure.
5. Using Component Creator
Component Creator is probably the most popular service to automate coding for Joomla extensions. The author claims to have over 120 thousands extensions written with Component Creators, true or not, it is a good option and popular service! If your extension has only one table you can use Component Creator for free. It is indeed a good starting point, if you need several tables you must pay for using the code generator.
As far as you fill out the questions without errors, the service generates code that is ready to be published. Very easy to use but not so easy to maintain, as the generated code is not 100% compliant to coding standards, you will have to do some reverse engineering to understand the Model-View-Controller generated. It is not hard: the code is well structured, is commented and uses a lot of the Joomla default classes and methods.
The drawback is the total absence of documentation and, although support is very good, it is only for paid subscribers.
Test as much as you can before submitting a component/extension for distribution, the last thing you want is users complaining about your lovely baby-code.
The component must comply with Joomla rules before submission (here). There is a tool for checking your component before submission (JED Checker), but lots of false negatives will arise so, do not be afraid to submit if not 100% Ok from the tool.
Make it free, as possible, to increase usage before you charge. Because it is open-source, revenues may come from support and update subscription rather than "selling" de component. Check how popular extensions are delivered and copy the monetization models.