Showing posts with label software development. Show all posts
Showing posts with label software development. Show all posts

Monday, July 07, 2025

The past and future of software development (ChatGPT)


 Seven Ages of Code — and the Next Act

The history of programming is less a straight line than a series of tectonic jolts. Move the cursor back to 1945 and you find pioneers standing ankle‑deep in solder and paper tape; fast‑forward to 2025 and an LLM is finishing your functions before you’ve hit the semicolon. Here, then, is a whistle‑stop tour through the shifts that truly rewired the craft, followed by a glimpse of the near horizon.


1. Valve‑Age Hand‑Coding (1945‑1956)

The beginning was literal wiring. Programs were patch‑cords and relay banks, bugs were singed fingers, and “debugging” meant a screwdriver, not a pull request. Code, insofar as it existed, was written in octal and punched into tape that stretched like an endless rosary of regret.

2. Compiler Dawn (1957‑1969)

John Backus's FORTRAN and Grace Hopper's COBOL pried open abstraction’s door: algorithms could now be written rather than etched in metal or listed in arcane symbology. Portability entered the lexicon, and the idea of the same program running on two different machines felt almost deliciously heretical.

3. Structured Republic (1970‑1984)

Enter Pascal, C, and the polemic against goto. Unix spread across academia like an amiable virus, interactive editors replaced card decks, and the terminal became a second home. Programs at last resembled prose—albeit prose punctured by semicolons.

4. Object & GUI Renaissance (1985‑1994)

Smalltalk‑80, C++, and the graphical interface shifted focus from procedures to things. The mouse scurried across the desk; windows overlapped like office gossip. Codebases now modelled business domains—and occasionally the programmer’s own ego.

5. Internet / Open‑Source Insurgency (1995‑2004)

The web blew the walls off the lab. “View Source” was the new textbook, Agile the new catechism. LAMP, Python, and CVS → Subversion (version control systems) armed a million hobbyists. Release cycles shrank from calendar years to coffee breaks.

6. Git & Cloud Frontier (2005‑2014)

Linus Torvalds gifted Git; Amazon rented out the data‑centre aisle by the hour. GitHub turned version control into a social network and Continuous Integration into a reflex. Software escaped the rack and found sanctuary in the ether.

7. Container‑Native Era (2015‑2021)

Docker boxed applications like so much takeaway, Kubernetes orchestrated fleets of them, and “Infrastructure as Code” became the mantra. YAML files bred like rabbits; post‑mortems became the weekly book club.

8. The Copilot Moment (2022‑2024)

Large‑language models—GPT‑4 and its cohort—took the boilerplate bullet. Surveys show 70‑plus percent of developers now lean on AI to draft, refactor, and test. The keyboard has acquired a ghost, and that ghost is chatty.


What Happens Next (2025‑2030)

Autonomous Spec‑to‑Deploy Pipelines
Declare intent; an orchestral suite of agents designs, codes, provisions, and tests. Humans sign off where risk or regulation demands a pulse.

Verification by Default
Formal methods, once the province of spacecraft, return to Earth. If an LLM can discharge SAT‑solver proofs faster than you write unit tests, you’ll let it. Bring it on!

Domain‑Trained Copilots
Generic models give way to boutique brains: fintech copilots fluent in COBOL derivatives; gaming copilots that dream in shaders; parish‑finance copilots versed in XBRL (eXtensible Business Reporting Language)
.

Self‑Maintaining Repos
Your codebase files its own pull requests—shifting libraries before the CVE lands, migrating APIs, perhaps even refactoring from monolith to micro‑kernel while you sleep.

And the caveat: expertise concentrates. Junior “code monkeys” thin out; senior developers become stewards—curators of prompts, arbiters of diff, translators between automated suggestion and organisational conscience. Less Tolstoy, more conductor with a baton made of regex...

Tuesday, March 26, 2024

How Augustine Met His Wife

 


The 1980s family which might have inspired this tale


It was nearing the conclusion of the summer term when Mr. Augustine, a young man of gentle disposition and a mind for numbers, first encountered the object of his affections. Daily, he would ferry Miss Susan, a governess entrusted with the education of history, back from their place of employment. Despite their close quarters within the confines of his gig, a state of affairs lasting a full ninety minutes, their connection remained curiously platonic. Miss Susan, though pleasant enough, failed to stir even the faintest ripple in the well of his emotions. Indeed, it was a peculiar sensation, this lack of sparkle in the presence of the fairer sex.

