Skip to content

Commit 3768106

Browse files
committed
yes and essay
1 parent 31430d9 commit 3768106

1 file changed

Lines changed: 269 additions & 0 deletions

File tree

www/content/essays/yes-and.md

Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
+++
2+
title = "Yes, and..."
3+
description = """\
4+
In this essay, Carson Gross discusses his advice to young people interested in computer science worried about the \
5+
future given the advancements in AI."""
6+
date = 2026-02-27
7+
updated = 2026-02-27
8+
authors = ["Carson Gross"]
9+
[taxonomies]
10+
tag = ["posts"]
11+
+++
12+
13+
I teach computer science at [Montana State University](https://www.cs.montana.edu). I am the father of three sons who
14+
all know I am a computer programmer and one of whom, at least, has expressed interest in the field. I love computer
15+
programming and try to communicate that love to my sons, the students in my classes and anyone else who will listen.
16+
17+
A question I am increasingly getting from relatives, friends and students is:
18+
19+
> Given AI, should I still consider becoming a computer programmer?
20+
21+
My response to this is: "Yes, and..."
22+
23+
## "Yes"
24+
25+
Computer programming is, fundamentally, about two things:
26+
27+
* Problem-solving using computers
28+
* Learning to control complexity while solving these problems
29+
30+
I have a hard time imagining a future where knowing how to solve problems with computers and how to control the complexity
31+
of those solutions is *less* valuable than it is today, so I think it will continue to be a viable career even with the
32+
advent of AI tools.
33+
34+
### "You have to write the code"
35+
36+
That being said, I view AI as very dangerous for junior programmers because it _is_ able to effectively generate code for
37+
many problems. If a junior programmer does not learn to write code and simply generates it, they are robbing
38+
themselves of the opportunity to develop the visceral understanding of code that comes with being down in the trenches.
39+
40+
Because of this, I warn my students:
41+
42+
"Yes, AI can generate the code for this assignment. Don't let it. You _have_ to write the code."
43+
44+
I explain that, if they don't write the code, they will not be able to effectively _read_ the code. The ability to
45+
read code is certainly going to be valuable, maybe _more_ valuable, in an AI-based coding future.
46+
47+
If you can't read the code you are very likely to fall into [The Sorcerer's Apprentice trap](https://www.youtube.com/watch?v=m-W8vUXRfxU),
48+
creating systems you don't understand and can't control.
49+
50+
### Is Coding → Prompting like Assembly → High Level Coding?
51+
52+
Some people say that the move from high level languages to AI-generated code is like the move from assembly to
53+
[high level programming languages](https://en.wikipedia.org/wiki/High-level_programming_language).
54+
55+
I do not agree with this simile.
56+
57+
Compilers are, for the most part, deterministic in a way that current AI tools are not. Given a high-level programming
58+
language construct such as a for loop or if statement, you can, with reasonable certainty, say what the generated
59+
assembly will look like for a given computer architecture (at least pre-optimization).
60+
61+
The same cannot be said for an LLM-based solution to a particular prompt.
62+
63+
High level programming languages are a _very good_ way to create highly specified solutions to problems
64+
using computers with a minimum of text in a way that assembly was not. They eliminated a lot of
65+
[accidental complexity](https://en.wikipedia.org/wiki/No_Silver_Bullet), leaving (assuming the code was written
66+
reasonably well) mostly necessary complexity.
67+
68+
LLM generated code, on the other hand, often does not eliminate accidental complexity and, in fact, can add
69+
significant accidental complexity by choosing inappropriate approaches to problems, taking shortcuts, etc.
70+
71+
If you can't read the code, how can you tell?
72+
73+
And if you want to read the code you must write the code.
74+
75+
### AI is a great TA
76+
77+
Another thing that I tell my students is that AI, used properly, is a tremendously effective TA. If you don't use it
78+
as a code-generator but rather as a partner to help you understand concepts and techniques, it can provide a huge boost
79+
to your intellectual development.
80+
81+
One of the most difficult things when learning computer programming is getting "stuck". You just don't see the trick
82+
or know where to even start well enough to make progress.
83+
84+
Even worse is when you get stuck due to accidental complexity: you don't know how to work with a particular tool chain
85+
or even what a tool chain is.
86+
87+
This isn't a problem with *you*, this is a problem with your environment. Getting stuck pointlessly robs you of time to
88+
actually be learning and often knocks people out of computer science.
89+
90+
(I got stuck trying to learn Unix on my own at Berkeley, which is one reason I dropped out of the computer science
91+
program there.)
92+
93+
AI can help you get past these roadblocks, and can be a great TA if used correctly. I have posted an
94+
[AGENTS.md](https://gist.github.com/1cg/a6c6f2276a1fe5ee172282580a44a7ac) file that I provide to my students to configure
95+
coding agents to behave like a great TA, rather than a code generator, and I encourage them to use AI in this role.
96+
97+
AI doesn't *have* to be a detriment to your ability to grow as a computer programmer, so long as it is used
98+
appropriately.
99+
100+
## ", and..."
101+
102+
I do think AI is going to change computer programming. Not as dramatically as some people think, but in some
103+
fundamental ways.
104+
105+
### Raw coding may become less important
106+
107+
It may be that the *act* of coding will lose *relative* value.
108+
109+
I regard this as too bad: I usually like the act of coding, it is fun to make something do something with your
110+
(metaphorical) bare hands. There is an art and satisfaction to writing code well, and lots of aesthetic decisions to be
111+
made doing it.
112+
113+
However, it does appear that raw code writing prowess may be less important in the future.
114+
115+
As this becomes relatively less important, it seems to me that other skills will become more important.
116+
117+
### Communication Skills
118+
119+
For example, the ability to write, think and communicate clearly, both with LLMs and humans seems likely to be much more
120+
important in the future. Many computer programmers have a literary bent anyway, and this is a skill that will likely
121+
increase in value over time and is worth working on.
122+
123+
Reading books and writing essays/blog posts seem like activities likely to help in this regard.
124+
125+
### Understanding Business
126+
127+
Another thing you can work on is turning some of your mental energy towards understanding a business (or government
128+
role, etc) better.
129+
130+
Computer programming is about solving problems with computers and businesses have plenty of both of these.
131+
132+
Some business folks look at AI and say "Great, we don't need programmers!", but it seems just as plausible to me that
133+
a programmer might say "Great, we don't need business people!"
134+
135+
I think both of these views are short-sighted, but I do think that AI can give programmers the ability to continue
136+
fundamentally working as a programmer while *also* investing more time in understanding the real-world problems (business or
137+
otherwise) that they are solving.
138+
139+
This dovetails well with improving communication skills.
140+
141+
### "Architecting" Systems
142+
143+
Like many computer programmers, I am ambivalent towards the term "software architect." I have seen
144+
[architect astronauts](https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/) inflict
145+
a lot of pain on the world.
146+
147+
For lack of a better term, however, I think software architecture will become a more important skill over time: the
148+
ability to organize large software systems effectively and, crucially, to control the complexity of those systems.
149+
150+
A tough part of this for juniors is that traditionally the ability to architect larger solutions well has come from
151+
experience building smaller parts of systems, first poorly then, over time, more effectively.
152+
153+
Most bad architects I have met were either bad coders or simply didn't have much coding experience at all.
154+
155+
If you let AI take over as a code generator for the "simple" stuff, how are you going to develop the intuitions necessary
156+
to be an effective architect?
157+
158+
This is why, again, you must write the code.
159+
160+
### Using LLMs Effectively
161+
162+
Another skill that seems likely to increase in value (obviously) is knowing how to use LLMs effectively. I think that
163+
currently we are still in the process of figuring out what that means.
164+
165+
I also think that what this means varies by experience level.
166+
167+
#### Seniors
168+
169+
Senior programmers who already have a lot of experience from the pre-AI era are in a good spot to use LLMs effectively:
170+
they know what "good" code looks like, they have experience with building larger systems and know what matters and
171+
what doesn't. The danger with senior programmers is that they stop programming entirely and start suffering from brain
172+
rot.
173+
174+
Particularly dangerous is firing off prompts and then getting sucked into
175+
[The Eternal Scroll](https://theneverendingstory.fandom.com/wiki/The_Nothing) while waiting.
176+
177+
Ask me how I know.
178+
179+
I typically try to use LLMs in the following way:
180+
181+
* To analyze existing code to better understand it and find issues and inconsistencies in it
182+
* To help organize my thoughts for larger projects I want to take on
183+
* To generate relatively small bits of code for systems I am working on
184+
* To generate code that I don't enjoy writing (regular expressions & CSS)
185+
* To generate demos/exploratory code that I am willing to throw away or don't intend to maintain deeply
186+
* To suggest tests for a particular feature I am working on
187+
188+
I try not to use LLMs to generate full solutions that I am going to need to support. I will sometimes use LLMs alongside
189+
my manual coding as I build out a solution to help me understand APIs and my options while coding.
190+
191+
I never let LLMs design the APIs to the systems I am building.
192+
193+
#### Juniors
194+
195+
Juniors are in a tougher spot. I will say it again: you must write the code.
196+
197+
The temptation to vibe your way through problems is very, very high, but you will need to fight against that temptation.
198+
199+
Peers *will* be vibing their way through things and that will be annoying: you will need to work harder than they do,
200+
and you may be criticized for being slow. The work dynamics here are important to understand: if your company
201+
prioritizes speed over understanding (as many are currently) you need to accept that and not get fired.
202+
203+
However, I think that this is a temporary situation and that soon companies are going to realize that vibe coding at
204+
speed suffers from worse complexity explosion issues than well understood, deliberate code does. At that point I expect
205+
slower, more deliberate coding with AI assistance will be understood as the best way to utilize this new technology.
206+
207+
Where AI can help juniors is in accelerating the road to senior developer by eliminating accidental complexity that often
208+
trips juniors up. As I said above, viewing AI as a useful although sometimes overly-eager helper rather than a servant
209+
can be very effective in understanding the shape of code bases, what the APIs and techniques available for a particular
210+
problem are, how a given build system or programming language works, etc.
211+
212+
But you must write the code.
213+
214+
And companies: you must let juniors write the code.
215+
216+
## Getting a Job Today
217+
218+
The questions I get around AI and programming fundamentally revolve around getting a decent job.
219+
220+
It is no secret that the programmer job market is bad right now, and I am seeing good CS students struggle to find
221+
positions programming.
222+
223+
While I do not have a crystal ball, I believe this is a temporary rather than permanent situation. The computer
224+
programmer job market tends to be cyclical with booms and busts, and I believe we will recover from the current bust
225+
at some point.
226+
227+
That's cold comfort to someone looking for a job now, however, so I want to offer the specific job-seeking advice that
228+
I give to my students.
229+
230+
### Family, Friends, Family of Friends
231+
232+
I view the online job sites as mostly pointless, especially for juniors. They are a lottery and the chances of finding
233+
a good job through them are low. Since they are free they are probably still worth using, but they are not worth
234+
investing a lot of time in.
235+
236+
A better approach is the four F's: Family, Friends & Family of Friends. Use your personal connections to find positions
237+
at companies in which you have a competitive advantage of knowing people in the company. Family is the strongest
238+
possibility. Friends are often good too. Family of friends is weaker, but also worth asking about. If you know or
239+
are only a few degrees separated from someone at a company you have a much stronger chance of getting a job at that
240+
company.
241+
242+
I stress to many students that this doesn't mean your family has to work for Google or some other big tech company.
243+
244+
*All* companies of any significant size have problems that need to be solved using computers. Almost every company over 100
245+
people has some sort of development group, even if they don't call it that.
246+
247+
As an example, I had a student who was struggling to find a job. I asked what their parent did, and they said they worked
248+
for Costco corporate.
249+
250+
I told them that they were in fact extremely lucky and that this was their ticket into a great company.
251+
252+
Maybe they don't start as a "computer programmer" there, maybe they start as an analyst or some other role. But the
253+
ability to program on top of that role will be very valuable and likely set up a great career.
254+
255+
## Conclusion
256+
257+
So I still think pursuing computer programming as a career is a good idea. The current job market is bad, no doubt, but
258+
I think this is temporary.
259+
260+
I do think how computer programming is done is changing, and programmers should look at building up skills beyond
261+
"pure" code-writing. This has always been a good idea.
262+
263+
I don't think programming is changing as dramatically as some people claim and I think the fundamentals of programming,
264+
particularly writing good code and controlling complexity, will be perennially important.
265+
266+
I hope this essay is useful in answering that question, especially for junior programmers, and helps people feel
267+
more confident entering a career that I have found very rewarding and expect to continue to do for a long time.
268+
269+
And companies: let the juniors write at least some of the code. It is in your interest.

0 commit comments

Comments
 (0)