Recently, a friend asked me a question that’s been floating around every boardroom and business school: “With AI writing code, does programming still matter?”
It’s a fair question. Generative AI can spin out Python scripts in seconds, auto-complete full functions, and even architect small applications. For many, this feels like the end of the human coder. Just as calculators ended long division, or as spreadsheets ended the ledger book.
I’ve been in love with programming since a very young age, when I first keyed in that magical first line of BASIC common to so many young programmers, ’10 PRINT “AMIR.”‘ My life has been spent building things with code, expressing ideas as code, and solving problems with code. And with all this immersion in programming, I believe we are nowhere near the end of the road as human programmers. Let me explain.
Here’s what worries me: leaders who can’t think computationally won’t be able to evaluate AI’s output. They’ll be blind pilots, unable to judge if a solution is efficient, scalable, or even correct. And when machines fail, which they will, these leaders won’t know how to redirect, iterate, or fix what’s broken.
Programming isn’t just about code. It’s a very complete way of thinking. Computational thinking. It gives us frameworks for solving problems, executing strategy, and building systems in an incredibly complex, often uncertain world. To the extent we want to think in more clear ways, architect ever larger systems and solutions, and gain competence as executors, programming has never been more relevant.
Programming as a Way of Thinking
Programming is the art, and the act, of expressing a recipe, often a solution, in the most precise and unambiguous way possible. At their most fundamental layers, machines don’t tolerate vagueness. If you say “sort this list,” you must also specify how, in what order, under what constraints, and what to do in case of two values being tied.
That discipline forces clarity. It also forces a deep understanding of execution. In business we throw around “execution” as a buzzword. But what does it really mean? In computer science, execution is literal: taking a plan, breaking it into instructions, scheduling each instruction, ensuring the necessary pre-requisites for each instruction are fulfilled, and then carrying the instruction out with ruthless consistency, and with attention to designed redundancy and fault-tolerance. No excuses, no politics, no complaints, no shortcuts. Just get it done.
This mindset is invaluable. If we treat programming not only as a technical act but as a metaphor for structured thought and a framework that ensures execution, it gives us a set of tools that can apply everywhere: in boardrooms, supply chains, personal productivity, and even diplomacy. In fact, I’ve written extensively about applying computational lenses to areas generally not considered scientific or engineering related. For example, war and diplomacy and geopolitics.
But what are these mental tools that programming teaches us about so very practically, and directly? Let’s take a look at a few.
Abstraction: Seeing the Forest. Seeing the Trees.
In programming, abstraction is the art of hiding detail so we can focus on the essence of the task; the minimal set of things that need to be solved. Let’s continue with that sort example we alluded to earlier. Instead of specifying low-level operations to move values around in a computer’s memory, most programmers call a “sort” function and trust it to do the right thing. Someone that came before has already ensured that the low-level operations work well. That is not a problem that needs to be solved again. So, we “abstract away” the underlying details of sorting from programmers who need to solve larger problems in which the act of sorting plays a partial role.
Such layers of abstraction let us build skyscrapers of complexity without collapsing under the weight of every girder, pillar and bolt.
In business, the idea of abstraction is inherent in delegation. A CEO does not, and should not, approve every purchase order; she sets budgets and trusts her managers to act. In the military, a general doesn’t plan every maneuver; he provides commander’s intent and leaves details to field commanders.
The lesson is simple: abstraction is power. Without it, complexity will limit the scope of what you can take on. With it, you can scale to ever larger challenges.
Scheduling: Time and Space Efficiency
Computers constantly solve scheduling problems. In fact, that’s a big task that every operating system must take on. Whether you run Mac OS/X, Linux or Windows, your operating system must decide which task runs when, how memory and resources are allocated to each task, how to ensure the CPU, the engine that actually runs tasks, isn’t idle while waiting on, say, a user to type in the next sentence or command.
We face the same challenges in business and life. Our organization, or department, or team is our CPU. Cash is a resource, akin to memory. Inefficient scheduling can lead to missed deadlines, deadlock between teams, blown budgets and many other forms of organizational disaster.
Project management, seen in an ideal way, should really function as an operating system for organizations. It’s not enough to make Gantt charts and Kanban boards, there needs to be a clear process for how tasks end up there, how estimates are measured, what statistical and otherwise reasoned analyses are used to validate cost. Is the scheduling algorithm of your company, the system by which you prioritize and choose to execute, understandable to your team? Are they able to act on it independently, without being “deadlocked,” seeking approvals where they need not. Waiting on teams with which they should really be running in parallel? A company that learns to allocate resources as a computer would can gain enormous efficiency.
Lazy Execution: Wait Until You Must
But efficiency isn’t just about doing things faster. It’s also about knowing what not to do at all.
In computer science, “lazy execution” means deferring work until the moment it’s absolutely required. Why compute a report no one reads? Why fetch all the images and video for a very long webpage until the user scrolls and gets to the place where that data needs to be shown?
In business, laziness is underrated. Too often we rush into hiring, projects, analysis, or procurement before it’s necessary. The result is wasted effort and sunk costs. And even worse, in human organizations there is a cost to carry extra capacity. Just as using a supercomputer to calculate 2+2 means that this calculation will cost you kilowatts of power, and hence more money than necessary, an overstaffed organization will cost you money, efficiency and employee satisfaction. Why prepare too early, at great cost, for something that might happen with low probability?
Amazon is one example of an organization that has put heuristics, or rules of thumb, into place which prevent runaway busy-work. For years, their “two-pizza team” model embodied the principle that teams should remain small and, being resource constrained, build only what must be built, when it must be built.
Don’t think of lazy in this context as a pejorative. It encapsulates the idea of opportunity cost. Be lazy with this, so you can sprint with that… the more important thing. This kind of laziness isn’t procrastination. It’s the discipline of acting at the right time.
Greedy Optimization: What’s Best Right Now
A “greedy” algorithm solves problems by always taking the best step available at each moment, without worrying about the long-term, or what might happen many moves hence. It doesn’t always yield the globally optimum outcome, but it’s fast, simple, and surprisingly effective.
In life, we use greedy optimization all the time. Sales teams chase the easiest leads. Travelers pick the fastest route on Google Maps. Investors take the most certain, if low, yield while waiting for bigger opportunities.
Greedy approaches in the absence of a better alternative should be a habit. But they cannot be a stand-in for strategy. When speed matters more than perfection, which is often the case in the tactical, day to day, being greedy is usually fine. For example, a startup trying to win early customers, a military unit in a fast-moving theater. These situations call for the best possible action, evaluated in a short period of time without paralyzing yourself with analysis of the far future. But once this greedy optimization buys time and space, actors within the organization optimizing the non-tactical outcomes should focus on longer term optimality.
Even consciously knowing the difference and setting in place the protocols to ensure that parts of the organization that don’t need to think deeply, don’t waste time doing so, can be of great benefit.
Why AI Makes an Understanding of Programming More Urgent
So, let’s come back to the question we asked at the beginning of this article. If AI can code, why should humans still learn programming?
There are many reasons why, but one powerful reason is that programming provides the precise vocabulary and very specific methodology to deal with execution in the real world. Of specifying how something should be done, measured, assessed, duplicated and destroyed.
AI can produce code, but producing code with AI will not instill in humans this most valuable lens through which to see the world. Without computational thinking, we risk becoming incapable of cognitively dealing with this complex world of cybernetic design.
Passive consumers of machine output will remain unable to judge whether the solution is efficient, scalable, or even correct. Nor will machine discoveries expressed as code trigger any improvement, any learning, in the clueless human who observes these eureka moments.
AI can propose ten strategies for a merger. A computational thinker knows how to model tradeoffs, identify constraints, and test edge cases for each of these strategies and apply his mental muscle to improve outcomes. AI can debug a piece of code. A computational thinker knows how to direct this problem-solving power to debug an abstract idea.
Programming in the age of AI may be less about keystrokes typed, but it is even more about mindset. It is the means by which we can acquire the discipline that ensures humans stay relevant not just as users, but as shapers of the future.
The Future of Execution
Every company talks about execution. Few define it rigorously. Hopefully, as you’ve seen with the examples throughout this essay, computational thinking and a programmer-like precision of expression can give us that rigor. It teaches us that execution is not a high level idea which means undertaking some vague action, but a process that involves dependencies, resources, structure, efficiency, fault-tolerance, optimization and iteration.
In a world where AI accelerates everything, the companies that win will not be those that simply adopt tools, but those whose leaders think like programmers: precise, structured, unafraid to apply superpowers such as abstraction and recursion to take on monumental challenges and gargantuan complexity.
The same holds for nations, militaries, and any institution that must execute at scale in an uncertain world.
Have no doubt about it. Programming still matters. It will always matter. Not just as code, but as a philosophy and science of execution. As an instrument of analysis. Languages may change. The compilers may morph into neural networks, but the mindset remains timeless.
The world itself has become a living, cybernetic system of systems; a program running on the substrate of human civilization. Those who cannot think computationally will be passengers in a vehicle they cannot steer. Those who can will be the architects of what comes next.
