# Generative AI and Competency of Programmers

> Working in GitHub Copilot and other AI-assisted programming environments, does a programmer's competence decline? Or can the competence displayed in such an environment not be regarded as a programmer's "real" competence? I do not think so.

Working in [GitHub Copilot](https://wiki.g15e.com/pages/GitHub%20Copilot.txt) and other [AI-assisted programming](https://wiki.g15e.com/pages/AI-aided%20programming.txt) environments, does a programmer's competence decline? Or can the competence displayed in such an environment not be regarded as a programmer's "real" competence? I do not think so.

> [!warning] Because I kept adding content to a piece written in September 2024 without substantially revising it, a lot of it now looks dated to me (2025-12-12). (<ToDo>)

## Tools That Keep Improving

[AI-assisted programming](https://wiki.g15e.com/pages/AI-aided%20programming.txt) is special in some respects, but in another sense it is also just one instance of the steady improvement of tools that has been happening throughout the history of programming.

If I list a few of the changes I have experienced, they look like this.

- bookstores + libraries → web search
- manual compilation and then reading error messages → syntax highlighting and real-time static analysis provided by an <IDE>
- memorizing APIs + digging through references → autocomplete provided by an <IDE>
- manual execution and then clicking around here and there → automated <acceptance tests> and <unit tests>
- manual execution and then clicking around here and there, <unit tests> → <type inference> and <static type checking> (rather than completely replacing unit tests, type systems are closer to being complementary)
- web search, entering and editing code → [GitHub Copilot](https://wiki.g15e.com/pages/GitHub%20Copilot.txt), [Cursor](https://wiki.g15e.com/pages/Cursor%20(software.txt))

The feedback gap keeps narrowing, and cognitive processes such as human perception, reasoning, and memory are gradually being externalized. This did not suddenly happen; it is a trend that began in the first place when humans started using tools.

## The Claim That If You Use Tools, You're Not a Real Developer

There have long been claims that new media or technology make people stupid. If we look for the original source among them, it would probably be Plato: Plato argued that [writing is a problem because people's memory declines if they write](https://wiki.g15e.com/pages/Plato's%20criticism%20on%20written-texts.txt). When I was young, the claim that <TV> makes people stupid (the so-called "idiot box" theory) was popular. After that came claims that games, the internet, social media, and smartphones make people stupid, and now it seems to be AI's turn.

Developer communities are similar. Claims that you have to hand-code to be the real thing, or that you must not use autocomplete, or that you must not use web search, and so on. The latest version of this kind of claim is that "you shouldn't use [GitHub Copilot](https://wiki.g15e.com/pages/GitHub%20Copilot.txt) if you're a real developer," but it does not look very different from the claims of the past.

These claims seem to have two major problems.

First, the mistaken assumption that there is some abstract lump called "human ability," and that it worsens the more one uses tools. But ability is not a single lump, and depending on how one uses which tools, some abilities may actually be enhanced. For example, while using [GitHub Copilot](https://wiki.g15e.com/pages/GitHub%20Copilot.txt), my <memory> may get worse, but my ability to express my intentions more clearly in code, or my ability to read and quickly understand code proposed by another agent (AI), may improve.

Second, the mistaken assumption that one can measure a uniquely human ability separated from tools, and that this is the true ability. What meaning would a capability score have if it were measured by how well a human can write code mentally with no paper, whiteboard, or computer? We should look not at the ability of a person in a vacuum isolated from the environment, but at the ability of the whole system composed of person, environment, and tools.

The claim that not using some thing is what makes someone a real developer may perhaps be nothing more than a narrow-minded idea dressed up in plausible words: tools I am already accustomed to using are permissible, but tools still unfamiliar to me are not. (A variation is the claim that if you use technology newer than what I use, you're a hipster, and if you use technology older than what I use, you're washed up.)

Of course, I do believe that intentionally imposing constraints as a means of training can sometimes be beneficial. For example, when learning a new programming language, there are times when I want to think actively in my head and code step by step, and if [GitHub Copilot](https://wiki.g15e.com/pages/GitHub%20Copilot.txt) just blurts out the answer, it can actually get in the way of learning. In such cases, I turn Copilot off for a while. Conversely, there are also times when training to depend heavily on tools is beneficial. For example, in order to understand Copilot's limits (or to practice expressing intentions clearly), I find it beneficial in many ways to practice giving commands as much as possible only in <natural language> (or expressing intentions that way), and then proceeding with programming using only the code Copilot proposes.

## Research Claiming That Using Generative AI Lowers Test Scores

There is a study([Generative AI can harm learning](https://wiki.g15e.com/pages/Generative%20AI%20can%20harm%20learning.txt)) showing that the group that studied using [generative AI](https://wiki.g15e.com/pages/Generative%20AI.txt) performed better on a test, but when they were later prevented from using AI, they actually scored lower than the group that had not used it from the beginning. But I do not think this is particularly surprising or worrying, given that the same phenomenon would obviously be observed if you suddenly took engineering calculators away from engineering students, or suddenly turned off autocomplete for developers.

In the end, this is a matter of choosing well what parts of the overall cognitive process should be handled inside the head and what parts should be handled by externalized tools outside the head (paper, calculators, IDEs, AI, ...), and it is merely an extension of a problem that has existed for a long time. As tools continue to develop, the range of choices merely increases.

Rather than thinking in terms of what should not be used, I think it is far more beneficial to think about which tools should be combined with which other tools, in what ways, and in what contexts.

## The Claim That It Harms Beginners and Benefits Experts

There is also a [claim](https://ben.page/jumbocode-ai) that using an LLM is beneficial in a field one knows well, but harmful in a field one knows nothing about. The idea is that an LLM may help you finish the task at hand quickly, but gets in the way of learning.

That is better than blanket claims that LLMs are simply good or bad, but I still think it is problematic in various ways.

1. To begin with, even in a field one knows well, using it oddly can be harmful, and even in a field one knows nothing about, using it well can be beneficial. If using an LLM interferes with learning, that is because it was used in a way that interferes with learning.
2. Moreover, the claim that LLMs are harmful to beginners and beneficial to experts is problematic in that it may widen the gap between beginners and experts even further. I think it would be much more beneficial to discuss how beginners and experts can each use LLMs beneficially or harmfully in which situations. Here, by "beneficial" I mean benefits that take both of the following into account: 1) improving immediate performance, and 2) improving future performance by building competence.
3. When I hear the claim that LLMs get in the way of learning, part of me thinks, "Ah, this person values learning." But at the same time, I also wonder, "Have they not deeply internalized that idea?" Because it means they have only used LLMs for finishing given tasks quickly, and have not thought enough about ways to use them to support learning.

According to a [meta-study](https://wiki.g15e.com/pages/When%20combinations%20of%20humans%20and%20AI%20are%20useful%20-%20A%20systematic%20review%20and%20meta-analysis.txt) published in October 2024, when humans were paired with AI on tasks humans do better than AI, the results were better than when humans worked alone; but when humans were paired with AI on tasks AI does better than humans, the results were worse than when AI worked alone. The authors speculate that this is probably because only when humans are generally better than AI can they also better judge whether to accept AI's suggestions. In other words, in situations where humans are worse than AI, they either fail to be skeptical when it is time to doubt the AI (overreliance), or stubbornly refuse when it is time to accept the AI's suggestion (underreliance).

If you read only this far, it may seem consistent with the claim that using AI "harms beginners and benefits experts," but in fact it is not. Another interesting part of the same study is that regardless of whether the task was one humans do better than AI or worse than AI, humans generally did better working together with AI than working alone. This was especially true not for tasks involving choosing from a finite set of options, but for open-ended situations (content production, etc.). The study does not directly mention coding, but if one had to classify it, coding is closer to open-ended content production than to a closed decision-making situation.

## Personal Experience 1

Long ago, they say developers wrote programs by hand and operators punched them into punch cards for computer input. I did not live through that era, but because there was no computer at home when I was young, on weekdays I would code in a notebook and then try entering it at a neighborhood computer academy on the weekend(<1988>), or I would try typing it into computers on display in commercial buildings(<1992>, the basement of <Youngpoong Bookstore>. It was an era when keyboards already existed).

Because the gap between writing and running a program was about a week, the experience of coding with extreme care was an advantage. These days, thanks to extremely short <feedback loops> such as syntax highlighting, autocomplete, real-time static analysis integrated into the editor, automated <unit tests>, live refresh, and AI's real-time revision suggestions, even if I make mistakes frequently I can correct them almost instantly, so it has become almost no different from not having made mistakes in the first place([increase in defect costs](https://wiki.g15e.com/pages/Defect%20cost%20increase.txt)). Maybe because of that, compared with before, I am less careful and make more mistakes.

From an educational perspective, some mistakes are beneficial and some are close to a waste of time, so it is hard to say that frequent mistakes are unconditionally good or bad. Still, compared with the past when the feedback gap was only forcibly long, I can at least say that the current situation, where I can adjust the gap by my own will, is better.

## Personal Experience 2

A note about my experience making a <macOS> app called [ZenPDF](https://wiki.g15e.com/pages/ZenPDF.txt) with AI's help(<2024-09-28>).

The experience of producing a fairly plausible result while knowing almost nothing about the language([Swift](https://wiki.g15e.com/pages/Swift%20(programming%20language.txt))), the framework([SwiftUI](https://wiki.g15e.com/pages/SwiftUI.txt)), the platform(<macOS>), and the development environment([Xcode](https://wiki.g15e.com/pages/Xcode.txt)) is unfamiliar and fun. It seems to me that one of the big strengths of [AI-assisted programming](https://wiki.g15e.com/pages/AI-aided%20programming.txt) is that it significantly reduces the fear of starting something new.

The downside is similar to the problems that arise when a team leader and team member who are not very good at development work together. The team leader cannot give precise instructions, the team member cannot produce the result accurately, and the team leader keeps reviewing and giving feedback based on a kind of "vague intuitive feeling." At first, the work somehow gets done, but the quality steadily declines, and it moves toward a situation where no one knows why a given piece of code is there.

In the end, even if one starts this way, there is still a need to calmly read the documentation and become somewhat familiar with the syntax and framework. There is no difference in the fact that one repeatedly goes back and forth between "just try making it first" and "study calmly," but thanks to AI, the "just try making it first" stage seems to have become considerably easier. It feels like the stride length has increased.

## Conclusion

Rather than asking, "Does using [generative AI](https://wiki.g15e.com/pages/Generative%20AI.txt) lower competence?" it seems more beneficial to ask, "How can we use generative AI in ways that increase competence?" See also:

- [New Practices for AI-Assisted Programming](https://wiki.g15e.com/en/pages/New%20practices%20for%20AI-aided%20programming.txt)
- [AI as a Coding Practice Tool](https://wiki.g15e.com/pages/AI%20as%20coding%20practice%20tool.txt)
- [Programming Education in the Age of AI](https://wiki.g15e.com/en/pages/Programming%20education%20in%20the%20AI%20era.txt)

## Related Writings

- [How AI Impacts Skill Formation](https://wiki.g15e.com/pages/How%20AI%20Impacts%20Skill%20Formation.txt) (January 2026, research by <Anthropic>)