I think you just described the difference between what I would call a "coder", and what I would call a "software engineer."
The member of the "army" is what I would call a coder. Someone who can output code. That's it. Give them a well defined spec and a list of things to go do, and they'll go do it. Best to leave the system architecture (the "why" and higher levels of "how") to someone who understands things at a deeper level. Give the coder good libraries and tools that make it easy to rely on those libraries so that they don't run afoul of big-Oh problems too often. Give them solid coding guidelines and they'll produce something that works more often than not. Hand them a working system that has a few bugs along with the bug reports, and they'll probably manage to fix the bugs, or at least mitigate them.
Your first example are the folks you want working on the overall system and its architecture, and on writing the really tough bits. You also want them looking over the coder's shoulders from time to time to make sure they're not too far off the course. :-) These sorts of guys also ought to be designing and implementing the libraries that the coders rely on, so that even if the glue between the components is dodgy, at least the components themselves are solid.
I see it as the difference between a mechanic and a mechanical engineer. A basic mechanic can follow the service manual and keep your car maintained and on the road, although a complex problem with your car might perplex them. A more experienced mechanic can even work through some of the more complex problems and do work on custom modifications. They know how to take a car completely apart and put it back together. But, you wouldn't ask them to build a car from scratch, starting with a blank piece of paper.
A mechanical engineer though works at a different level, figuring out how all the pieces need to work so that they can do what they do. They're working with different alloys and metals, deciding whether the engine will have an aluminum block or a cast iron block. They're working out the intake and exhaust paths to meet their design targets. They're working out the control programs that run on the engine controller to control spark timing, air/fuel ratios under various loading conditions, and balancing power output vs. engine life. And so on. These folks are also likely to find basic auto maintenance extremely tedious, and may not even be all that great at it because their heart's not in it. But, they can do it if they need to.