I understand that fundamentals matter, but at some point you have to treat parts of a system as black boxes and learn only what you need. I'm having trouble figuring out where that boundary should be.
For example, if I want to become highly skilled in low-level computer networking and network programming, how much hardware and electrical engineering do I need to learn? Understanding something like the physical coding sublayer seems to require knowledge of chips, SerDes, PCB traces, buses, USB, PCIe, and related topics. Should I work through several textbooks covering calculus, physics, electronics, and computer engineering, or is a high-level understanding usually enough?
I'm a computer science graduate who was hired for a role involving relatively low-level networking because I knew programming and the necessary tools, but I started with very little hardware or electrical knowledge. Modern AI can explain unfamiliar concepts quickly, but without that assistance I often feel confused and make little progress. How did people traditionally learn these areas, and how can I develop the right depth of understanding without trying to master every layer of the entire system?
4 Answers
Be careful not to confuse expertise with knowing everything. An expert usually has a strong mental model of the system, knows which details matter, and can identify what needs investigation. They do not keep every implementation detail in their head.
Start with the abstraction your job uses, learn its guarantees and failure modes, and then study the underlying mechanisms that explain the bugs or performance issues you encounter. That gives you useful depth without requiring a full electrical-engineering degree.
AI is useful as a tutor, but if it removes all of the struggle, it can also remove the part where understanding develops. Try using it to explain terminology, ask questions, or give hints rather than immediately supplying a complete explanation or solution. Then close the tool and work through the idea yourself.
Real expertise comes from repeatedly tackling problems that are slightly beyond your current ability, checking your assumptions, and correcting mistakes. Feeling confused for a while is normal; the goal is to make the difficulty productive instead of avoiding it entirely.
There probably isn’t a universal sweet spot, and you don’t need to know PCIe or USB to become an effective network programmer. I worked in programming for many years and learned low-level C networking without learning the details of either one. Libraries and operating-system interfaces exist precisely so you can build on tested components.
A practical approach is to learn the principles behind the part you are responsible for, then investigate lower layers when they affect your work. You can always go deeper later, but trying to master the complete hardware stack before becoming productive is usually inefficient.
Fundamentals and abstraction are not opposites. In networking, understanding the responsibilities and interfaces of each layer is itself a fundamental skill. You need to know what a layer requires from the layers around it, but you usually do not need to know every implementation detail beneath it.
If your work specifically involves the physical coding sublayer, you may need a stronger electrical-engineering background. Otherwise, knowing the relevant constraints and concepts is often enough. You can learn deeper details when a real problem requires them rather than studying every layer in advance.

Related Questions
How To: Running Codex CLI on Windows with Azure OpenAI
Set Wordpress Featured Image Using Javascript
How To Fix PHP Random Being The Same
Why no WebP Support with Wordpress
Replace Wordpress Cron With Linux Cron
Customize Yoast Canonical URL Programmatically