So you want to learn to program then, this is good as it is a great skill to have and we are probably still a few years out from human language style programming.
As far as most around here are concerned there are going to be three types of programming
1) The hardcore/traditional knowing what is happening at the CPU level and everything up from there. A lot of games related programming will fall under this, certainly if you want to hack games you would probably want to have an appreciation for it.
2) "I just need to make this document/picture/small database turn into this format so another program can use it".
3) I want to do websites. Technically you can do a lot of 2) with many website programming languages/methods as well.
All three are valid things to be doing, all three make people lots of money though it is seldom easy money.
For the most part around here we will suggest you go in for 2) as you can do most things with it, 1) is really only necessary when you need lots of speed and for the most part 3) amounts to learn some PHP, HTML, CSS and just install wordpress or some script that does what you want (there probably is one already).
Still this is not being very helpful so onto the meat of the subject.
Enough of the setup, get to the links
Programming is done in so called programming languages, there are hundreds of them but this list narrows down considerably if you only include the ones in common use (and you probably should). It is often possible to mix languages within a program, typically this is done when something needs to be faster or when a new programmer takes over and is more comfortable in another language.
There are endless distinctions between different languages, many of which are of limited use, but the main one would probably be high level and low level.
High level languages take away some of the fiddly concepts associated with lower level languages, provide you a lot of premade means to do lots of different/common tasks and will generally be able to be ported between different operating systems far more easily than others. They come at the cost of being slower than some lower level languages (not so much of a problem in the modern world), maybe not integrating as tightly with the operating system and not teaching people about the lower level aspects of their code. However they can also come with the benefits of being more secure owing to said low level concepts being easy to mess up and they do work so people use them.
If you are learning to program we highly suggest this playlist
https://www.youtube.com/playlist?list=PL6B940F08B9773B9F
and this site
http://programming-motherfucker.com/become.html
More generally the languages of choice are
1) C and C++
C is very old but used extensively in operating systems, video encoder/filter programming, driver development and other high performance tasks. It is not suggested here as a language to learn with but if you plan to do high end coding, such as those fields mentioned in the previous sentence, you might wish to go back and learn it afterwards.
C++ is newer, though still old compared to a lot of other things on this list, and has many uses within those three as well.
Above this looms assembly language. This is often a slightly more readable version of what the processor does (which is a lot of quite simple instructions that make up a complex task), very few code in it any more and nobody really codes full programs in it (mainly small sections that have to run fast). Naturally different processors and even different operating systems have different ways of setting about assembly programming.
Related to this would be objective C. Objective C was pioneered by Apple and is what they suggest for coding programs to run on OSX, and is was the main language used (other than web programming) for ios (ipods/ipads/iphones and similar things) though these days there is also swift.
2) Python, C# (see also .net), Java, Ruby, Perl and Lua (used for a lot of emulators)
http://programming-motherfucker.com/become.html has links for all of these.
C# technically works outside Windows but most consider it more for Windows based programming, see mono if you want C# on other platforms. All the others are largely platform agnostic and if you code it right then the software written in them will run happily on other operating systems.
Java is very popular among business software developers, possibly because it got in there first and caught the market (business software has a very long lifetime). Owing to some security issues it has fallen out of favour among some people, however it is very popular and can get things done.
Ruby is more commonly seen in web development (as Ruby on Rails) but is made so it works well as a normal programming language.
Python is very popular as a scripting language and is often considered the glue that holds modern computing together. If you have to get two things to talk to each other it is probably written in python.
Perl once rivalled python in popularity but python grew faster. It works in kind of similar ways to python (though it has differences in others). If you have text that needs editing then this is what a lot of people look at.
Lua is much like Python and Perl, however it has found many fans among game and emulator authors for plugins and scripts.
3) HTML, CSS, PHP and javascript.
HTML and CSS are not programming languages, however they are what web browsers render. At one time they were separate entities but today they are basically indivisible and we would shy away from anybody that wants to consider them separately.
Javascript is a programming language and generally runs on the user's computer.
Actual web programming back on server can be done by any number of languages (though many seen in 2) are seen again here) but the big two are
PHP
Not liked by some it is still a popular programming language for web use, also one of the easier languages to jump in and start getting stuff done with.
ASP.NET
This is Microsoft's language of choice for their servers, fairly closely related to C#/.net. As you have to pay for Microsoft operating systems to run this on servers where Linux based ones may come for free it is not quite as common in many circles, especially not free and/or open source software, but it can be worth looking at, especially if you otherwise have Microsoft servers and want your website to talk to those.
You may also want a database for your server, or indeed the program you are using will use one. There are many database formats but the main three are
MySQL (and other SQL related languages), PostgreSQL and Oracle.
Oracle tends to be used by companies needing high end performance and you are not likely to encounter it in the free software world. MySQL is mostly free and very popular, however it has some odd licensing parts so there is something of a push to go to another type of database. If you learn general SQL then most other vendor specific extensions will be like learning a slightly different dialect of a human langauge.
There is also XML to consider both as part of database/info rendering and general web programming. XML is a way of writing data so other things can look at it (parse it to use programming terminology). Going further still you might like to read up on .htaccess
You can run normal programs on web servers, and have the web server program run said CGI programs on command. The most common method for this would be "CGI" and "fastCGI". Equally many Linux/BSD based servers will have so called "cron jobs" which run at set periods (including once a minute) to do certain tasks, other servers also have similar functionality.
What to type my program in?
Programming languages are usually text based so any text editor that spits out plain text can do it. Many will choose to have more programming related editors and even full programming suites commonly referred to as IDE (integrated development environments).
Many IDEs are geared towards a given language and you can look at them once you have found a language you want to learn. Some resist using and avoid suggesting, or even suggest avoiding, IDEs as they can encourage lesser code by virtue of helping the programmer out. There is a certain logic to this but not one we can really get behind.
If you just want a basic text editor for windows with a few programming extras most will say you can not really go wrong with notepad++
http://notepad-plus-plus.org/
On linux much of the notepad++ functionality is available in "Geany".
If you want a basic kind of IDE for C and C++ then code::blocks
http://www.codeblocks.org/
Eclipse is one of the more noted Java IDEs
https://www.eclipse.org/
Microsoft have their own coding tools, ones that are highly respected, in the form of visual studio.
http://msdn.microsoft.com/en-us/vstudio/aa718325.aspx
Apple tend to use Xcode
https://developer.apple.com/xcode/
Python is kind of its own IDE when you install it.
For HTML, CSS and javascript you may also want a debugger for your web browser. Most modern browsers will come with a basic one. For firefox the firebug addon comes highly recommended
https://getfirebug.com/
Programming for kids and academics.
The 1) 2) and 3) list is aimed more at people that need to get things done. If you want to have your child (or you are one) and you want an easy in to programming then there are options.
Programming languages aimed at kids have been around for decades (see things like Logo) but these days most would probably point people at Scratch and tell them to give that a go.
http://scratch.mit.edu/
It is quite visually driven and that seems to work well as far as teaching concepts.
The academic side of programming has a long and strange history, though there is some crossover into the real world stuff there is also much that barely makes it outside of academic fields. You are encouraged to see if there is one for your field (there is often some piece of legacy software written in a very old or not so common language, however as it does what it needs to do then it has stuck around -- business software may run for decades but academic can be even longer). Not wishing to go too far into that we shall instead stick to academic coding discussions. Much like general linguistics will compare and contrast human languages, sometimes with the aim of creating purer concepts within them, there comes academic programming languages that aim to teach, be able to be extended easily and ease certain types of development. Lofty goals but ones that are actually often achieved if you know what you are doing.
The most popular languages here are Scheme and Lisp, though things like Haskell are also popular and older languages like Pascal also still appear.
I want to make robots and electrical devices
General electronics is probably outside the scope of this thread, it is covered extensively elsewhere on the internet though.
Both of these tasks tend to want programming nowadays. There are typically three classes of device to do this with, possibly 4 depending upon how you want to view things.
FPGA
King of the hill really. They are often the fastest, they often have the most resources for the current draw/purchase price and they are the most extensible of all of them (you can quite literally remake electrical devices/chips that work the same as the originals if you have enough gates to do it). Consequently they can be an absolute pig to program and use, though modern stuff is getting to be quite nice.
Two links that form a good introduction to FPGAs
http://www.eevblog.com/2013/07/20/eevblog-496-what-is-an-fpga/
http://www.eevblog.com/2014/06/30/eevblog-635-fpgas-vs-microcontrollers/
Though there are some higher level options these days the classical programming languages used by them were VHDL and Verilog.
Some also found them useful in certain types of high performance computing -- aspects of password cracking, bitcoin mining (for a while anyway), various people in high speed stock trading... all have been seen to use FPGAs to great effect.
CPLD
Slightly less powerful than a FPGA (CPLDs are also nowhere near as good at replicating devices as FPGAs) but arguably more than a microcontroller. Their domain is being somewhat encroached upon by microcontrollers at the lower and the easier to use versions of FPGAs at the higher one. Classically though they were less powerful than FPGAs but did more than microcontrollers, however they may have also been easier to use during this period.
Microcontrollers
The two big makers/brands of these are the Microchip Technology "PIC" and Atmel "AVR", you may have even heard of them before. They are not great at doing lots of maths, not great at taking wide ranges of inputs, typically not fast enough to drive many outputs (including video) and can consume a reasonable amount of power for what they do, though this power is still well within "good runtimes on a cheap and cheerful battery" range. However if you just need to take a few inputs (digital or analogue), put out a few outputs, do some basic number crunching/logic on the pins (if these two pins have a signal then output this pattern to another pin and...) they do very well. They are also quite nice to program for.
High level microcontrollers and minicomputers.
Various groups, most popularly things like the arduino and teensy++. Arduino got in there early and most things that followed are clones (though being open source hardware that is considered quite acceptable) and adaptations of it.
It should be noted that this all kicked off a general trend so there are more easily programmable development boards available for FPGAs and such. Equally one of the big strengths of things like the arduino is that people can make "shields" for it which allow you to buy in devices to do a task (networking, motors, infrared, bluetooth.... and list goes on an on).
At the slightly higher level are minicomputers. Earlier variations on the theme included things like the beagleboard but these days the most popular is probably the raspberry pi set of computers. They often run full graphical operating systems but as they have easily accessible IO pins you can take signals in and put signals out from them then they also play in this field. Bonus is with full operating systems you can often even program in the languages you see elsewhere (it is quite possible to program in python on a raspberry pi and output to pins to drive a robot or some electrical device). Save for cost, the lack of input/output pins and the power they draw you may well be able to go toe to toe with a FPGA in a lot of cases if you use one of these, certainly you will have an easier time if you wish to interact with it via network.
Other important programming related concepts
Related to this all this is licensing and the concept of open source. Software is a copyrightable work in all of the world, this means if you write it then you can direct its use like other copyrighted works. Much to the disapproval of many there are also software patents in a few places (though these few places do include the USA and Japan) but let us not get onto that. Though software is subject to copyright not everybody wants to lock down the users of their software and in doing so they often release it as open source, now this is technically a different concept to public domain (where works no longer have copyright and can be used by any) but the concepts brush up against each other.
http://opensource.org/licenses has some popular means by which to release your software to allow others to use it.
There are different theories as to what constitutes open source but in general open source is code that anybody can download, edit and make a version of to release by themselves. A lot of the time you will have to release your changes upon request; this is one of the bigger differences between the popular GPL and BSD families of licences, though read them carefully before you pick as things like LGPL specifically remove this aspect in some cases.
Also for some programs you might have to make your own icons/name. For instance the popular web browser known as firefox restricts people from using the name and logo of their project but allows people to use all of the underlying code, hence things like iceweasel.
A further field is code repositories. If you have been to websites like sourceforge, google code and github you would have seen the frontend to them. As code is typically text based you can treat it like text files. Code repositories allow you to upload files, note the changes, sometimes do automatic building and testing, make new projects based on existing code (a concept known as forking) and generally make things easier to manage. There are many methods here as well and different people have their favourites. The big three in most of open source works, and arguably in general, are
CVS
Considered old and outdated by some it still has a huge legacy following as it has been around a long time.
SVN (Subversion)
When CVS was getting a bit long in the tooth this rose up and captured a lot of the market, today some consider it to be long in the tooth.
Git
The new hot stuff in source code management, it is extremely powerful and some find its concepts a bit harder to get used to. It is well worth knowing about though and its power is actually useful once you know how it works. If you are not using one of the other two from another project we would suggest this one.
A further two might be Mercurial and Fossil.
You mainly want to know about them as they will allow you to download the source code, possibly contribute back and have it all set up for most open source projects.
Programming for mobile devices.
Mobile devices are popular these days and people like to program for them. Though you can do web related stuff for all three they tend to want you to use their chosen languages.
The big three operating systems in mobile are
Android
Helmed by Google and the chosen programming language is typically Java.
To get programs onto your device you just need to set it up to allow development. To get it onto everybody else's device (assuming they do not want to use developer mode and related things) you want to get it into the google play store. This takes a one time payment to register for.
IOS (Apple iphone, ipad, ipod and some of the other non-desktop/laptop Apple devices)
Software for Apple mobile devices is typically coded in a variation on C called objective C, however Apple somewhat recently introduced a somewhat higher level language called Swift, both are also available for normal desktop programming on Apple devices.
Once the most popular mobile OS it has since lost lots of market share to Android. It is also notable for wanting people to have fairly new versions of Apple's desktop operating system OSX (technically only available on their hardware) to be able to make programs. You also have to register with Apple to get it on their store, it costs $99 USD a year.
Microsoft
Not as popular as IOS and Android it does still see quite a bit of use in some circles, mainly business environments (though the other two are not slouches there either).
http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners has more.
End
Programming a highly varied field and this has barely scratched the surface (barely anything was mentioned about security for instance), however this should hopefully give you the means by which to get started.