Introduction
Grace Hopper¹, the celebrated computer scientist who developed COBOL (Common Business-Oriented Language), stated her philosophy that “programs should be written in a language that was close to English (rather than in machine code or in languages close to machine code, such as assembly languages).” In other words, the way computer engineers write code should be the same way we use language to communicate with other humans.
Using Generative AI (GenAI) takes Hopper’s tenet to a whole new level. These tools not only support natural language, they require natural language interactions. The way I am utilizing GenAI has required a sea change in my thought process. And I’m finding, at the preliminary stages of usage, that my productivity has improved by 20-30%.
I’ll discuss this more later, but for background, the tools I have used with GenAI are Microsoft Copilot, Amazon Bedrock playgrounds and Amazon SageMaker with python Jupyter Notebooks.
Planning(1) and execution(2) with testing and acceptance(3) are iterated through individually and collectively to accomplish the work. Step 2 is where the liability is the highest and most bugs live. It takes time and resources to write software.
I have found that there can be a disconnect between analyzing and developing the solution versus actually writing the code to resolve the problem. This is because the focus switches from the context of the overall coding problem to subtasks within the coding problem, i.e., logistics.
Results
Cleaner, better code. Improved documentation (ReadMe’s and GitHub Actions). More useful tests produced in an easier manner. Over time, I began to learn from Copilot suggestions. I really like that aspect as the learning felt natural. This is not to say that everything works seamlessly. It’s still possible to write/produce code that does not compile or perhaps just does not function correctly. The flip side of all the code-writing delegation that happens with GenAI is that the engineer must take responsibility for the code and its validation.
There was a clear shift to the left 🙂
Conclusion
Key takeaway: The level of abstraction that software engineers work with has once again increased with GenAI.
While there are same number of steps in the GenAI workflow, they have largely been delegated to Copilot. I now spend more of my time analyzing the code produced by Copilot than writing it myself. This is a massive change from procedural thinking to critical thinking, focused on delegation, analysis and validation. I am awestruck by how much more time I am able to spend on critical thinking and analyzing the problem I am working. A big win! I don’t need metrics to understand that this will change how we write software because it is changing how I write software — now. I am actively writing less. Turns out Copilot is really good at bash² for loops :) We are all going to become prompt engineers of one kind or another!
Resources:
- https://en.wikipedia.org/wiki/Grace_Hopper#:~:text=Hopper’s%20belief%20that%20programs%20should,ubiquitous%20business%20language%20to%20date
- https://www.gnu.org/software/bash/
- https://d1.awsstatic.com/training-and-certification/docs/AWS_certification_paths.pdf
- https://github.com/features/copilot?ef_id=k_EAIaIQobChMI84aTpZKejAMVPAKtBh1L3h26EAAYASAAEgLrs_D_BwE_k&OCID=AIDcmmb150vbv1_SEM__k_EAIaIQobChMI84aTpZKejAMVPAKtBh1L3h26EAAYASAAEgLrs_D_BwE_k_&gad_source=1&gbraid=0AAAAADcJh_uvPkbsrdnDenWjih8g91_ND&gclid=EAIaIQobChMI84aTpZKejAMVPAKtBh1L3h26EAAYASAAEgLrs_D_BwE