Computer programming is a craft with its own techniques, terminology, best practices, and opportunities for craftsmanship and self-expression. If you will be doing a lot of it, it is worth investing time and energy into starting with a solid foundation, and avoid taking shortcuts which lead to habits. See: Teach Yourself Programming in Ten Years.
The following is a suggested course of self-study. It is intended to be taken in order since each topic builds on the earlier ones. This is essentially the curriculum for the first year of a computer science bachelors degree, although this list of resources is oriented toward free texts and self-study rather than traditional textbooks and classes.
- Introduction to computer programming, data representation, and computational thinking. Programming in a high level, functional style. This is more about establishing patterns of thought and vocabulary, which are timeless and apply equally well to all programming languages, than it is learning a specific programming language (e.g. Java) or environment (e.g. Android).
- Suggested text: How to Design Programs, taught in Scheme
- Alternatives: Think Python: How to Think Like a Computer Scientist
- This is a website that layouts a curriculum useful to those who are just getting started in programming and have no sense on where to start: codeschool.org (now Pluralsight)
- Object-oriented design and systems programming. Along the way you can learn a marketable OOP language such as C#, Java, or C++, or Objective C.
- Discrete math.
- Data structures.
After this you will have a solid foundation, from which you should be able to teach yourself any future programming language, environment, or more advanced subject. At this point you are ready to learn whatever hot language and environment you want to work in; iOS apps, Java web apps, C++ games, or whatever the case may be.