The absolute Must knows in Computing:

If I can summarize the absolute must knows in computing (four) it would be:  Filesystem/Files, Memory, Sockets (Networking), and Multiprocessing/Multithreading

Filesystem and Files

Files are key to computing, especially when recognizing everything in computers (easily exposed in Linux) is a file. Files are everywhere. Websites are files. Apps are files. Software are files.  Files store information. Knowing how to write to files and read from files is very important.

Memory

Memory and how memory is managed in a computer are core areas in achieving competency. Memory is the temporary and very close storage that allows computers to perform complicated calculations  without forgetting previous steps(and also to run faster). Imagine how terrible it would be to forget the math formula or cooking recipe half way into the job. Computer Memory is just that, it’s like memorizing a math equation as opposed to having to go to the local library to lookup the math equation in a book (aka reading from disc).  Having to look up data in disk takes way, way longer (like walking to the library) than find the value in memory. If one’s memory is great, one can perform long math problems quicker and faster. A computer’s needs memory in the same way to compute complicated additions (after all a computer is just adding 1s and 0s).

Sockets

Sockets are the heart of the internet in that they allow many devices to be connected to each other. Sockets allow local programs in a computer to communicate with each other and for local programs to communicate with remote programs on other computers. Understanding networking, beginning with Sockets is essential for competency. A socket connects to an open port (a doorway) which allows other devices to interact with. A port can have multiple sockets that watch it for new incoming connections. By the way sockets are also files.

Multithreading/Multiprocessing

Multithreading and multi-processing allows a program to multi-task or to distribute tasks to multiple “workers” thus allowing the job/task(s) to get done quicker and better.  It’s like having a crowded restaurant with multiple waiters and cooks, this allows the patrons to get their food faster. However having multiple waiters to a phone-booth wouldn’t make sense — in the same manner multi-threading is often great and is an essential design strategy, but not all programs will benefit from it.

Real world applications:

Databases and Web-Servers are two examples that heavily rely on the above concepts. A database essentially stores data on files (or “on disc”). Some web databases (NoSQL) like Redis instead store all the data on Memory and locally make copies on disc.  Kafka, a messaging Queue common in Big-Data, stores it’s messages in “log files that are stored and duplicated on disc.

Web Servers listens for users’ requests by creating sockets on open ports and accessing local filesystem to serve the files the user has requested. Where appropriate web servers also utilize memory really well. To deal with the many clients web-servers often use Multi-threading or Multi-processing (like Apache, but this isn’t a very scalable approach). 

I can’t think of great Software, including Operating Systems that do not rely on the above concepts, in my view these core concepts are very essential to mastering computing.

Leave a Reply