This is my take, as someone who has programmed for a long time.
ANYONE can learn to code.
But NOT EVERYONE can call themselves programmers.
Coding is easy to learn; programming is not. The difference lies in the ability of the engineer to write clean, understandable, orthogonal code which is focused towards readability, ease of maintenance, and modularity.
There's something software developers call spaghetti code. If great care is not made towards designing a non-trivial application with these critical design aspects in mind, the program will become riddled with bugs, difficult or nigh impossible to maintain, and will become eventually unusable. Back when I did freelance work, 90% of the projects I undertook were rewrites of absolute garbage code that had been done previously without care towards design.
Like I said, anyone can learn to program. You can learn to write code by memorizing. If you can memorize you can code. But this does not mean you can write software that should be ever used by others.
It is EASY to learn, but EXTREMELY DIFFICULT to master.
I would go so far as to say that nobody has ever mastered programming.
--
As far as learning a language:
Math is not too necessary. The important part is your ability to use logic. That's what programming is, and it's absolutely necessary.
Unless you plan on doing numerical applications you will be able to get by with algebra.
Doing numerical or statistical applications and you'll need the specific requirements, if you're doing 3D graphics you need basic calculus (integration), lots of trigonometry, four-dimensional vectors and matrix math.
For basic applications development, trig may be useful.
I would suggest different languages based on your personality, TBH.
My first language was C++. It's not the easiest language, but I felt that I should cut the BS and get a good foundation in programming, which is exactly what C++ does for you.
It introduces you to different styles of programming and lots of low level manipulation, memory management and inline assembly that many programming languages omit (rather hide), because they are not exactly critical towards whatever paradigm the language is focused towards. C++ is not focused towards any, but rather most, to varying degrees.
If you're not up for that, which I recommend, I suggest Haskell or Eiffel. They are both considered general- purpose, but are not so large and are less widely focused.
The others like Java (you'll get lots of suggestions for this) I feel are not suited towards a learner.
The language is relatively easy, like Python or Microsoft's Visual Basic, and learning those first will be a shock when you realize how far specialized these languages are. In my opinion, they are not suited towards learning to program effectively, rather, learning to code, as discussed above. These languages are fine to use when you recognize when they would be appropriate, but I discourage you from using those as your starting language.