One fateful day, however, Miss Susan presented Mr. Augustine with a surprise. Upon entering her humble abode, his gaze fell upon a vision unlike any he had encountered before. Reclining upon the sofa, as graceful as a Grecian statue come to life, was a young woman whose beauty rivaled the goddess Venus herself.

Mr. Augustine, weary of the relentless demands of his current profession, had long contemplated a change of course. The drudgery of instructing the lower echelons in mathematics, a duty bestowed upon him solely by virtue of his junior status, had thoroughly dampened his spirits. The very institution, once envisioned as a place of learning, now resembled a prison, its teachers akin to warders burdened by the constant barrage of complaints. By the year's end, the staffroom had become a haze of cigarette smoke, a refuge for weary souls coughing out their frustrations.

No longer could Mr. Augustine endure such a fate. A well-deserved vacation awaited him, followed by a path towards retraining as a software engineer, a profession promising a far more substantial remuneration. Only now, with this newfound resolve, did his life seem poised to truly begin.

The slumbering beauty was roused by their arrival. Miss Susan, ever the gracious hostess, had proposed a celebratory curry to mark Mr. Augustine's impending departure. Truth be told, his options for that evening were rather limited.

Miss Susan’s friend, while undeniably attractive, possessed a personality that leaned towards the serious, even combative. A simple remark from Mr. Augustine, expressing his relief at leaving the teaching profession, would be met with a sharp retort.

"Are you any good at mathematics, Mr. Augustine?" she might inquire, a note of challenge in her voice.

"Indeed, I daresay I possess a certain aptitude," he would reply, a hint of pride colouring his tone. "Perhaps the most adept within the department," he might add - with the silent acknowledgement that such a distinction held little weight in their current circumstances.

"Then you desert these young minds in favour of personal comfort?" she would counter, her brows furrowed in disapproval.

"My own superior," he would respond, launching into a detailed account, "was recently forced to retire due to a nervous ailment brought on by the relentless stress. I fear a similar fate awaits me if I do not make a change."

In truth, Mr. Augustine could already feel the telltale signs – a creeping detachment from reality, a dulling of his senses.

Miss Susan’s beautiful friend remained unconvinced. "So many abandon their posts," she would declare, her voice laced with indignation. "And there was that recent pay increase, one must not forget!"

While Mr. Augustine suspected such statistics might well support his side of the argument, their debate continued well into their meal, their verbal sparring as fiery as the curry itself.

It was perhaps inevitable that, amidst such spirited exchanges, an invitation should be extended. To his surprise, it was readily accepted. As he would later discover, Miss Susan's friend's arguments often served as a curious prelude to affection, a means of clearing the air before something more might blossom.

Their connection, though not one struck by lightning, was nonetheless genuine. A comfortable companionship formed the bedrock of their relationship. Beneath the surface of their playful jabs and intellectual jousting, a subtle attraction simmered. In their absences, each felt adrift, incomplete, as if searching for a missing piece.

Alas, a single, colossal argument proved their undoing, leading to a bitter parting of ways. Mr. Augustine, with a heavy heart, recorded the unfortunate event in his personal diary: "So much for that!"

Three long months passed before Miss Susan’s friend recognized the gravity of her error. A single day was all it took to rectify the situation. Given the confines of their small, bohemian community, arranging a chance encounter was a simple feat. And Mr. Augustine, never one to resist the charms of a spirited young lady, readily responded to her renewed interest.

Their tale, alas, cannot be neatly concluded with a flourish of "happily ever after." He, a creature of the intellect, found solace in the realm of ideas, thriving in his newfound profession. She, on the other hand, possessed a spirit as wild as the untamed countryside, yearning for constant motion and the thrill of encountering the unknown.

This disparity, naturally, led to clashes. Tempers flared, grievances were nursed, and reconciliations were laborious affairs. Yet, a curious truth remained: when separated for even a short while, their lives seemed drained of vibrancy, a dull ache settling where connection had once thrummed. The mere presence of one another rekindled a spark, igniting reunions with a sweetness that only absence could intensify.

With the passage of time, they learned to navigate their differences with greater grace. Theirs was a dance, a constant ebb and flow between intellectual pursuits and adventurous expeditions. Perhaps not a conventional happily ever after, but a harmony born of acceptance and a deep-seated affection that defied easy categorization.

