Imagine you are Pinocho and your main goals are going to school every day. If we restrict the world to be only consisted of home, school, and the road in-between, Pinocho is never going to wander off. But on the other hand, Pinocho can't learn or do much either, and he will never have the adventure he had and learn the real meaning to be a good boy. Of course we want Pinocho to grow as much as possible. Here we have two approaches: one is to carefully design and expand Pinocho's world -- adding more roads and buildings and adding more characters. We may even consider adding some tricky but well controlled scenerios so Pinocho can expand his learning and experience in a steady pace. Or as a different approach, we could simply give Pinocho a few basics -- the ability to move around and the ability to communicate and above all, the ability to reason, then we simply expose Pinocho to the world without boundary. Of course we would suppose Pinocho would mostly going to school, and mostly interact with good people, and maybe occasionally wander off and play a few harmless games. And of course we are fully aware that in this un-controlled world, there are quite some area that we don't wish Pinocho to venture and if he did, frankly, we have no idea what would happen. In a way, what would happen when Pinocho adventures into area that the good fairy didn't not anticipate is -- undefined.
So C is pretty much like the latter approach. There is basic type system, flow control, memory model and basic operations that can express anything a cpu could do. Then C exposes the programmer to the wild almost unrestrained. There is guideline or standards that describes what the language designer has imagined what the programmer would do -- write codes that follows standard paths and making logical senses -- but C does not restrict them to do things that the designers are not sure of or even disapprove of. The C programmers in many time have to watch for themself or they will step off a cliff or render heavoc over the world.
C has fostered a crop of software developers and they have created most of the digital wonders so far we have enjoyed. Meanwhile, just Pinocho, they also have displayed naughty occasions and sometime inadvertently created some haphazard, some of them already played out their damages, and many of them are hidden that waiting to wreck heavoc of our beloved world.
So there is mounting pressure on adopting an alternate approach than that of C's -- maybe we should control our world much more. Let's identify the danger spots and put-up walls around all of them. The programmers will hit those walls quite often but at least they won't venture into them.
I am not here to judge which approach is better. Raising Pinocho is complicated business that there is no definite solutions. It also kind of depends on the good fairy's objective -- raise Pinocho to a good boy that meets expectations or raise Pinocho to its potential and amaze us (out of our expectations) on what he become. And of course, it depends on how much other side of what we desire that we will tolerate. It is complicated.
As a programmer though, I think my preference is clear. But I don't speak for other programmers.