thompsonritchie.jpg

Systems Programming

Ever notice a difference between programs written for a computer and programs written for people?

Systems vs. Applications Software

Software can be roughly divided into systems software and applications software. The dividing line is fuzzy, but the basic concepts are:

Applications Software Systems Software
Deals with human-centered abstractions like customers, products, orders, employees, players, users Deals with computer-centered concepts like registers and memory locations
Solves problems of interest to humans, usually in application areas like health care, game playing, finance, etc. Controls and manages computer systems
Concerned with anything high-level Concerned with data transfer, reading from and writing to files, compiling, linking, loading, starting and stopping programs, and even fiddling with the individual bits of a small word of memory
Is almost always device or platform independent; programs concentrate on general-purpose algorithms Deals with writing device drivers and operating systems, or at least directly using them; programmers exploit this low-level knowledge
Is often done in languages like JavaScript, Perl, Python, Ruby, Lisp, Elm, Java, and C# that feature automatic garbage collection and free the programmer from low-level worries Is often done in assembly language, C, C++, and Rust where programmers have to manage memory themselves
Is done in languages that generally have big fat runtime systems Generally feature extremely small run-time images, because they often have to run in resource constrained environments
If done properly, can be very efficient: good garbage collection schemes allow much more efficient memory utilization than the usual memory micro-management common in C programs If done properly, can be very efficient: you can take advantage of the hardware

Be well rounded: know how to do both!

Topics in Systems Programming

This list isn’t intended to be complete, just informative:

Further Reading

Wikipedia has articles on systems programming and system software.