One sunny afternoon, as their children embarked on the tempestuous journey of adolescence, Augustine turned to them with a twinkle in his eye. "As for the finer details of our courtship," he declared, "that, my dears, is a tale best left to your mother. Good luck prying it from her!"


© Adam Carlton: with thanks to Gemini Pro for moving the story 210 years backwards in time and hundreds of miles northwest to Chawton, GU34 1SD.

Friday, March 03, 2017

Diary: programming is hard!

I remember a post by James Thompson (can't find it - sorry) describing the joy of giving IQ tests to bright students. Their smug condescension as they breeze through the early items; their horror as they hit their cognitive limits and start to sweat: "Wait a mo, .., just can't seem to see it ... ."

In artificial intelligence textbooks it's standard to cover the coding of theorem provers for propositional-calculus. Hidden away in the advanced exercises is the suggestion to extend the program to cover the full predicate-calculus. Inevitably, this is flagged as hard.

Tell me about it. Today I got basic binary resolution to work. Great! I can do inference. And yet this is not the central mystery of a predicate-calculus resolution theorem prover (RTP).

The conceptual problems arise from the layers of abstraction around the proof procedure. At the risk of boring you even further, binary resolution is driven by the unification of complementary literals (basic formulae). These two literals occur in the two clauses offered to the resolution function (hence binary resolution).

A  problem addressed by an RTP comprises: assumptions  = the axioms, a set of clauses, plus the problem itself, a goal clause.

Here's my working example. First come the axiom clauses:
(defvar *c3*   (mk-fact-clause '(likes rod horvath)))
(defvar *c4*   (mk-fact-clause '(likes sally renner)))
(defvar *c5*   (mk-fact-clause '(likes sally rod)))
(defvar *c6*   (mk-fact-clause '(likes hardy renner)))
(defvar *c7*   (mk-fact-clause '(likes hardy rod)))
(defvar *c8*   (mk-fact-clause '(amusing hardy)))
(defvar *c9*   (mk-fact-clause '(likes horvath moties)))
(defvar *c10* (mk-rule-clause '(likes sally ?x) '((likes ?x moties)) ) )
(defvar *c11* (mk-rule-clause '(likes rod ?x) '((likes ?x renner) (likes ?x rod)) ) )
(defvar *c12* (mk-rule-clause '(likes ?x ?y) '((amusing ?y) (likes rod ?y)) ) )
(defvar *c13* (mk-fact-clause '(likes ?x ?x)))

(defvar *g1* (mk-goal-clause '((likes sally ?who)) ) )  ; this is the problem clause
You may notice a "Mote in God's Eye" theme here.

Despite the simplicity of these facts and rules, you'll struggle a bit to figure out the complete list of who, exactly, Sally Fowler likes.

I expect better from my program - once completed.

---

So a clause might look like this (which you will recognise as a Prolog-style Horn-clause):
'( (likes sally ?x) ← ((likes ?x ?y) (likes ?y moties)) )   ; a rule clause
which is already a bit complicated.

Then we have to set up structures for the knowledge-base (facts and rules), the goals which emerge from the resolution process, and the pointers and bindings which allow a reconstruction of proofs.

---

In telling you this, my intention is not to document the program, my point is more psychological.

You need to keep a very great deal of abstract structure in your head simultaneously if you hope to put this not-entirely-trivial program together. Plus lots of functions.

It's very g-loaded, much like doing mathematics.
"It's quite hard getting figures but ... it appears that the average IQ of students applying for PhD programmes at good universities in computer science is around 128.

"That sounds right to me. Most software development companies don't take people without good first degrees or a higher degree in a STEM subject - and that's just the pool we're talking about here."
---

Parenthetically, thank God for Lisp, a gift from the deity for clear, conceptual, exploratory thinking.

---

I read endless texts in the media from innumerate journalists about how unemployed or newly-redundant workers are going to retrain as software developers. Those writers couldn't hack it themselves and sadly, neither will most of those no-longer-required workers.
"Wait a mo, ..., just can't seem to see it ... ."
At an IQ threshold of 128, we're talking about 2.5% of a population normed at 100.

A caveat. It's intellectually hard writing machine learning programs or configuring recalcitrant artificial neural nets on novel problem-domains .. or programming RTPs. Yet for everyone doing those things, there are ten people paid to use graphical web design tools or load databases, or do a bit of scripting. Things which are not that hard.

Like many occupations, there has been mission-creep in the definition of software developer.

---

And why am I making such heavy weather of this wretched theorem-prover? This.