First, find a problem that you personally encounter that could be solved, and solve it. Don’t worry about marketing, profits, companies, any of that; just do it for yourself. Learn what works, what doesn’t work, and get it done. Then do it again with a more complicated problem. Rinse and repeat, many times over.
Then from there, you’ll know a lot of the ropes, and you can either release your own software, or join a company that’s looking for someone with your talents — or both.