Kyle says:
"my first programming language was Visual Basic.its easy to learn, and has endless possibilities."
Sorry Kyle, but you're quite wrong. All of the BASIC-family languages are terribly limited and are considered a major hindrance and promoter of laziness and bad practice by many experts. And Visual Basic is just another variant of the original. VB is even MORE limited than the original. It can only work on managed runtimes like .NET's CLR and Mono's CLR. There's no way to run it outside of those platforms, and no way to compile them to native binaries (that actually works reliably). Try writing a next-gen flight simulator in VB... not happening... Try writing an operating system in VB... yup, not happening. So there you go, your possibilities are definitely VERY limited. Those are just two things you either can't or cannot *feasibly* do. There are tons of others.
But to answer the OP's question:
You have two routes you can take (that I recommend), and they both will work well. The first way is to work from the "Bottom-up". The other way is to work "Top-down". What I mean is *abstraction*. Are you familiar with the terms "low-level" and "high-level"? To put it simply, "low-level" means there is very little abstraction; you are closer to the machinery and the inner architecture of the system and hardware. "High-level" means there is a lot of abstraction; and you are working in a more "human-friendly" environment. It might seem backward/counter-intuitive, but in general, "low-level" programming is more complicated and difficult for humans, whilst "high-level" programming is more convenient and understandable for humans. Assembly language is an example of a low-level language, and it is just a simple set of opcodes which represent native processor instructions. An example would be (just a snippet):
xor eax, eax
mov eax, someData
push eax
That directly manipulates memory and the processor registers. If you're curious, that first clears the EAX register, then moves some sort of data named "someData" into the 32-bit storage, then pushes that value onto the stack. As you can see, very powerful and "low-level", but might make absolutely NO sense to most humans who don't have experience with assembly language. Hopefully, you get what low-level means now. :)
A HIGH-level language can still be extremely powerful, like C# for instance. It is more abstract and generally better/more convenient for humans to work with. Here's an example snippet of C#:
int AddNumbers(int a, int b) {
return (a + b);
}
Makes much more sense, eh? That simply adds two numbers you pass two it (the integers a and b) and returns the sum. Yes, this would be a rather useless method/function in a real program, but hopefully the example shows you the difference in low/high-level programming.
So, YOU can either choose to start learning from the low-level or high-level. Either way is fine! You can also start right smack in the middle, which is what I did. C is the perfect language to get started with if you want to start in the mid-level of abstraction. C also has very, very few keywords and rules to remember, so you can learn the syntax (basically the grammar) very easily. It's just tough to write useful programs which work correctly (just like every language, really). You can learn the full syntax of C in only a few days or a couple weeks. It all depends on how hard and fast you work and learn. You can be writing some simple console programs on your first day if you're willing to read some tutorials.
If you're brave (and patient), you can start at the VERY low-level. If you want to understand it this way, I would first start reading up on basic computer science first (memory, addresses, circuitry, etc). This is a good thing to learn in ANY case. Learn about the basics of how your computer works. Then you start learning assembly language, which allows you to directly "talk" to the processor. This is extremely difficult to master, but it's very rewarding and fun if you're a tech-junky like me! :) You can even learn to write a simple bootloader and operating system kernel if you learn this way! Very cool, no? I'm working on an experimental micro-kernel based OS right now, but I use very little assembly language. Most of it is standard C and C++. After all, C and C++ are compiled to the same native binary that assembly language is *assembled* to. Assembly just lets you directly access registers and blocks of memory very easily, and it's 100% imperative (commands).
The quickest way to learn, however, is just to start at the HIGH-level. I recommend NO other language to you than C#. Forget VB/BASIC, Python, etc. IF you learn C#, you can learn anything. In fact, the SYNTAX of C# and C, C++, Java and tons of other languages are so similar that you can actually compile snippets of one language in another with little to no changes. The example C# snippet I posted above will also work in C, C++, Java