Generally speaking, fault protection schemes need only account for one fault at a time, unless you’re a really large business, or some other entity with extra-stringent data protection requirements.
RAID protects against drive failure faults. Backups protect against drive failure faults as well, but also things like accidental deletions or overwrites of data.
In order for RAID on backups to make sense, when you already have RAID on your main storage, you’d have to consider drive failures and other data loss to be likely to occur simultaneously. I.E. RAID on your backups only protects you from drive failure occurring WHILE you’re trying to restore a backup. Or maybe more generally, WHILE that backup is in use, say, if you have a legal requirement that you must keep a history of all your data for X years or something (I would argue data like this shouldn’t be classified as backups, though).
A DNS Proxy/Forwarder server? That’s where you would configure how your .internal domain resolves to IPs on your internal network. Machines inside the network make their DNS queries to that server, which either serves them from cache, or from the local mappings, for forwards them off to a public/ISP server.
The only thing I can think of not aging well by today’s standards is the level grinding. I recall having to do quite a bit of it my first time playing it, just to keep up with the difficulty curve, and it’s not like I was skipping all the sidequests. That was a fairly common aspect for RPGs of the era, I think.
It’s also possible I wasn’t very good at the game, I was like 11 or 12 at the time.
C#/.NET makes HUGE usage of these kinds of internal self-optimizations. Just this year, in particular, the team made some pretty big expansions on the types and scopes of JIT optimizations that the runtime can perform. Article, if you’re curious.
A) Practice.
B) Interacting with programmers other than yourself.
On a more specific note:
Don’t work “around” problems. Identify what the problem actually IS and work backwards. When you try to take a step and find that you don’t know what step to take, or you’re stepping into something you don’t understand, go research and learn about it.
Learning how to read technical documentation is a valuable skill.
Recognize and challenge your assumptions. Which plays into working “around” problems. Do I know the error I’m researching came from this bit of code? Is this bit of code even running? Is the source file I’m looking at even part of the binary I’m running? Is the binary that’s running actually the one I’m trying to test?
C#. Comes with a first-class dev and debugging experience, a HUGE first-party BCL, cross-platform application support, and one of the best webserver frameworks out there.
TypeScript makes a reasonably-close second, not necessarily because it’s great, but because of how effective it is at making JavaScript usable.
I mean, I’m paraphrasing, too.