This week, a blog post by respected industry observer Adrian Coyler on programs, lifecycles, and laws of software evolution has me thinking about terrible app implementations and the nature of computer programming itself. Coyler’s morning paper blog routinely examines contemporary, scholarly papers on computing, but this week he summarizes a paper from 1980 that he says is “as fresh and relevant as ever.”
“The thrust of this paper,” Coyler writes, “is to shift our thinking from programming/software development/software engineering as the process by which we create a point-in-time program to implement a given procedure, and instead start to focus on a program (software system) as an evolving entity over time.”
In essence, the paper looks at the entire software lifecycle, breaking it down into discrete or abstract representations of either describing reality or describing some condition thereof. It’s some heady stuff, and as Coyler points out, you can really think on some of it for a while — for example, this definition of a program: “Any program is a model of a model within a theory of a model of an abstraction of some portion of the world or of some universe of discourse.”
More concretely, the paper breaks down programs into three basic types, S-programs, P-programs, and E-programs. S-programs, says Croyler, are “the kinds of programs that textbooks are fond of” while P-programs “are real-world problem solutions [and ] takes us into the ‘model of a model within a theory…’ territory” while E-programs “are programs that ‘mechanize a human or societal activity’” and have real-world feedback loops. The paper asserts that “it is always possible to continue the system partitioning process (of an E- or P- program) until all modules are implementable as S-programs.”
Why are we exploring these ideas? Well, they all come down to how we treat a program versus an overall project and how we apply our focus to these more discrete units of larger applications. Do we view an application as a single thing that exists at one point in time? That can ever be complete and still? Or do we view it as something continually moving along an axis of change?
The paper goes on to offer the “laws of program evolution” that Coyler says can then be used to guide longer-term planning processes in software.
At stake here is even the nature of what, exactly, it is that programmers do, and both the paper and Coyler himself take a stab at that definition:
What does a programmer do? A programmer’s task, according to Lehman, is to “state an algorithm that correctly and unambiguously defines a mechanical procedure for obtaining a solution to a given problem.” Although if I had to write a Devil’s Dictionary entry for ‘programmer’ then I’d be tempted to write something more like: “Someone who builds castles in the air, wrangles data in varied and nefarious formats, fiddles with CSS in a never-ending quest for alignment, and navigates labyrinthine mazes.”
Whatever it is you developers do, at least we know we can usually pick you out in a crowd.
*sits down on the plane*
Guy next to me: "So, you're a developer?"
Me: *blinks* What gave you that idea?
"Purple hair, headphones, two laptops, a tablet, two phones, multiple caffeinated beverages. I've met a developer or two in my time."
— Ian Coldwater (@IanColdwater) February 11, 2020
This Week in Programming
- A GitHub CLI Appears! It’s a struggle as old as Windows versus DOS — the desire to go beyond the GUI and its limited functionality to use the command line and be able to do anything and everything you want … as long as you can remember all the commands. Well, for those of you GitHub users who are on the side of the command line interface (CLI), today’s your day as GitHub has announced that the GitHub CLI is now in beta and available on macOS, Windows, and Linux. For now, the CLI comes with limited functionality, but it can handle the basics: creating pull requests, checking out pull requests, viewing the details of an issue, and more. For full details, check out the manual or take a peek at the introductory blog post, which offers examples. Since the project is still in beta, GitHub is looking for your feedback, either by creating an issue in the open source repository or providing feedback via Google form.
- GitHub Goes to India: For those of you who are GitHub users residing in India (the third-largest group of active developers on GitHub, according to the blog post), GitHub has launched GitHub India, a subsidiary of GitHub. The newly launched subsidiary will help cater to the rapidly growing community there, which GitHub says has grown to “over 40 million developers across more than 100 million projects.” As part of the launch, GitHub Education will also be extending the GitHub Hackathon Grant program to students in India, and the company’s channel partner program will be expanding there as well. To follow more closely, give @GitHubIndia a follow on Twitter.
- GitHub Enterprise for Free & Enterprise Server 2.2: Last up for GitHub news this week, the company announced that GitHub Enterprise is now free through Microsoft for Startups, which is a free program that helps startups with services, software, and other benefits that you can apply to here. Participants receive $1,000 of monthly credit for up to two years of GitHub Enterprise Cloud. And speaking of enterprise, GitHub Enterprise Server 2.2 has launched, which brings with it expanded branch protection rules, a personal audit log page, and the ability for administrators to run an optional migration script to convert all public repositories into internal repositories.
I run kubernetes in production. Ama pic.twitter.com/GiFztFfqXR
— memenetes (@memenetes) February 11, 2020
- TypeScript 3.8 RC: Speaking of the ECMAScript ecosystem, TypeScript has a release candidate for TypeScript 3.8, and InfoWorld has a write-up on what’s new. Rest assured, they mostly relate to types in various forms and fashions. The general release is expected later this month or in early March.
— Jasmine Hull 🧘🏽♀️🌙 (@mooncodeflows) February 13, 2020
- Where Did Git Come From, Anyways? The world of software version control has come a long way. These days, GitHub and GitLab go so far beyond the original vision, calling them “software version control” is far too limited a term to be truly applicable. In the interest of knowing our roots, I submit to you an article that came across the feeds this week that looks at the history of Git, following the project from its creation by Linus Torvalds in 2005 to GitHub’s acquisition by Microsoft in 2018 and beyond.
- USB Chargers Could (Theoretically) Get Us To Space: Just another quick anecdote in the tale of “we’ve come really far in the world of computing” with this comparison of the Apollo 11 Guidance Computer vs. USB-C Chargers. That phone charging cable you have sitting there? According to this quick little comparison, just four of them might have enough computing power to replicate that of the Apollo 11 guidance computer. “I think it is healthy to compare historical and modern computing,” the author writes. “Let’s see how the CPUs contained in recent USB-C wall chargers compare to the power of the Apollo 11 Guidance Computer (AGC). The Apollo 11 spacecraft carried 3 humans to the moon and back in 1969.” Spoiler alert, the Anker PowerPort Atom PD 2 USB-C Wall Charger CPU was found to be 563 times faster than the Apollo 11 Guidance Computer, with twice the RAM, so, before you go blaming the hardware as a limitation, just keep that in mind.
And you think you're a big deal because you can ssh into your container…https://t.co/s4L9yYR6MU
— Mat Velloso (@matvelloso) February 7, 2020