Introduction
When I was in college a while back I took a class on AI. I didn’t know much about AI at the time but it seemed like the new hotness (somethings never change). The book for the class was Artificial Intelligence by Elaine Rich.The AI back then wasn’t the AI we have today. AI back in the nineties was about problem spaces, heuristic search algorithms, knowledge representation/systems and a chapter on neural networks, called connectionist models at the time. Most everything was written in Lisp. At least the class I took used Lisp, specifically the Steel Bank Common Lisp implementation.
Use the Right Tools for the Job
There was a lot of complaints from students about Lisp. Most of the complaints were about parenthesis and how may of them were needed. I keenly remember watching one student manually count the parenthesis on each side of a defun to try and find error. He was using Notepad on Microsoft Windows to edit Lisp source code. I was dumbfounded.
I was using Emacs on Nextstep (a whole another story for later). Emacs not only automatically matched parenthesis, it also syntax highlighted the code and connected to a Lisp interpreter to interactively evaluate the code, like today’s Jupyter notebooks. I felt I had a superpower compared to the kid carefully pointing and counting parenthesis on his screen (it might have been on a printout, which would have been even worse in every possible way). Efficiency was important to me because the sooner I could get my assignments done the sooner I could go do something else like skateboarding or checking out a new band.
Since then I have been deeply interested in developer tools and how to maximize my coding efficiency.
See the Forest for the Trees
Twenty years later I was working on some code and I typed
std::vector<int>::iterator b = nodes.begin();
I realized I must have entered that exact line of code a millions times. Even today I can remember a good chunk of C++
syntax and most of the standard library from before 2014. As I stared at the line I wondered what decisions preceded mine so that I needed to enter that line again. I decided then and there I needed to take a step back and get a different view on why software is made.
I dabbled in management in the past out of the misplaced sense that I needed to demonstrate that skill to grow in my career (i.e. make more money). Now I wanted to get into leadership (management adjacent) to understand why software was being made. No software project can be successful if the decisions leading up to coding don’t make business sense, expectations are not grounded in reality or the workflow for creating software is not aligned with the team’s capabilities. My interest in efficiency at this time was whether I was spending my career (and time) on something that would be useful to customers and financially rewarding.
How Efficiency is Changing
Individual developer efficiency is extremely relevant today with many companies downsizing, offshoring and the rise of large language models (LLMs) as a solution to every problem involving human language (including code). Regardless of how you feel about the topic, I recommend giving Github Copilot, or Amazon CodeWhisperer, Replit Ghostwriter, Google Bard or ChatGPT a try to see what’s possible. As for leadership efficiency the usage of LLMs is still pending the killer app but there are a number of companies looking to join the AI band wagon for product design, business intelligence and other business workflows. There is no shortage of opinions from Harvard Business Review, McKinsey, IBM and more on how Generative will change business.
I will spend the next N articles covering efficiency at all levels of software organizations and the development process. I hope you will join me in this journey and contribute your own thoughts, stories and ideas on how we can all be more efficient and thus free up sometime to enjoy more time with our families and interests.