Hardware – How many bare metal should it know?

The last few days I was shocked that I knew almost nothing about the hardware I expected to run the software. I have been doing development for about 5 years, but since I left university Since then, I haven’t considered hardware theory/design. I don’t even build my own machine anymore, because, honestly, I would rather pay some extra money and let Comp Sci drop out and let me build it in the shop.

< /p>

Although it is clearly important to fully understand the basics of what is happening behind the scenes, it is far from the abstraction of us as developers, and we really don’t need to pay attention to the complexity of program I/O or memory mapping. I /O wait,…

Or us?

Please note that I am talking about your daily LOB developers, not dedicated bare metal people.

So, define “average” how you will be, but overall, How deep can a competent programmer dive?

It depends on your development level.

>If You develop for embedded systems, which means a lot of hardware knowledge (close to EE level).

>If you are in some professional fields, such as low-level 3D graphics programming for games, you should understand the specific graphics card Details.
>If you are working on a web or desktop application, it may not be so much.

But in all development, you probably should know the fundamentals. For example.,

< p>> Where is the bottleneck of the von-Neumann architecture?

> How does the CPU cache work (important in multi-threading).
>How to perform OS scheduling on a single-processor multi-processor CPU (again, it is important in multi-threading).< br>> How IO works and the reason for writing to files does not necessarily mean that the data will persist immediately.
> How slow is IO and why most database applications are IO bound.
>Why the network is slower and less reliable than IO (or even more wireless networks).

On the other hand, I don’t think I understand the specific content of memory mapped IO, or understand the relationship between NAND and NOR flash The difference is very important for ordinary* (desktop/web) developers. Even an understanding of modern CPU architecture may be a science in itself, see how complex they have been in the past few years, let alone code emitted by modern compilers is becoming more difficult to predict (the linked article shows that it is now more difficult to surpass compilers in low-level optimization). Decades ago, it was easier to be similar to car mechanics, and today not many people will try Fix the car yourself.

**The definition of “average” may be different.*

What shocked me the other day was that I I know almost nothing about the hardware I expect to run the software on. I have been doing development for about 5 years, but since I left university, I haven’t considered hardware theory/design. I don’t even build my own machine anymore because , To be honest, I would rather pay some extra money to let Comp Sci drop out and let me build it in the shop.

Although it is clear that it is important to fully understand the basics of what is going on behind the scenes, But it is far from the abstraction of us as developers, we really don’t need to pay attention to the complexity of program I/O or memory mapping. I/O, etc…

Or us?

Please note that I am talking about your daily LOB developers, not dedicated bare metal people.

So, define “average” how you will be, but overall, How deep can a competent programmer dive?

It depends on your development level.

>If you develop for embedded systems, it means a lot of hardware Knowledge (close to EE level).

>If you are in some professional field, such as low-level 3D graphics programming of games, you should understand the details of the specific graphics card.
>If you are doing web or There may not be so many desktop applications.

But in all development, you probably should know the fundamentals. For example.,

> Where is the bottleneck of the von-Neumann architecture?

> How does the CPU cache work (important in multi-threading).
>How to perform OS scheduling on a single-processor multi-processor CPU (again, it is important in multi-threading).< br>> How IO works and the reason for writing to files does not necessarily mean that the data will persist immediately.
> How slow is IO and why most database applications are IO bound.
>Why the network is slower and less reliable than IO (or even more wireless networks).

On the other hand, I don’t think I understand the specific content of memory mapped IO, or understand the relationship between NAND and NOR flash The difference is very important for ordinary* (desktop/web) developers. Even an understanding of modern CPU architecture may be a science in itself, see how complex they have been in the past few years, let alone code emitted by modern compilers is becoming more difficult to predict (the linked article shows that it is now more difficult to surpass compilers in low-level optimization). Decades ago, it was easier to be similar to car mechanics, and today not many people will try Repair the car yourself.

**The definition of “average” may be different.*

Leave a Comment

Your email address will not be published.