Oh and at this point there is no choice of language. C and C++ are the only ones available for this kind of development. Any other language is simply unsuitable or will need to call into C/C++ code anyway.
Not true. You can implement pwd, ls, and Firefox in lots of other languages. For example, both perl and python have perfectly good C-library and system call bindings, and could do all of these things. And implementing these things in higher-level languages is considerably easier (and therefore more appropriate for beginners) in languages where you don't need to worry about malloc and free, the difference between malloc/free and new/delete, and the subtle distinction between pointers and arrays.
There is nothing wrong with reading K&R (second edition). For a professional programmer, it is actually a must-read, to understand the history of where C (and therefore C++) came from. Just like a professional physicist should have read Newton's Principia in the original (actually, in an English translation, since few people today can read latin), and a professional psychologist should read some Freud (again, in translation if they don't read German). But for a beginning programmer, K&R is not the best introduction to programming, nor the best introduction to C. Matter-of-fact, for a beginning programmer today, C is probably not the best language to learn. There is a good reason that most academic computer science and software engineering programs do teach other languages first, with common examples being java and python. Personally, I think that teaching C as a first language, and using K&R as the first programming textbook is a very bad idea, since it teaches the new programmer details that they will have to eventually master, but that just obfuscate the big picture that the novice needs.
C still has a place today. It is a necessary basis to understand C++, and the languages (such as Go, C#, Java, Swift) that have been derived from it. It is also (together with C++) still the only pair of languages used in Linux and *BSD kernels, and for historical reasons the implementation language of quite a few major pieces of software. But a professional programmer will eventually know 3 or 4 languages well, and a dozen so-so, with C and C++ only one arrow in their quiver.
It's a lot like teaching music. You don't take a 7-year old and put a copy of Scriabin etudes in front of them, and say "play this": You start them with "Mary had a little lamb" in the right hand, with simple chords in the left hand. Eventually, they'll have to learn that F-flat is the same button as E, and how to play double octaves with the melody in the middle, and super-fast broken chords with trills underneath, but they first need the basic skills to orient themselves on the keyboard and be able to get a coherent melody.
The other thing that people forget is: learning programming in and of itself is a necessary skill, but by no means sufficient. To be actually functional in the real world today, you also need to know good software engineering skills (how to analyze requirements, how to write design documents, how to write maintainable and clear code, how to structure longer programs into readable, writable and maintainable modules, how to perform code reviews, how to use source control systems, and how to function in a group of people). You also need to have at least a superficial knowledge of the tools that are out there, things like databases (SQL), parsers (lex and yacc), debugging and development tools (gdb, eclipse), and so on: nobody today can be productive, if they have to create all their tools from scratch. And given the scale of today's real software problems, good skills in object-oriented analysis and design are also vitally necessary. C++ is not only a different programming language from C, it is a completely different way of thinking about problems and structuring your program. Instead of spending 90% of the time worrying about algorithm and code details, you end up spending 2/3 of the time thinking through the data that describes the problem, and the relationships between the entities, which causes the code to become much easier to write.
Teaching just programming skills in a complex language, without the common sense of software engineering, and the thinking skills of OO A&D, creates idiot savants. Which nobody wants to hire or work with.