8 ms·
What Is Systems Programming, Really? (2018)
- deleted 4y ago[deleted]
- legerdemain 4y agoWill makes a dubious claim to support a dubious distinction. Plenty of large, complex infrastructure is written in Python. > Dynamic programming languages are arguably still far from systems languages, > since dynamic types and idioms like “ask forgiveness, not permission” are not > conducive for good code quality. I find it amusing that, when asked to give a defining characteristic of systems programming, key figures behind C++, Rust, D, and Go gave radically different and unrelated answers: "client applications," "resource-constrained applications," "cloud infrastructure," and "unsafe pointer casts." If anything, a more practical definition is "only C and C++ are systems programming languages, by fiat, because it's an artificial category whose historical roots have long since lost pertinence."
- grumpyprole 4y ago> Plenty of large, complex infrastructure is written in Python. shudders
- fsckboy 4y agoI liked much of your critique, but you completely lost me with your last para. Systems programming is about adjudicating contention for system-constraints and system constrained resources. It's about creating relatively clean interfaces to relatively thorny problems. It's only lost apparent pertinance because of the explosion in numbers of people "coding" web front ends or other things at the top of the stack, and because the code that solves some of these problems is well understood and complete. But underneath all what we do in the various userspaces is the same and even greater complexity of problems which require maintenance and development/porting to new architectures as they get developed
- cafard 4y agoI think that the big iron definition was "using BAL [basic assembly language?] on IBM hardware." Anyway, I knew a guy in the 1980s who described himself as a systems programmer, and as far as I know that was what he did.
- namaria 4y agoThe expression is redundant isn't it? Only systems can be programmed. You can't program a cinder block or a cardboard box. I think this is just an early way to say 'software development' and people got caught up on their own mental images of what 'systems' are to them.
- Jiocus 4y agoI kinda see what you mean, but systems is an exceptionally vague term. Popular use and even the formal field of Systems Science is hardly more related to computing than any other area of society. Everything programmed are systems but not all systems are programmable
- namaria 4y ago>but systems is an exceptionally vague term. I don't understand the use of but here. This doesn't contrast with what I said. >Everything programmed are systems Then 'systems programming' is a redundant turn of phrase. You don't say you're 'food cooking', while there are foods you don't cook.
- Jiocus 4y ago> I don't understand the use of but here. This doesn't contrast with what I said. I meant that I don't agree with your sense of the word 'system', as clearly and obviously referring to software development. Of ourse, if paired up with the words 'development' or 'programming', the association is there. Still, the following titles reads to me as very different occupations: - Systems Programmer (low-level, bare metal) - Systems Engineer, (e.g. aeronautics, robotics, banking, requirements) - Systems Developer (business domains, processes & people, services) biases all mine
- mtlmtlmtlmtl 4y agoI always figured it was just a shorter version of operating system programming.
- amelius 4y ago
- david2ndaccount 4y agoUltimately, the author comes to a dubious conclusion by ignoring the context. By studying what people were writing about in the 70s, he also ignores the context - it was a given that any program of significant size or of a fundamental nature would compile (efficiently) to machine code. The hardware was too weak to support anything else. A language that didn’t satisfy certain performance criteria wouldn’t even be a contender.
- vitiral 4y agoHis odd conclusion being that ML languages like Haskell are "systems programming." I thought the rest of the article was mostly interesting, but how that could possibly be your conclusion is a bizzare mystery. My guess is he wrote the conclusion before the research and got the cart before the horse.
- g42gregory 4y agoPerhaps from my limited AI-centric point of view, I have a simple definition of Systems Programming: when I hit enter and run Python/C/C++/Java program, what actually happens? In AI, we think of mathematical algorithms, but computers do not understand math. Math is a purely human invention, computers have no idea of math. Nor computers understand Python or C. The only things CPUs are designed to understand are 0s and 1s, quite literally. It's a very long road, and lots of layers of abstractions, from 0s and 1s to Python (or C for that matter). This long road is Systems Programming to me and I find it quite fascinating. To do Systems Programming, I would think you want direct access to hardware, to the metal itself. C and C++ (some other languages? C#?) provide such an access. Python (or Java) does not provide such unfettered access to the hardware. Having said that, I find author's assertion, that "Dynamic programming languages ... are not conducive for good code quality", both inaccurate and irrelevant to the System Programming assessment.
- anonymous_sorry 4y ago(some other languages?) Assembly, of course. `unsafe` rust.
- g42gregory 4y agoRust - absolutely, for sure! In terms of Assembly, it's incredibly difficult to write an efficient Assembly code these days, especially in a multithreaded, multicore environment. In such environment, as humans we just can't compete with compilers any more. Reading and analyzing assembly code from C/C++, - sure that's absolutely necessary. Writing an assembly code from scratch, better than compiler? I am sure people do that but that's ... quite hard.
- anonymous_sorry 4y agoYes, but there are parts of the CPU instruction set which a compiler won't ever emit. If you are using those features, as certain low-level systems must, then you use assembly (typically shortish snippets called from a compiled program).
- skissane 4y agoIn IBM mainframes, "systems programmer" (sysprog) traditionally means "system administrator". Part of the reason for that, is a systems programmer was expected to be accomplished at assembler, which was used to write user exits (to customise the behaviour of the operating system to meet the needs of each site) and even patches to the OS code (SYSMODs). Operators were responsible for day-to-day running of the system (startup, shutdown, mounting and unmounting tapes and removable disk packs, changing forms in printers, starting jobs, resolving minor technical problems). Sysprogs were responsible for installation, configuration, customisation, upgrades, troubleshooting more complex problems, etc. Over time, the need to customise the code of the OS declined, and IBM made the OS much harder to modify by taking away customer access to source code (IBM's 1983 "Object Code Only" announcement) – so contemporary IBM mainframe system administration involves much less programming than it used to, but the name has stuck. Also, you no longer have to write user exits in assembler – C is supported (e.g. using IBM Metal C), as is PL/X (if you work for IBM, or one of the small handful of ISVs who ordered IBM's PL/X compiler during the brief period they were offering it to them)
- lordnacho 4y agoI think when someone says systems, they mean computer systems. So the kind of things you're interested in are ultimately computer words like drivers, memory, threads, interrupts, queues. If that's your general level of abstraction you're system programming. Higher level languages are something like an e-commerce website. You're talking about views, orders, auth, accounting, etc. Of course they connect at some level but you're generally thinking about some business level that isn't in terms of computer words.
- mindcrime 4y agoTo the extent that there is a real distinction between "Systems Programming" and "Whatever is not Systems Programming" and to the extent that this distinction matters, I tend to align with the take espoused in the Systems Programming[1] Wikipedia page: The primary distinguishing characteristic of systems programming when compared to application programming is that application programming aims to produce software which provides services to the user directly (e.g. word processor), whereas systems programming aims to produce software and software platforms which provide services to other software, are performance constrained, or both (e.g. operating systems, computational science applications, game engines, industrial automation, and software as a service applications). That is to say, the distinction I consider to be somewhat meaningful is between "Systems Programming" and "Application Programming", and I think this expresses the most salient aspect of the difference: application programming aims to produce software which provides services to the user directly (e.g. word processor), whereas systems programming aims to produce software and software platforms which provide services to other software But is all of this terribly important? Meh. I am not convinced that it is a terribly important distinction in most day to day contexts. And that's at least partly because the lines do seem to be a bit hand-wavy, subjective, and fuzzy. [1]: https://en.wikipedia.org/wiki/Systems_programming https://en.wikipedia.org/wiki/Systems_programming
- mibollma 4y agoMy personal distinction is that application programming is more selfish, not interested in most other parallel applications whereas systems programming needs to take a more global view to ensure the system serves sufficient resources to all applications
- bluetomcat 4y agoIt is a meaningful distinction. A mobile, desktop or a web app solves a problem for the end user and should be under their control via commonly-understood UI metaphores and IO mechanisms. A systems program is a background service or a tool that provides the underlying abstractions for applications to run. An application programmer operates with well-defined APIs and, in general, should not be concerned with storage mechanisms, concurrency issues and resource management.
- DeathArrow 4y agoFor me "systems programming" is just low level programming. You do it when you need to access the hardware, when you need performance. It seems a lost art. When I learned Pascal, C and C++ during high school most of my peers were learning and using these. Until early 2000s most of the software facing end users was quite low level because there was no way around it, people needed software that was fast enough. Even if today I use mostly a garbage collected language and I am abstracted away from the language, I find my days and years of using C and C++ quite rewarding because I understand how the hardware works, what are the trade-offs when taking one decision and what is the path forward if I want to have decent performance.
- bluetomcat 4y agoSystems programming is when you break-out from your shiny MVC API and libraries, and start reading section 2 of the Linux/BSD manual. When you start caring about process and thread affinity, memory allocation patterns, CPU cache performance, etc.
- amelius 4y agoAnd the GPU. This is why a "systems" programming language makes no sense. You need many languages to address all the different kinds of hardware in your system.
- ungamedplayer 4y agoAssembly as a language meets all of these requirements. Is there an exception that assembly of some type doesn't meet ?
- randomdata 4y agoYet an operating system is at a higher level, above the kernel. Traditionally, systems have been the middle ground between the low level and the high level. But ultimately words only mean what ever you define them as in the moment, so system can mean anything you want it to, so long as that meaning is conveyed to others needing to understand how you are using the word.
- eimrine 4y agoAs someone who speaks English poorly but has a little bit of experience with the subject, I surprised the proper name is systems programming, not system programming. Why it is so?
- switch007 4y agoI think because it sounds acceptable/nice, people use it. I don’t think anyone can say which is the “proper” name. Same debate happens with system(s) administration/administrators. It’s subjective and subject to pedantry
- jmull 4y agoI think it's "systems" because it's programming components to be used to build systems, not the programming to create a particular system. You're programming something to be used in systems.
- varjag 4y ago"systems" as in "computer systems"
- NoNameHaveI 4y agoIf you think the term "Systems Programming" is problematic, try "Computer Science". I have seen the term "Computer Science" applied in multiple college catalogs to MS office!
- aa-jv 4y agoI'm surprised to see a complete lack of application of the OSI model to answering this question. Systems programming is what happens when you apply the OSI model to the interconnections required for you to have a happy user, using your application. Oh, that's too simple, I hear you say! Not at all. The model just gives you the harness you need to grasp the complexity. If you're not "OSI ALL THE THINGS!" you didn't quite get the memo that the network is the computer, and thus "ALL THINGS ARE OSI'able!" The model was developed during the network era, but has been discovered broadly through wide application that it is applicable to all systems interconnection. https://en.wikipedia.org/wiki/OSI_model https://en.wikipedia.org/wiki/OSI_model When you traverse the OSI layers successfully, identifying and creating the components relevant to the layer interconnects, you are a systems programmer.
- edding4500 4y agoBy definition, a system is something comprised of multiple parts that build a whole. Thus systems programming would be combining and architecturing systems out of other parts, making them connect, designing interfaces etc?!
- tony-allan 4y agoIn the IBM Mainframe world [1]: The ABCs of IBM® z/OS® System Programming is a 13-volume collection that provides an introduction to the z/OS operating system and the hardware architecture. Whether you are a beginner or an experienced system programmer, the ABCs collection provides the information that you need to start your research into z/OS and related subjects. ... 2.1 The role of the system programmer The role of a system programmer is broad, but essentially it is to maintain a stable operating environment for users and business applications. A system programmer’s responsibility can be at the operating system level, at the subsystem or middleware level, or at the hardware level. A system programmer installs, customizes, and maintains that environment by rolling out regular maintenance or even upgrading the entire environment to keep current and use new functions. Another part of the system programmer’s responsibility is to provide technical support to the users of the environment. This support can be answering questions about a product or analyzing a potential defect in the product (IBM or third party). [1] https://www.redbooks.ibm.com/abstracts/sg246981.html https://www.redbooks.ibm.com/abstracts/sg246981.html
- kirilian 4y agoI have a degree in systems programming (BSc). So at least some people thought of systems programming as consisting of: * Lots of pretty low level programming. OS level stuff and raw network programming. * Low level database and data storage skills in all levels. Programming, database internals like optimizers and storage engines. * All aspects of networking; TCP/IP, other protocols, physical level, routing protocols and lots of socket level programming in Unix. * Operating system internals.
- tkiolp4 4y agoThe difference is that Systems programmers believe they are better (i.e., more skilled) than Applications programmers. Just like infrastructure engineers think they are better than backend engineers think they are better than fronted engineers think they are better than designers. Of course this is a generalization, but holds surprisingly true.
- arsome 4y agoLow-level programming is definitely more meaningful, the problem is it fails the HR speak test - they tend to think it means just not very strong programming. Basically, don't put that on your CV unless you know the company doesn't filter resumes through HR and has somewhat technical management.
- jmull 4y agoTo me, it's "system software" when it's intended to be a building block for other software. The important implication of this is that various potentially important requirements are unknown. Performance, load, memory, scaleability, regulatory, security, platform, CPU, etc. If you're successful, your users (developers of apps or higher-level systems) will be using your software in ways and for purposes you can only partially know. You have to deal with that somehow. Maybe you can design your software to be agnostic to a concern (e.g. if your protocol uses a TCP stream, your users can adopt SSL as needed). Maybe you optimize for the concern as much as is feasible (this is why performance is such a concern for "systems programming languages... there is no acceptable level of performance, you want the performance overhead to be as small as feasible. Maybe you miss a concern that is important to your potential users and fail.
- Ingaz 4y agoIMO the best answer is Alexandrescu: "A systems programming languages must be able to allow you to write your own memory allocator in it." Without any philosophy, clear and concise.
- PeterWhittaker 4y agoApplication programming: bug affects user. System programming: bug bricks box. :-)
- Lammy 4y agoI always thought Systems Programming == using syscalls, even if done in an interpreted language. Not sure where I picked up that definition or if anyone actually shares it.
- vitiral 4y agoWell, a systems programming language (for one thing) should be able to write the code that actually _executes the syscall_, i.e. it implements the OS
- up2isomorphism 4y agoThis guy trying to define something by just undefining it. Is this a new type of BS? And OCaml is more system oriented than C? He does not even know why so many people are using C for system programming.