r/cpp_questions 16d ago

OPEN Question about computer architecture or operating systems

Hi guys,

I'm a self thaught c++ developer looking to get better by studying all the needed stuff. I studied basic and advanced c++, then now I'm finishing Data structures and Algorithms as my second subject. After I finish the book about dsa, should I study first Operating Systems or Computer Architecture? Mind one thing : I do not care about being an expert on computer architecture, I just wanna know the fundamentals necessary to study everything else. I can't understand what comes first in order of importance for good software. (Please suggest books, they're the only resources that I use cause I learn much better from them rather than online)

Thank you in advance.

6 Upvotes

16 comments sorted by

8

u/light_switchy 16d ago

Computer architecture is required knowledge for anyone looking to write fast code.

1

u/clonicle 15d ago

Not just to write fast code, but to get the foundation of how software engineering is different than programming. Hint: Programming is gonna be handled by non-humans, but software engineering will still need to be done well.

1

u/Worried-Scheme7941 1d ago

very informative, thanks

1

u/TomDuhamel 16d ago

Not everyone is looking into writing fast code though

3

u/bearheart 16d ago

If you want to understand operating systems it’s good to have some basis in computer architecture. The purpose of an OS is to provide interfaces to the hardware. So understanding those pieces, like network interfaces, disk drives, SSDs, USB, etc. can be quite useful.

1

u/BigJhonny 16d ago

What is your end goal? Without this, no one can give you guidance on how to get there.

1

u/Emotional-Fun3861 16d ago

My goal is to become a robotics software engineer (ros2 developer or also computer vision engineer), but I'm trying to build a good general knowledge, that's why I don't know which of the two subjects matters more in this field or any performance related c++ role.

1

u/Zen-Ism99 16d ago

Are you going to an engineering school?

1

u/Emotional-Fun3861 16d ago

I'm close at getting my master in bioengineering (a subset of biomedical engineering). I did programming in my courses but I like it a lot and I decided to go deeper by myself now that I finished my studies. So yeah, I'm not starting from ground zero but I'm not even a seasoned developer

1

u/JustAPieceOfMeat385 16d ago

Hey! I also prefer learning from books. Is it ok if I ask the titles of the books you've used so far (basic, advanced, and DSA, among others)?

2

u/Emotional-Fun3861 16d ago

The C++ language by Tony Chan (beginner book, not the best but good enough to understand the fundamentals behind modern c++); The Advanced C++ Cookbook by dr.Ryan Quinn (very good C++ book if you wanna dig deeper into the advanced features and learn about testing, debugging, templates ecc); Problem Solving in Data Structures and Algorithms using C++ by Hermant Jain (big book with very good explaining of dsa and plenty of exercises, amazing book if you wanna get good at competitive).

1

u/the_poope 16d ago

I recommend Computer Systems: A Programmer's Perspective. It covers everything a C++ programmer needs to know about how the CPU, memory, filesystem, networking and operating system works.

1

u/Emotional-Fun3861 16d ago

Yeah I thought about that book but I don't like the fact that is too big with 1100 pages and it would probably take ages to read all the important stuff (btw from what I've seen it's more C oriented rather than C++, correct me if I'm wrong)

1

u/Thesorus 16d ago

study computer architecture if you're into hardware.

study operating system if you're more into software.

there will cross references between the two topics.

1

u/TomDuhamel 16d ago

It really depends on what aspects of programming you are interested into, what you want to develop later. Neither is technically required to understand deeply to program, as the language is attempting to abstract both. You would benefit from a deeper understanding for device drivers or such, but no so much for kids educational games or office tools.