The web is full of free resources that can turn you into a programmer and if you've always wanted to learn how to build software yourself or perhaps write an occasional script but had no clue where to start than this guide is for you!
If you're interested in becoming a programmer, you can get off to a great start using tons of free web-based tutorials and resources. Since the early days of the internet programmer communities have been using it to discuss software development techniques, publish tutorials, and share code samples for others to learn from and use online.
Choosing a Language
A common issue for beginners is getting hung up on trying to figure out which programming language is best to learn first. There are a lot of opinions out there, but there's no one "best" language. Here's the thing: In the end, language doesn't really matter. Understanding data and control structures and design patterns is what matters. Every programming language, even basic scripting languages will have elements that will make other languages easier to understand.
Many programmers never actually take accredited academic courses and are self-taught in every language throughout their careers. This is achieved by reusing concepts already known and referring to documentation and books to learn its syntax. Therefore, instead of getting stuck on what language to learn first simply, pick the kind of development you want to do, and just get started using the one that comes the easiest to you.
There are several different kinds of software development you can do for various platforms; web development, desktop development, mobile device development, and command line.
Desktop Scripting
The easiest way to try your hand at programming for your Windows or Mac desktop is to start with a scripting or macro program like AutoHotkey (for Windows) or Automator (for Mac). Sure, now advanced coders may disagree that AutoHotkey or AppleScript are not "real" programming which is technically true as these types of tools just do high-level scripting. However, for those new to programming who just want to get their hands dirty, automating actions on their desktop, using these free tools provide essential fundamentals towards "real" programming later on. The lines of when an application comprises of scripting and when it is considered to be programming is often blurred, keep this in mind. Once your code is compiled it is considered to be "real" programming. Most end-users of an application usually don't know and shouldn't care as long as it is designed well and functions in a dynamic and robust way in order to serve its intended purpose.
Web Development
If being bound to specific programming languages and with the look and feel of a particular operating system is not your desire, consider developing your application for the browser instead and distribute it to a wider audience, as a web app.
HTML and CSS: The first thing you need to know to build any web site is Hyper Text Markup Language (HTML) the page markup that makes up web pages and Cascading Style Sheet (CSS) is the style information that controls design appearance of the markup. HTML and CSS are scripting languages that just contain page structure and style information. However, you should be familiar with writing coding by hand before you begin building web applications, because building basic webpages is a prerequisite into developing a dynamic web app.
JavaScript: After mastering development of static web pages with HTML and CSS, learning JavaScript is the next step in programming dynamic web pages in a web browser. JavaScript is what bookmarklets, Greasemonkey user scripts, Chrome Web Apps, and Ajax are made of.
Server-side scripting: Once you're comfortable at making dynamic web pages locally in a web browser, you're probably going to want to put some dynamic server action behind it. To do this you will need to learn a server-side scripting language. For Example, to make a web-based contact form that sends an email somewhere based on what a user entered, a server-side script is required. Scripting languages like, Python, Perl, or Ruby can talk to a database on your web server as well, so if you want to make a site where users can log in and store information, that would be the proper way to go about it.
Web frameworks: Instead of reinventing the wheel for every new web development project, some programmers have come up with development frameworks that do some repetitive work of rewriting similar code over and over to build dynamic web sites. Many scripting languages offer a web-specific structure for getting common web application tasks done easier. Web development frameworks include; Ruby on Rails framework (for Ruby programmers), CakePHP (for PHP programmers), Django (for Python programmers), and jQuery (for JavaScript programmers).
Web APIs: An API (Application Programming Interface) is a programmatic way for different pieces of software to talk to one another. For example, if you want to put a dynamic map on your web site, you would use a Google Map instead of building your own custom map. The Google Maps API makes it easy to programmatically include a map in a page with JavaScript. Almost every modern web service uses an API that lets you include data and widgets from it in your application. These include; Twitter, Facebook, Google Docs, Google Maps, etc. Integrating other web apps into your web application via API's are great resources for enhancing rich web development. Every major web service API should offer thorough documentation and some quick start guide.
Command Line Scripting
If you want to write a program that takes textual or file input and outputs something useful, the command line is ideal. While the command line isn't as visually appealing as a web app or desktop application, development of quick scripts that automate processes, it is the best suited.
Several scripting languages that work on a Linux-based web server also work at the command line including: Perl, Python, and PHP. Learning one of those languages will make you conversant in both contexts. If becoming fluent in Unix is one of your programming goals, you must master shell scripting with bash. Bash is the command line scripting language of a *nix environment, and it can do everything from help you set up automated backups of your database and files to building out a full-fledged application with user interaction.
Add-ons
Modern web apps and browsers are extensible with bits of software that plugin to them and add additional features. Add-on development gains popularity as more existing developers look at existing applications and frameworks and want to add a specific feature to make it better.
With only a mastery of HTML, JavaScript, and CSS you can still do plenty in any web browser. Bookmarklets, Greasemonkey user scripts, and Stylish user styles are created with the same code that makes regular web pages, so they're worth learning even if you just want to tweak an existing site with a small snippet of code.
More advanced browser add-ons, like Firefox and Chrome extensions, let you do more. Developing Firefox and Chrome extensions requires that you're familiar in JavaScript, XML, and JSON which is markup similar to HTML, but with stricter format rules.
Many free web applications offer an extension framework as well such as WordPress and Drupal. Both of which are written in PHP, making that particular language a prerequisite for development.
Desktop Development
Learning web development first is a great Segway into obtaining the needed skills from one context in order to apply to another like desktop application development. Desktop Development programming will vary on the Operating System (OS), use of Software Development Kit (SDK) provided, and desire for cross-platform development. Using previous web development skills can also be re-utilized in distribution of your desktop application across the web to market to a larger audience.
Mobile Device App Development
Mobile applications like the ones found on smartphones and tablets are increasingly popular, and having your app listed on the iTunes App Store, Google Play Store (formerly known as the Android Market Place), Windows Marketplace, BlackBerry World, etc. However, for the majority of beginner coders, delving into mobile development can be a steep learning curve, because it requires a great deal of comfort and familiarity with advanced programming languages like Java and Objective C to develop much more than a basic "Hello World" application.
The Long Road Ahead
Great coders are often meticulous problem-solvers whom are passionate at what they do and fueled by small solitary victories of overcoming issues through trial and error. The path to a career is both a long road of endless learning and frustration but very rewarding and profitable none-the-less.