I go along with Earl on what he says. Here are a few of my observations:
The "logic is acquired" by studying, experiementing, working on real projects with other experienced people, and doing practical work.
I taught programming and database topics at the university level and found that just about anyone who can use a computer can learn to do programming to some degree. I also found that those who become interested can usually become proficient enough to become employable - in other words, to be useful enough at it to get paid for it.
Logical thinking isn't limited to mathematics, and much of the type of thinking that a typical programmer has to do isn't mathematical in nature. I do not see a need to be talented in mathematics to be an exceptional programmer. Knowing some math, algebra, etc. is a good thing - and exploring those things as far as your talents allow is useful, but don't think that you are at a disadvantage if this isn't your strong talent. There are some specific industries and jobs in programming that require people who are deeply capable in mathematics, and if that is where your interests are then you'll need as much math as you can stomach - but otherwise, just the typical math is all that is needed. However - you do NOT need to know ANY math to start learning to program. In other words - you can start programming TODAY, and learn a lot along the way without having any math courses, and as you progress in your studies, you might find there are some math classes you would find helpful and you can tackle that when it happens. If you are a "logical" thinking person and can organize the steps to getting something done then that is the beginings of the type of logic a typical programmer works with.
As to which language is best to learn - I would suggest eithe
VB.NET or C#, with my own preference being C# since that is what the company I work for is using. However - Languages come and go, what was in popular use when I learned to program isn't used at all any more. You have to start somewhere, and C# is easy enough.
Learning algorithms is something that would be useful to learn, and almost every degree program will include a class or two on algorithms. I don't see any reason to start with it. Start by learning to write some code that does practical things to get your feet wet, and learn as much about the basics of the first language you learn. As you start to see what it is all about, you will find the areas you are most talented at, and most interested in, and that will help you to understand what is most important for you to learn.
If you plan on working toward getting a college degree, which I highly recommend if possible, then you will have much of what you need to learn dictated by the degree program you choose. These things might or MIGHT NOT be relevant to what a programmer needs in his/her daily work. These courses give you a structured set of topics that should help you to become trained, but they are usually meant to provide a broad introduction to the field, and aren't typically specific to what you need to know and use in your daily work as a programmer. In other words - most of what is relevant to you will come from your own experiments, practice, reading, and practical experience.
Obviously I have simplified things a bit here, but my overall suggestion is that you will find if you have what it takes by giving it a try. So get started now - set up and start programming something TODAY, and never stop. If you do that, you'll do great, and if you find it isn't for you, the sooner the better. One bit of advice: When you come to a wall you can't get over, there is always someone who will give you a boost.
Woody Z
http://www.learntoprogramnow.com