I know this is an old thread but I would like to put in my 2 cents if you down mind.
I was introduced to computers way back 1974. I passed a gov't exam for a 4 week training in Cobol. The course involved us writing a sort algorithm and a simple payroll application. I got a job in the private sector then after six months, was assigned to maintain assembly applications running in Univac 9300 (similar to S360 with a 4K memory).
I stayed in that job for 2 years then started to do contracting. Bexause of my experience in assembly, majority of my contracts were designing/writing S370 operating system components. The other was porting one language to another language. I bought an Amiga computer which required me to learn M6800 assembly and C. I bought a C primer (Ritchie and Kerningham) and wrote my first C program after 3 days. I then bought my first intel based machine and learned intel assembly.
This is based on experience.
First, you must understand that all machines work in the same manner. You must be able to visualize what is happening inside the CPU, that inside are only switches that can be turned off and on, depending on the machines instructions.
You can use any language to achieve a purpose, although some languages are designed to lean more to a particular scenario. For the conversion job that I did, I used Cobol. The requirement was to parse the existing language and come up with the new language. This is basically what a compiler does. I made that decision to use Cobol as all mid-range/mainframe machines implements Cobol so it was easy for me to just take it from one contract to the next.
It is necessary that you understand binary/hexa/octal arithmetic. You must also understand boolean arithmetic (or,and,xor,...).
You must also keep in mind that arithemetic and boolean are parsed according to priorities. That is:
1+2*3. The multiplication has higher priority that plus, so it becomes 2*3 first, then add 1 to the result/ This is true for boolean expression. That is, and has a higher priority than or.
To override this, you use parenthesis so
(1+2)*3 is resolved as 1+2 first, then multiply the result by 3.
Boolean bits (or switches) are merely the state of bit (or byte). a binary zero signifies false while a non zero signifies true.
Internal ordering of numeric data should also be taken into consideration, if required. There is what is called LSB/MSB (intel) which means the least significant byte preceeds the most significant byte.
So
if the actual value is X'1234', then internally, it is represented as X'34' first, then X'12'. (visually X'3412') Other CPU's represent the internal data as MSB/LSB. That is the most significat byte first, followed by the least significant. Also, as I understand it, the representation for numeric data passed in the web (net) is MSB/LSB (please somebody correct me if I'm wrong).
There are two types of programming. There is what you call procedural, which you start, then wait until it ends (does not involve user interaction). The other is object oriented which is the approach used in modern programming because of the necessity of user interaction.
Finally,
I suggest that you try your hand first using C. Create a little application that would read an input file and come up with an output. It is a lot easier to create a procedural type of program. GNU has a lot of projects using the implementation of Ritche and Kerningham's C. You can download the source if you want to take a look at them. Afterwards, when you have learned the C syntax, you can then move to C#. I have enjoyed using C#. The disadvantage is the the C# modules will only run under .NET. (To be honest, I haven't tried MONO under Linux) Being object oriented, there are a lot of things to learn. (TreeView, Panel, ListView,...), but the language is quite powerful.
Arm yourself with a good manual. It is hopelessly difficult to find the object you require using the help facility without knowing what you are looking for. For example, If I need to find the help for an object that can input text, I will have to know first that what I am looking for is called textbox.
After you have familiarized yourself with C, it would be very easy to learn other languages.A good example is Java.
Good luck