Depends on the perspective. There are many kinds of progammers out there (e.g. HTML). The missing issue here is that none of us here has defined the profile of a programmer exactly, so that the discussion tends to degenerate into a rant and faction fighting
yes and no.
Start with a language that contains the essential difficulties that you will meet in future life.
If you learn judo, it takes ~ 1 year before you can anything useful. Why should progamming be any different? And just having a degree in maths means nothing in this context.
You display a fundamental misunderstanding of how people learn.
Learning new things is like erecting a scaffolding, you build your first layer and then build on top, adding more elaborate features as you go along.
You first need a base. In programming, that is understanding data types, loops, logical statements, functions etc. To write a simple loop in C requires the definition of a main function and the inclusion of a header file. This raises more questions than it answers to a beginning programmer. It also distracts from the real task, which is writing a loop.
In
Python you can write:
counter = 0
while counter < 100:
print counter
counter = counter + 1
that is your first while loop, which is easy to understand and free from unnecessary syntax clutter.
Once you know the basics, then you can move onto more complicated things, like pointers and header files etc. These are things that C basically forces you to have an appreciation of from day 0, which is completely unnecessary and just confuses beginning programmers.
Once you have understood the basics, you can build your next layer of scaffolding. That may or may not be C, but C is certainly not the first layer. Similarly, you should learn OOP elsewhere before moving to
C++.
Python is also a good choice.
Finally, since programming is about DOING and practicing DOING things, you should start with a language that allows you to do the most with the least effort. That language is certainly not C or
C++. The learning process should take someone as quickly as possible to the point where they can start doing something that is non-trivial. In
Python that can happen in a single day.
In C it's not clear that you can do some of the string manipulation or file IO that
Python can do without
serious expertise. This is also why people are moving to
Python from C/
C++.
When you consider that people are migrating from
Python to C/
C++ anyway, and that the natural way to learn programming would be
Python -> C/
C++ then it clearly makes utter sense that one should start with learning
Python. Your dogmatic love of C/
C++ really taints your advice. C/
C++ has its uses, but using them as a first programming language is not one of them.