Computer Science fundamentals typically involves the basics of how electronics work in tandem and make the software abstraction happen. Its always important to be sure enough of the internal processing of any system before diving deep into optimization research or even building industry-grade products based on the same. Of course it’s not practical to keep re-inventing wheels in the process of learning science, however its pretty advisable to be confident enough of the little things and their first steps at least. All complex systems can be re-engineered from scratch provided we start with the first principles of it. The key to be better at engineering is to know the inside-out of things while being capable enough to use and debug it. This post tries to stress the importance of fundamental Computer Science courses that are often slipped out of interest probably due to their complexity of understanding amalgamated with their functionality being perfect in their respective domain.

Computer Architecture

Computer Architecture would talk of why computers work the way they are, they give raw explanation of how CPUs exactly work, why primary memory matters, the fundamentals of data transfer between two devices. Computer System Architecture takes you to the motherboard level where you are taught to explain how CPU manages to execute series of instructions by fetching them one by one with the help of Program Counter and Instruction Register; how a single-core CPU really manages multiple threads, how processes are snapped and un-snapped by CPU using interrupts; how computers see addition and multiplication; and how external devices get their work done. These core concepts are crucial to be well-understood to build the fundamentals of microprocessing over it.

Architecture


Microprocessors & Microcontrollers

Microprocessors are so underrated - the fundamental piece of hardware managing the entire system effectively without downtime. The key ideas of how microprocessors store raw data quickly beside them (in registers), how each register is assigned a responsibility, how they communicate with them to perform operations, its just CPU at the finest level. Its so important for a computer science researcher to be aware of the down-lying code every single programming language is compiled/translated into. Apart from this, its mind-blowing to read about hardware and software revolutions that took us the roller-coaster ride from 8086 to Pentium to i-series to GPUs to TPUs. The transistor has been doing its task since ages, so its unwise to be confused of how a transistor works.

Micro


Operating Systems

Operating System is not only the performance-deciding factor of a system, rather it’s the entire layer of software that’s entitled to exploit the hardware capabilities. Its absolutely a must for Computer Science engineers to understand the internals of OS and explain how things work together in harmony. The importance of the OS on a system and being proficient enough to use it effectively is one of the must-needed skills of a CS grad. Well, one should be able to disasssemble an OS and able to reconstruct it part-by-part making no functionality broken. Reason number one why everyone should be learning and using UNIX-based OS (preferably Linux) in their learning days. Being proficient on the command line helps you being a better programmer. Not only do you understand the ins-and-outs of the existence of different files, but you do have the power to tweak performance to your requirements. Afterall, performing tasks through the command line is like using the first principles of any software development or usage. Here are some resources to get you intrigued :

OS


Computer Networks

Its just fascinating to realize the current progress Computer Networks has achieved. At the tip of a micro-second electrical signals are being transmitted from one pole of the Earth to another. As a Computer Science Engineer, its important to know of the fundamentals of the Internet, how devices connect with each other, how exactly does the data fly through air, how to establish connections securely. Nevertheless, one should not miss out the concepts of how routing works effectively, who is maintaining the internet, what’s the decentralized side of the internet, and how data flows through under-ocean cables. Its the research in Computer Networks (and Telecommunication) that has brought about revolutionary technologies like LTE, Fiber Broadband services to mankind. If it matters for the data to be passed on responsibly by middle-men, its important to be thorough with the concepts governing it. Here are some resources to get you intrigued :

Networks

Here are more fantastic blogs, posts and writings you should definitely read if you truly aspire to be a Computer Science Engineer :