I'm glad AI didn't exist when I learned to code
blog.shivs.me
blog.shivs.me
Writing code is the easiest part of software engineering. You're hired for your perceived ability to solve problems the employer needs solved. Many times you'll solve it with code. Sometimes you'll solve it with process. In every instance, you're expected to solve it using your learned experience and ability to critically think through the constraints (time, money, etc.).
If you can't be bothered to deal with the easiest part of your job, writing some code, how do you expect to be trusted with the hard stuff? I'm not saying don't use AI tooling, but I am saying don't cheat yourself by becoming dependent on it.
Programming is over, jobs will disappear and we'll all be on UBI while AI turns into terminator. Meanwhile designing software systems still requires lots of intrinsic motivation and persistence
If writing code is the easiest and least impactful thing you do as a software engineer, why does it matter if you use AI to assist with that part? Or to come at it from another angle, why is using Stack Overflow/Google in the hunt for answers and examples good, but using AI models is not good?
Things like "This encourages people to add features here, here and here".
Without that experience, the code becomes inscrutable very quickly.
Not sure if I've hit a nerve, but I never said it was the least impactful. Code is the distillation of all the work that precedes it to accomplish a task. It's the easiest part, but it's essential to the final solution in most circumstances.
Having said that, I’m absolutely pro using LLMs - it’s just a matter of using them properly for either education, or code writing. For experienced devs they save a ton of work writing boilerplate code and learning new libraries, for inexperienced they help overcome initial hurdles with grammar - and can teach how things work, if junior asks.
As a dev with >20yrs experience - vanilla ChatGPT produces code that has 80% too much verbosity, but with good prompts uou can cut down on that, and if you refactor what it wrote it is very useful - especially when dealing with unusual feameworks/languages. It’s also great at explaining concepts and “proper ways” to write code in new languages. It is very poor at designing novel architectures though.
In other words, a messy dag is hard to interpret, but your messy desk full of papers you can subconciously place where everything might be, because it exists in the 3d space in real life where all your senses are active on it as they are designed to be. not in a simulated manner but the real thing that can never be fully modeled.
Companies used to model things in 3d via clay or balsa wood to help visualize ideas in this manner. Eventually people like architects started using autocad instead of balsawood. But one wonders if a certain dimension of understanding of a project was lost when we went from something we could walk around and look at unencumbered, into a digital abstraction of some real thing.
Coding is the primary part of the job particularly when you're a graduate, to solve problems using code and you need the skills to be able to code and solve basic problems using code. If you don't know how to code then you will struggle.
As you build that experience and grow in your career you begin to learn and have to capacity to think bigger and start to incorporating aspects of time, money, process and other business factors that you don't really have the ability to do if you haven't spent time in the arena.
I work with a lot of graduates in cyber security and many of them have very "technical thinking" but don't think about business tradeoffs of time and money when looking at security controls. That is primarily because they're still trying to harness their technical skills, which is what they will do early in their career.
When they weren’t getting any jobs I tried to explain that the syntax of coding is the easy part. The hard part is everything else.
I have seen people who learned to code before AI, and yet because they don't bother to ask themselves another layer of "why" they continue to have a superficial understanding of everything. And I have no doubt that the truly excellent programmer will understand the whole system even if they learned coding after AI.
> I had the habit of not copying code from YouTube tutorials
This is what makes all the difference. If you know you should not blindly copy code from YouTube tutorials, you also know you should not copy code from AI output, and if you were to be born in my generation you would also know you should not copy code blindly from a textbook.
Kudos to the author though—I think this person has the right personality to become a good programmer regardless of whether they wrote their first line of code before or after the age of LLMs.
You shouldn’t copy if you’re a student. But if someone is a working Salesforce Administrator trying to learn Apex as a first programming language, I imagine a lot of the introductory code you will see around Apex Triggers will make no sense but you’ll have to blindly copy it if you want to follow along.
Some learners will get frustrated with that teaching approach because they’ll be very curious about the syntax. I imagine at that point they’ll just consult other resources to get their questions answered.
The thinking goes, you'll learn much more quickly if you go through the motions of typing it out.
I tend to do the same thing when using AI to explore something at edge of my knowledge, where I don’t know exactly what I just asked the AI to code. I ask it how to solve a general problem of the class I’m trying to solve, and the retype that code as I’m fitting it into my specific use case. I find that helps me much better understand what the AI generated code is doing, which comes in handy when it doesn’t work as described or goes wrong.
My son do basic calculations all the time. I know of some school aged kids doing amazing things. As long as you use technology to enhance and enrich you it’s good. But concise is the key.
You can try learning guitar only from YouTube. It might work, but you might also position your hand wrong and injure it. So balance and additional guidance are important.
I was charged with building a DSL so that users could specify their own business logic and tax rules.
I spent 5 x 16 hour days in a flow state coding in C and emerged with a parser that worked remarkably well, but was hideously slow.
After sharing the results with colleagues, one of them told me about lex and yacc. I rewrote it and it went from thousands of lines of code to a couple of configuration files and ran probably 1000x times as fast.
Of course if search engines had been around then I could have skipped all those hard steps and that project would have been completed more quickly.
But the skills and confidence I got from first doing it the hard way really helped in my career.
Sometimes I see a junior dev on what could be considered a "pointless" deep dive, and I keep my mouth shut.
It's the software equivalent of making your first kill.
Since I'm close enough to end of career to be able to ignore the whole trend as a developer, I'm mostly dreading having to "talk" to some frikin bot everytime I need support on some product.
If you agree that "customer support" system hell is bad already, then you have to know that this is all on the verge of being much worse...
me: My payment keeps being rejected on a known good card...
bot: I'm sorry Dave, I'm afraid I can't do that...
I'm mixed. I did try to get gemini to figure out how to do some fancy TypeScript stuff. It provided solutions but failed to meet the constraints and couldn't get it to really get what I meant. It would say "Oh, sorry, here's one dealing with that" and then spit out code that either still had the same problem or ignored a previous constraint.
Anyway, more relevant, I did wonder if I wasn't trying enough on my own to figure out what I was trying to do. I failed either way haha.
I used deepseek-R1-qwen-distill-15B to do a nodejs discord bot. That was done incredibly fast. I had asked for a few days for a cellphone app but llama, openai (didn't test 4o or newer yet), deepseek didn't let me know that what I was asking was technically impossible - service workers without a backend somewhere so I could keep track of timers and fire notifications. Like a PWA.
After asking copilot about it the other way around "can service workers URL be file:///?" Apparently not.
All of the serviceworker nonsense LLM gave me the two-step - make change, revert change, repeat.
But I can assure you, the alternative is there being no coding team and maybe no robotics team at all.
I think that maybe I’d say: it’s good that AI isn’t good enough to never break the robot. That’s when they’re learning a lot about coding and debugging.
Um, yeah, that's how I roll.
Try something, it doesn't work, debug for a while and maybe I can get it to work?
My favorite example was I was trying to get the python buffer protocol working for images in blender. I read the docs, wrote some code which didn't work, started debugging for a long while and, finally, after I went digging into python's repo I found out it wasn't even fully implemented. Needless to say I was less than happy they would let a half-baked feature into a release.
I can say the current batch of 'thinking' AIs are pretty good at debugging once you get them pointed in the right direction.
We can definitely date OP by his use of “rawdog”, the context of which is actually hilarious and made me laugh out loud.