This morning, as I filled up my car with gas priced at $4.55 per gallon, I couldn’t help but grumble about the continual rise in prices. However, my thoughts quickly shifted to the intricate process involved in getting that six pounds of volatile liquid to me, especially considering the significant role software plays in every step of the journey.

From analyzing geological data to managing drilling machines to ensure they operate efficiently and safely, software plays a crucial role in the extraction process. It also assists in tracking weather conditions and guiding the transportation of fuel via massive ships, while simultaneously managing refinery operations and ensuring safety protocols are followed. Furthermore, software facilitates payment transactions and oversees pump operations to deliver the fuel into my car.

Beyond the operational aspects, there’s the monumental task of developing and maintaining the software itself. Writing software to locate fuel underground is not a simple task; it requires specialized software engineering tailored to industrial needs. Moreover, advancements in artificial intelligence likely play a significant role in assisting software engineers in this complex process.

Reflecting on the broader implications of AI in software engineering, I feel a mix of excitement and apprehension. AI represents a transformative force, akin to a “nuclear” moment for the field, ushering in unprecedented capabilities. However, this power also comes with a profound responsibility, as it has the potential to both create and destroy. As we navigate this intersection of generative AI and engineering, it’s essential to tread carefully and thoughtfully consider the implications of our technological advancements.

gettyimages-1320779980

To truly grasp the role of AI in software engineering, it’s essential to start with an understanding of software itself.

Software serves as the command center for computers, whether it’s a desktop PC or a microprocessor embedded in industrial equipment. In its simplest form, software consists of a series of instructions that direct the computer’s actions.

Programming, often referred to as “coding,” involves crafting these instructions to achieve specific outcomes. For instance, I oversee a program enabling donations to nonprofits, which comprises a staggering 153,259 lines of code. Larger programs like Windows or Linux can extend into hundreds of millions of lines. The sequence and structure of these instructions dictate how the program behaves — accuracy yields the desired outcome, while errors can lead to unpredictable results.

Now, let’s delve into programming languages. These languages provide the syntax for creating programs. While you may be familiar with popular languages like C, Java, or Swift, there are countless others. Despite their diversity, different languages can achieve similar results. Much like a recipe for lasagna written in Italian or English, the end goal remains the same — it’s just the language that differs.

Choosing a programming language depends on factors like task suitability and compatibility with the target environment. Since mastering every language is impractical, many programmers stick to those they’re familiar with. It’s important not to fixate solely on languages; they’re merely the building blocks used to construct code.

Programmers weave together these computer instructions to make things happen. However, the sheer volume of instructions — like the over 100,000 in my donation software alone — introduces complexity and potential for confusion and errors.

This is where software engineering comes in:

  • Software engineering applies scientific methods akin to bridge construction to design and test software.
  • It emphasizes a structured approach akin to architectural planning before construction begins.
  • Just as engineers adhere to best practices for sturdy structures, software engineers ensure reliability and efficiency in their creations.

Imagine entrusting your life to software while cruising down the highway at 70mph. You’d want assurance that the software was rigorously engineered and tested, not hastily assembled by a coder fueled by pizza and energy drinks.

There’s an overlap between coding and software engineering; as a trained software engineer, I possess coding skills. Developers, whether individuals or companies, create software products using a blend of coding, software engineering, and business development expertise.

Ultimately, software engineering underpins coding, rendering it manageable, maintainable, and reliable. It’s this discipline that ensures the software driving innovation is robust and dependable.

From a technical standpoint, software encompasses anything that processes data using bits and bytes, as opposed to relying solely on hardware. For instance, while an Excel budget spreadsheet is considered less “software-y” than the Excel program itself, particularly if it doesn’t include macros or function as a standalone software application, it still falls under the umbrella of software.

Traditional software development revolves around specifying a series of steps and decisions. If you’re writing code by outlining these steps and decisions, you’re essentially following traditional programming practices.

However, artificial intelligence (AI) operates differently. Unlike traditional programming, where steps and decisions are predefined, AI leverages data—often vast amounts of it—to inform its outputs.

