If you follow trends in software engineering, you may have encountered the term “vibe coding,” recently popularized by Andrej Karpathy, deep learning researcher and OpenAI co-founder.1 This is how he defines the approach:
There’s a new kind of coding I call “vibe coding,” where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. […] Sometimes the LLMs can’t fix a bug so I just work around it or ask for random changes until it goes away. It’s not too bad for throwaway weekend projects. […] I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.2
While the “vibe coding” term was only coined this year, the trend in software engineering traces back earlier. In 2020, GPT-3 made it clear that the transformer architecture originally developed to translate between natural languages could also translate natural language to code. In 2021, I was offered early access to OpenAI’s code generation model, and I was impressed by the ability of these tools to speed up the process of writing software and excited to see the impact they would have on software engineering and computer science education.
Some of us may have negative opinions about large language models, chatbots, and vibe coding. We’ve likely all been frustrated at some point attempting to grade student work that appeared to be generated by these tools. While there are certainly drawbacks to any new technology, these tools can provide real benefits when applied thoughtfully in appropriate contexts.
It can be tempting to believe that all our work must be serious, intellectual, and durable. I strive to find meaning in the joy of reading a book for pure pleasure, building a LEGO set, or solving a Rubik’s cube. In the words of the writer of Ecclesiastes:
There is nothing better for a person than that he should eat and drink and find enjoyment in his toil.
Ecclesiastes 2:24 ESV
As a teenager, my friends and I had a large supply of free lumber and the unearned self-confidence that often comes with youth. Though we lacked any construction experience, we spent our summers working on a tree fort spanning nearly a dozen trees. We would cobble together a section, enjoy it for a time, and then spot another tree to expand our empire. One could say that our structure was “vibe coded.” We knew nothing about strain, stress, or the joints needed for a durable treehouse. It fulfilled our desires in the moment, but there is nothing left of it today. Most of our creation was snapped to bits over time by the forces of nature. We lacked wisdom and experience, but this did not stop us from crafting something that we could learn from and enjoy for a season.
While not everything needs to be durable, we must consider the other implications of the technologies we use. I can use fire for enjoyment, cooking, or heating my home. As a steward of creation, I must not be careless with it, or it will cause great destruction. Vibe coding may not be so different, yet its ethos of disregard and its encouragement to “forget the code even exists” could be problematic.
In Genesis 1:28, God commands us to “have dominion over” and “subdue” creation. This has a direct application to how we consider software engineering and computer science. Derek Schuurman connects these dots neatly for us: “Sometimes when we think of creation, we think of things like stars, trees, flowers, and animals. But creation is, in fact, all the things that God has ordained to be, and that includes technology.”3
We must take the time to understand our work and its impact on the broader creation. Like everything under the sun, the challenges exposed by large language models and vibe coding are not new. Over fifty years ago, Edsger Dijkstra said the following in regard to a movement away from formal verification:
I suggest that the programmer should continue to understand what he is doing, that his growing product remains firmly within his intellectual grip. It is my sad experience that this suggestion is repulsive to the average experienced programmer, who clearly derives a major part of his professional excitement from not quite understanding what he is doing.4
Dijkstra later warned that some confuse “the ease of programming with the ease of making undetected mistakes.”5 While modern tools have made it easy to create code, responsible design and deployment of modern applications still necessitates intentionality and thoughtfulness on our part.
Vibe coding seems to celebrate technical debt “acquired when engineers take shortcuts that fall short of best practices.”6 The majority of the cost of most software projects comes after its initial creation. Teams add features, fix bugs, patch security vulnerabilities, and enhance reliability as the system scales up. While there can be value in a rapid prototype of a system, if it is bug-ridden, poorly designed, insecure, and unscalable, it can actually be worse than starting from nothing.
Large language models also create specific challenges in education. These tools allow some of the easy work to be automated by the computer. If we do not understand those simple tasks, we will be unable to step in when needed to address the more complex challenges.7 Our students need to understand both the benefits and drawbacks of these tools in their learning experience.
Giving up too much of our human agency to powerful tools risks abandoning our responsibility to exercise influence over creation through careful craftsmanship and can impede mastery of the fundamental building blocks of our fields. Proverbs 14:15 cautions, “the simple believe anything, but the prudent give thought to their steps.” Modern tools powered by large language models can enable almost effortless creation, but their use ought to be moderated with commitments to deep thinking, stewardship, and the renewal of God’s creation.
Footnotes
- Kevin, R. (2025, February 27). Not a Coder? With A.I., Just Having an Idea Can Be Enough. New York Times.
- Karpathy, A. (2025). There’s a new kind of coding. Retrieved March 20, 2025, from https://x.com/karpathy/status/1886192184808149383
- Schuurman, D. (2017). Technology and the Biblical Story. Pro Rege, 46(1), 4-11.
- Dijkstra, E. W. (1973). On the reliability of programs. E.W. Dijkstra Archive: On the reliability of programs. (EWD303). Retrieved March 20, 2025, from https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD303.html
- Dijkstra, E. W. (1979). On the foolishness of natural language programming. E.W.Dijkstra Archive: On the foolishness of natural language programming. (EWD 667). Retrieved March 20, 2025, from https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html
- Allman, E. (2012). Managing technical debt. Communications of the ACM, 55(5), 50-55.
- Bainbridge, L. (1983). Ironies of automation. In Analysis, design and evaluation of man–machine systems (pp. 129-135). Pergamon.
Your notion of “vibe coding” is fundamental to the idea of creativity–what many call “flow.” (See book by Mihaly Csikszentmihalyi.) Just another example to show that coding, mathematical reasoning, musical composition, linguistics, and creative writing are subsets of a much larger and more important category. Beware, though. You point out that much of the “easy work” is done by computers now and that we must resist crossing a threshhold that will transhumanize us. As we write these words, that threshhold has already been crossed. The Turing Test is in our rear view mirrors, my friend.