What is the best starting point for becoming a programmer?

In the last couple of month several of my friends, which don’t have programming background, decided to learn how to code for being able to work as a freelancers in their spare time and to make some extra money. In their situation what would you do? Call one of your programmer friends and ask him what should you learn.

Being in the position to give an advice regarding what technology stack should they choose, I took into consideration the following points:

  1. They want to practice programming as a hobby or at most as a project based/part time job
  2. They don’t have any programming background (except some Pascal and C from high school and college)
  3. They need free and easy access to learning materials
  4. They need free developing tools
  5. For making things easier for them, it will be perfect if the chosen technology would not have to many dependencies on other technologies/frameworks for being able to create a complete application by themselves
  6. One very important aspect is the existence of the demand for projects developed with this technology What did I recommend based on the points from above? After some thinking I decided to recommend learning Android programming. I’ll try to explain myself and how I got to make this decision.

First thing I have done was to limit possibilities to web and mobile programming(native), because, I think you’ll agree with me, the biggest percent of the projects available for freelancers are from these 2 categories. If I would go with web then most probably I would have recommended PHP. I know, it is very odd to hear this from a .Net developer, but lets face it, that learning curve for PHP is one of the easiest and it has free developing tools, you can develop on different platforms, meanwhile it has evolve very much and most important the biggest share of the web projects on the market that can be accessed by a freelancer is for PHP. But regarding web development we have a problem with point 5, because for being a complete web developer you need at least to know: backend language(in our case is PHP), HTML, JavaScript, CSS, HTTP principles, some JavaScript frameworks, a database engine, minimum web server management. Believe me if you give to a beginner this list he will be overwhelmed and most probably he will give up before event started.

After I excluded web development the only viable option remained mobile development. From mobile platforms I chose Android because it has the biggest share of the market, free tools and support development on different platforms. For learning Android a beginner need some Java basics and Android framework and only with this 2 he can build a mobile application, at least for the beginning.

I hope that my reasoning was a good one, but if you don’t think so please let me know and maybe it would not be to late for changing my recommendation made to my friends.