DEV Community

Cover image for Why Every Software Engineer Should Learn Computer Architecture.
Voider
Voider

Posted on

Why Every Software Engineer Should Learn Computer Architecture.

Introduction

I believe that success greatly correlates to two things, how you see the world and how much you truly understand it. We can say the same about software engineering; where computer architecture is the very essence of software engineering, if you understand it well enough, software engineering will be a piece of cake.

What is Computer Architecture?

According to Wikipedia:

Computer architecture is a set of rules and methods that describe the functionality, organization, and implementation of computer systems.
Some definitions of architecture define it as describing the capabilities and programming model of a computer but not a particular implementation.

In a nutshell, CA is basically the set of rules that control how hardware and software interact together.

Why Study Computer Architecture?

Computer Architecture can help you more than you think.
For example, most F1 drivers know a lot about their car's engine, to the point they can determine any problem with their engine, even before their engineers can!

They also know about Physics and Aerodynamics, hence this helps them give precise instructions to their mechanics in the Pitstop, like adjusting the nose or the wheels leading them to win more races.

Well, what does all this have to do with CA? It’s the same concept! When you understand and know more about the cornerstone of Software Engineering, you know how to handle problems and achieve what you need, more efficiently.

Why you should learn Computer Architecture:

  • You will likely use it for the rest of your life.
  • Computer Architecture is one of the most fundamental subjects in Computer Science. As without computers, the field of Computer Science would not exist.
  • You need to understand how the instructions and operations actually work and interact together, to make your software better; because whatever you do, no matter what, it is on top of CA.
  • Computer Architecture will help you design, develop, and implement applications that are better, faster, cheaper, more efficient, and easier to use because you will be able to make informed decisions instead of guessing estimating and assuming.

Example On How Computer Architecture Can Affect The Way You Code:

Branch Prediction: Let's say you are on a train, your job is to observe the way and you are at a railway junction:

Railway

You have to choose a side and you don't know which side to go on; so you either choose the right path or the wrong path, if you do choose the right path you will keep going, if you choose the wrong path however, you will go back and choose the other path. So if you keep choosing the right path you won't have to go back again and if you choose the wrong path you will keep having to go back and forth,
makes sense?

Consider an if-statement: At the processor level, it is a branch instruction:
code

Now you are a processor and you see a branch, you have no idea which path to go, so you will have to enter.

  • If you guess right the execution will never have to stop.
  • If you guess wrong, you spend more time going back and restarting the execution.

So how do we make the better choice each time?
We observe. If the process, usually takes left then we guess left. If it takes right most of the time, we guess right. If it alternates, then we alternate our choice as well

This is, more or less, how Branch Prediction works.

Conclusion

Learn Computer Architecture, become a better software engineer.


Special thanks to the reviewer, Rawan Attia.

Latest comments (40)

Collapse
 
denim06111991 profile image
denim06111991

Would you be interested to share you thoughts on one of our book titled, Modern Computer Architecture and Organization? In return we would share a free ebook copy of the book and any other ebook as per your expertise.

Collapse
 
jj profile image
Juan JuliΓ‘n Merelo GuervΓ³s

You don't even know what kind of architecture your code is going to work on. It might be a one-core single-threaded legacy machine, it might be a virtual machine, it might be a bytecode-executing runtime thing, like Graal VM. Knowing architecture might make you a better embedded or real time software engineer, or even a mixed software-hardware architecture designer. If you are creating any kind of software nowadays, what you write is so far away from the actual architecture that you might as well guess it's running on a Turing-complete cellular automata. You don't care.

Collapse
 
jaiko86 profile image
jaiko86

I'm sure developers would benefit a lot from a lot of things. As a frontend engineer at a big cloud networking company, I think a lot of people will benefit from knowing about encryption, cryptography, networking, frontend engineering, and UI/UX concepts.

So this is to say that computer architecture is not really for everyone. I won't benefit at all from knowing this information. There are far more pressing things I have to learn in this field than computer architecture.

For instance:

  • How do I improve accessibility of the website for people with disabilities?
  • How do I load faster? What sort of chunking strategy should I use?
  • Should I start to transition to Web Components?
  • How do I better optimize for search engines?
  • WebGL, web workers, etc.
  • At least have a working knowledge of all the major frameworks: React, Vue, Angular, Svelte, etc.
  • Learn webpack and other bundlers in depth
  • Get caught up in the latest JavaScript standards and syntax
  • Better use of CSS to improve site performance.

You see, NONE of these will even come close to anything related to the systems. For frontend developers, everything happens through the browser, so inconsistencies across browsers, etc. are the thing to worry about. Not computer architecture.

Collapse
 
shivenigma profile image
Vignesh M

Trust me, software and tech industry improved a lot only because we didn't have any stupid form of gatekeeping like this.

The hacker mindset and permissionless nature of code is the fundamental of the innovation.

 
leob profile image
leob

No the cases aren't slim, they're the majority ... you're serious that most people now working in development are unqualified to do so and should preferably be ousted and only let back in after passing your "exam"? I think the cure here is much, much worse than the ailment ... unless you happen to be in the business of developing all of these certifications and making big money off of that ...

The issues you're trying to solve are minor and mostly theoretical, the tool to solve them are well, a very big and blunt sledgehammer ... if ever the powers to be would mandate this kind of thing (lord forbid), it would just be a total and utter disaster.

Thread Thread
 
leob profile image
leob

Yes, everyone should go take the test, because, well ... because you say so. This gets weirder by the minute, I'm so glad that you're not in charge, and that this idea has zero chance of becoming a reality. Get a life, let everyone just do their job without assuming they're incompetent, give us all a break LOL

 
leob profile image
leob

Yeah nice, let's all create a boatload of unnecessary bureaucracy and busywork to solve, well, what exactly? An imaginary problem ... I'm glad you're not in charge of running the government or a major company

 
leob profile image
leob

Give me a break, get real, you clearly have a totally irrational bias or hatred towards ... a tool? What has Ruby done to you to deserve this? LOL

Collapse
 
mimahmed profile image
Mim Ahmed

You are right. CA is most important for Software Engineers

Collapse
 
tardisgallifrey profile image
Dave

Precisely why every dev, programmer, coder or whatever should learn some assembler, even if they don't use it regularly.

 
leob profile image
leob

And who's going to decide what will be in that test? And you're seriously thinking that you can come up with one standard test that makes sense for people doing vastly different work, all of which we conveniently lump together under "software engineering" or "development" or whatever you want to call it? The industry is just too broad, this could work for specific segments but in no way indiscriminately across the board.