The Evolution of Developers: From Humans to Machines
Written on
Chapter 1: The Role of Developers Through Time
In the not-too-distant future, I can envision myself recounting to my grandchildren that I once worked as a developer for IBM.
“What do you mean you were a developer? I thought developers were machines!”
“Well, a long time ago, people were the ones who created software, and they were called developers.”
“Oh my gosh, Grandpa, you’re so ancient!”
— Me, twenty years from now
Just as the term "computer" originally referred to human calculators, I foresee the term "developer" being completely replaced by machines, likely through a blend of AI, Large Language Models (LLMs), and quantum computing.
Many discussions have surfaced regarding the risks associated with AI, particularly as we transition to new computing paradigms. However, I view this shift as a natural evolution of technology and an opportunity for substantial advancement, rather than something to fear.
With every technological leap comes a degree of uncertainty and anxiety; yet, it also provides a chance for introspection, personal development, and progress. So, let’s take a moment to breathe, confront our fears, assess our growth areas, and tackle these changes together, shall we?
To grasp our current transition, we must reflect on the historical evolution of computing roles, beginning with human computers and leading to today’s developers, before examining how these roles are poised to change with the rise of advanced technologies.
“You can't connect the dots looking forward; you can only connect them looking backward.”
— Steve Jobs, Commencement Speech, Stanford University, June 12, 2005
Historical Context and Transition
Remember, the term “computer” was once a job title.
At the dawn of the 20th century, those skilled in mathematics had several career paths available. For the exceptionally talented, a role as a human computer awaited, where one would manually perform calculations for scientific and engineering purposes.
Typically, you wouldn’t work in isolation; you’d likely be part of a larger team of human computers, all striving for accuracy in their simultaneous calculations.
Exciting? Perhaps not. Additionally, this role was one of the few technical fields that permitted women to showcase their mathematical talents. Imagine how many more contributions could have been made if women were acknowledged as equals in the scientific realm at that time! But that’s a narrative for another day.
Achieving the title of Computer meant prestige and a career.
Behold, the Computer Programmer
With the advent of electro-mechanical computing machines, who better to guide these devices than those who previously managed the tasks manually?
New technology brought forth the need for new skills, necessitating a method to relay instructions to the machine regarding what actions to perform. A programming language was essential to facilitate this communication.
Those who would operate these machines had to learn to articulate their requirements in a language the machine could comprehend, translating the needs of engineers or scientists into actionable commands.
Scotty: "Computer."
(McCoy hands Scotty a mouse, which he mistakenly thinks is a microphone.)
Scotty: "Ah. Hello, computer."
Researcher: "Just use the keyboard…"
Scotty: "Keyboard. How quaint!"
— Star Trek IV: The Voyage Home (1986)
The Evolution of Programming
As understanding of computing operations deepened, standardization emerged, resulting in general programming languages that required conversion to machine language for effective computer control.
Over time, programming concepts flourished, allowing greater separation between high-level instructions and low-level machine language. This enabled programmers to creatively exchange ideas, relying on compilers to convert their high-level instructions into precise machine code.
Various specialized languages, compilers, and hardware platforms emerged. With the introduction of AI and LLMs to high-level development, the gap widened even further between high-level programming and low-level instructions. Developers soon found they could simply converse in everyday language with a system to generate code that met specific requirements.
The Future: Developer Programming
Prompt Engineering serves as a precursor to developer programming. In this process, a developer crafts a text prompt, leveraging knowledge of common patterns to extract the necessary text, code, or data from an LLM system. As many users of LLMs can attest, achieving the desired output often requires multiple iterations.
When using an LLM for coding solutions, a developer may sift through numerous versions of the generated code until they find an acceptable result or decide to discard it in favor of a new approach.
So, who is actually writing the code?
Currently, these tasks are often performed randomly, lacking a universally accepted standard for processes or outputs, leading to what sometimes appears to be a collaborative effort between a human and a machine developer.
With a slight shift, we will transition into the era of developer programming. This involves clearly articulating our needs and allowing a lower-level system to produce the required output.
As programmers, we typically possess skills in:
- Languages
- Patterns
- Architecture
- Testing
- Security
Equally vital is the ability to listen—to both humans and machines—to fully comprehend the issues at hand, the feedback received, and the outcomes produced.
As we shift towards a model where AI systems handle low-level tasks, our skills must evolve toward instruction, listening, and comprehension.
A Developer Programmer as an Executive Chef
We will transition from a meticulous process of crafting code akin to children's story authors to a more systematic approach resembling that of an executive chef. In this new paradigm, an executive chef can create a dish with the desired taste and texture through a deep understanding of culinary processes and ingredient interactions.
Just as an executive chef can succinctly convey information to a sous chef to produce a dish that meets specific quality standards, a developer programmer will similarly communicate software requirements to a machine developer, ensuring the desired software outcome.
The quality of the final software product depends not only on the developer programmer's depth of knowledge and communication skills but also on the training and experience of the machine developer.
Just as an executive chef bears ultimate responsibility for the dishes served, the developer programmer will also be accountable for the software’s quality before it is delivered to clients.
What Defines an Exceptional Developer Programmer?
Drawing inspiration from Zoltan Kodály's perspective on musicians, I propose similar qualities for an excellent developer programmer:
- A finely tuned ear for detail
- Strong analytical skills
- A compassionate heart for understanding
- Skilled hands for execution
Change is on the Horizon
The engineering, language, and listening skills we need are already within our grasp. The most significant transformation required is in our mindset.
We must rethink how we approach engineering and problem-solving. How do we effectively utilize the new tools and innovations at our disposal? Are we considering the broader implications and the technological evolution we are part of?
Are we envisioning a sufficiently expansive future?
The individuals who initially executed calculations were among the first to program the earliest electro-mechanical computers, suggesting that today’s software developers may be the pioneers in harnessing machine developers for software creation.
What skills will be necessary in this new landscape?
As we embrace change, self-reflection will empower us to confront the unknown with knowledge rather than fear, ultimately enhancing our capabilities.
Change is coming—let's embrace it!
Thank you for engaging with my narrative! If you found it intriguing, you might also enjoy this:
Chapter 2: The Impact of AI on Development
In this chapter, we will explore how artificial intelligence is reshaping the landscape of software development and what it means for future developers.
The first video titled "Are Junior Developers DOOMED in This Job Market?" discusses the challenges faced by new developers in a changing job landscape.
The second video "Why Great Developers DON'T Create Content (and a lesson to learn)" provides insights into the reasons behind the lack of content creation among skilled developers.