These days everybody is learning Python. I remember when we first started programming we were taught C Language. As a teacher which language should be taught first these days, C Language or Python?
The question is actually more complex than it might appear, and really the answer can depend on the context. For example, at what age are the students when they are first taught to program? Is this in Primary School, High School or part of an undergraduate programme? The answer might be different in each case.
It also depends on the purpose of teaching the initial programming language (IPL). Is the purpose to lead towards a practical skill (vocational programming), or is it to enable the teaching of some knowledge of algorithms (pedagogic programming), is it to enable the functioning of some devices (engineering programming) or is it to prepare students for further study? Each of these questions could lead to a different language as an IPL.
For a very early age start of programming one does not have to worry about employment or future curricula so something engaging is important, so tools such as MIT Scratch have a role. For later childhood Python fills a nice niche, particularly as it can run on a wide variety of inexpensive platforms (such as Arduino's, Raspberry Pi and so forth) which provides accessibility and make it within the reach of the classroom and individual students.
Conversely, if one is looking at an undergraduate IPL then it may depend on which degree programme is being considered. Is it a degree in Computer Science, Engineering, Biology, Chemistry or Physics? One would then need to take into account what graduate employers might be looking for and tailor to that market.
Python might have value in some of these programs but the students would also have to learn other languages at some point. For example, Computer Scientists would need a wider experience that would embrace C#, C++ (among others). Electronic Engineers might need C, but Computer Scientists less so. Biologists might need R, Chemists and Physicists might still need Fortran!
However, I would say that I might never recommend C as an IPL, and would start at C++ even for the most hardened Electrical Engineer. I only show Computer Science students C in specific contexts (like working with flex and bison)!
One thing I say to my students in the course where I look at Languages is that there is no one best language. The choice of language for any particular situation is so very context dependent on resources available, skills available, the purpose of the programming and the end goal of the task, and for an IPL that advice still holds true.
Python is a fine language for learning algorithmic thinking and problem solving (see e.g. Downey's "Think Python" (Green Tea Press, 2nd edition 2016)). Python has an enormous ecosystem, including all the range of packages for simple tasks up to heavyweight systems like SciPy for all sorts of scientific computing, NumPy for numerical computation (included in the previous one) and SageMath for wide range of mathematical tools. It is also extensively used to program front-ends for administrative tools on many Linux distributions. Very far from a toy language, it usually ranks in the first places of language popularity.
C is a simple, low(ish) level language, very useful for tasks that require intimate access to the machine, like operating systems and all sort of system programs. There are good compilers available, that generate very efficient code. It's low-level nature with loopholes to allow fondling hardware at your heart's content, (somewhat) strict type system and lack of amenities like automatic garbage collection makes it harder to use (and a nightmare for newbies). Almost all software that you use daily is written in C.
Both have their place, which one to select depends on the time available (pick Python if there is time for learning other languages later on as needed; pick C if time is at a premium and that will be the later language of choice, but be prepared to spend a lot of time getting e.g. pointers and arrays across).
I started teaching Python at NCSSM in 2004. Here are some reasons I chose it.
It is direct and simple, and there is not a whole ton of boilerplate to deal with at the beginning. Hello, World looks like this
We all know what it looks like in Java (enclosing class needed) and C.
Delimitation occurs via whitespace. Students who begin with Python tend to have excellent formatting habits when they learn other languages, because Python requires them. There is a direct visual connection between the flow of a program and its appearance.
It's a professional tool. Students don't "outgrow" Python. It has a rich standard library and numerous third-party libraries that make it an awesome tool.
It supports OO, functional, and imperative programming paradigms
Memory management on the heap is largely abstracted away.
The built-in types provide a significant creative palette. We teach our students to "use wheels, not re-invent them." An exception to this is when we are "dissecting" something to gain an understanding of how it works.
It runs on everything and web interfaces for it are freely available.
Long experience shows that Python is an excellent language for beginners.
C is not great for beginners. However, it is very important. In many ways it is the "Latin" of computer languages. Every programmer should know it, because it lurks beneath the surface in so many places. We teach it to students who are already proficient programmers.
I can not answer directly because I know nothing about Python, but I first started to use C nearly 4 decades ago, and have used it for some really complex stuff. I love C# (I use it in the context of ASP.Net) and think it is very well designed and implemented. So, I would be biased no matter what, as you know, because you never forget your first language, which in my case was somewhere in the murky past of Basic, PDP-11 shell scripting, APL and Fortran, with punched cards and without...
Anyway: I would suggest that the concept of Notional Machine should be the absolutely most important consideration when first teaching anything about programming. Without a notional machine informing their understanding, students will know basically nothing about computing, and with a good foundation in one, they will know everything they need to know to learn new languages, systems, frameworks, etc, forever.
So, choose a language that actually teaches computing in a way that is generative, extensible, with sound metaphors and which has a small grammar that is not too powerful. In other words, something like C without too much preprocessor tricks or frameworks thrown in. Frameworks are the sauce, teach then how to cook first (colorful metaphor).
The problem is that there is such a forest of layers and tools now that actually seeing the machine in a way that contributes to notion-formation is very hard now. I would rather that students learn how to write simple command-line programs than know how to make a web site, because a lot of web site work is not really programming in any sense, it is just setting a lot of switches. And sadly, that misses the whole point of why we invented computers in the first place.
Without the idea of program, they are technicians, not creators. So choose wisely.
At this moment, definitely Python. Because it's very easy to learn, understand and implement. Also very big and huge community around the world in terms of any help and support needed at any point of time, Large number of packages available based on the need, which simplifies and make programmers life easy, specially beginners. Also there is no need of programming concepts to be known/aware, while start learning Python.