When you request ChatGPT to generate an article on IT infrastructure or use Midjourney to create an image of a flying elephant emerging from a laptop, it’s not because someone wrote specific code to handle these requests. Instead, AI systems like these utilize large language models (LLMs) that draw from extensive libraries of data, including the entirety of the internet and additional information provided by AI engineers.

This reliance on data-driven approaches sets AI apart from traditional software. Furthermore, the emergent abilities of AI, features that weren’t explicitly programmed into the system, add another layer of complexity. As a result, it’s challenging for humans to precisely understand why AI systems produce certain outputs.

AI also challenges traditional engineering disciplines. Predicting the behavior of AI systems and guiding their outputs, known as “prompt engineering,” involves elements of management and negotiation in addition to traditional engineering practices.

As someone with experience as a programming professor, interacting with LLMs like ChatGPT feels more akin to engaging with students rather than conventional coding environments. The dynamic nature of AI introduces a new paradigm that extends beyond traditional programming methodologies, paving the way for innovative approaches to problem-solving and creativity.

As AI becomes increasingly mainstream, we’re witnessing a potential symbiotic relationship between software engineers and generative AI tools. These tools offer a range of capabilities, including suggesting code optimizations, identifying bugs, and even predicting the consequences of system changes.

Earlier this year, I experimented extensively with AI, conducting what I call “stunt coding” to explore its capabilities. I utilized AI to assist in finding complex bugs, identifying code requiring updates for compatibility with newer platform versions, writing routines for my wife’s business, and creating a Chrome bookmarklet to streamline my work on ZDNET articles. While AI hasn’t become indispensable to my workload, it has certainly been a valuable asset.

It’s worth noting that the generative AI tools receiving attention lately were developed by software engineers themselves. AI is both a part of the software engineering process and a product of it.

Moreover, AI has the potential to enhance various aspects of software engineering, including design, coding, debugging, maintenance, management, testing, distribution, and migration. For example, AI can automate repetitive coding tasks, predict potential bugs or vulnerabilities, assist in setting up testing procedures, and even aid tech support personnel in answering queries.

However, there are limitations to AI’s current capabilities. While it excels in some areas, such as identifying errors in problematic code, it can struggle with more complex tasks. It can be likened to a talented yet occasionally unreliable college student who occasionally provides brilliant insights but doesn’t consistently deliver accurate answers.

Furthermore, AI’s impact extends beyond software engineering into various real-world applications:

  • Personal assistants like Siri, Alexa, and Google Assistant aid in tasks and provide information.
  • Healthcare algorithms aid in disease diagnosis and patient outcome prediction.
  • Financial analysis tools assist in stock trading and fraud detection.
  • Content recommendation algorithms suggest media based on user preferences.
  • Customer service chatbots handle customer queries and complaints.
  • Manufacturing robots assist in assembly lines and quality control.
  • Language translation services utilize AI.
  • AI enhances gaming experiences, making games more interactive and compelling.
  • Security systems employ AI for facial recognition and anomaly detection.
  • Marketing algorithms personalize ads and customer outreach.

Looking ahead to the next decade, AI is poised to revolutionize various sectors:

  • Advanced healthcare may involve AI-assisted drug discovery and personalized medicine.
  • Climate modeling could help predict and mitigate climate change effects.
  • AI with emotional intelligence could read and respond to human emotions.
  • Advanced robotics may perform complex tasks and aid daily life.
  • AI-powered virtual reality could offer immersive experiences.
  • Education systems may provide personalized learning experiences.
  • AI could assist in space exploration by navigating spacecraft.
  • Legal assistance through AI in legal research and case preparation.
  • AI-generated art and music may enhance creativity.
  • AI could improve public safety through disaster prediction and response.

Additionally, AI is enhancing communication in self-driving cars and improving smartphone camera performance, showcasing its pervasive influence across various domains.

In essence, like software, AI is becoming embedded in everything we use, potentially adding value across the board.