On The Need For Understanding

40 points by achyudh


daniel_alp

I printed out the checklist from Polya's How To Solve It and started referring to it whenever I sat down to work.

Haha Polya's How To Solve It!

As I was reading, I was thinking about how much of what the author was saying reminded me of How to Solve It so when they mentioned the book I thought "of course, this makes even more sense now". My grandfather was the one who recommended it to me and I think he was one of the main reasons that I am who I am today.

I know this is not an LLM post but I got kind of spurred into a rant by the post.

If were to explain my main (?) problem with LLM-assisted programming it's that LLMs tend to discourage curiosity and digging into things.

For example, last term in university in one of my courses we had to write a program that compiled programs to MIPS, and the assembly would be executed on a fake CPU. This is a non-trivial course because the programming language had closures and was garbage collected, and translating all of this to assembly is tricky.

The last assignment was implementing the GC, and (for reasons) I started it on the last day, so submitting my code and seeing it fail was quite stressful seeing as I had ~9 hours left. There was a dumb typo in the code, but of course since this is the GC we're talking about the bug manifested in very weird ways.

Anyways, I'm trying to not panic, and since the program is being emulated I could add some code to dump the stack and heap at certain points in the program and comb through it. And you know, this was actually quite fun to do because it's basically the reverse of the compiler-before we were taking all of these high-level constructs and turning them into assembly, and now I'm looking at my stack and heap and trying to figure out what some word at some particular address represents (this doubled as exam prep :)).

After painstakingly doing this for some time, I was looking at the stack and heap and noticed something very suspicious (assuming I annotated everything correctly). The GC was a cheney garbage collector and I was not setting the forwarding pointer when copying a chunk from old -> new region. So at that point I had a pretty good idea of where to look for the bug and badabing badaboom I immediately found it, and after that I passed all the tests.

Could I have asked some LLM to just do it for me? Maybe, I am not sure. But I enjoyed working through this myself, I understood my own code better and fixing that bug felt incredible.

I think this is the part where the people who are optimistic/enthusiastic about AI say "well nobody ever said doing everything for you. You could have worked alongside the LLM, you provide it the source code, describe the bug, your findings etc. and it suggests ideas to you" and this is reasonable, but idealistic.

This is just not how I see LLMs being used in a university environment, I remember some person in that same course who said "how were you supposed to solve this assignment without AI?" and there other examples of people offloading their thinking to LLMs and praying they get it right. Maybe these things can be used responsibly, I can think of a couple people online who are using them responsibly, but they all have a ton of experience programming pre-LLMs. I'm almost sure that these people are happy with LLMs because (1) they can smell bullshit if it happens and (2) they feel that they couldn't learn anything from doing this by hand (in my opinion this is only true if you've done it many times before!) and automating the task is okay, like a much more powerful find+replace.

The problem is that (I think) responsible use / use in moderation is not encouraged, but actively discouraged! It seems to me that AI is being marketed very aggressively as a "magical" thing where anyone can just use it and it works and it's great and let's get rid of all workers now! (wait...)

I can understand why this is being done, but it's just so fucking draining because it feels like I am being told over and over that "you are wasting your time, what you are learning is useless and can be automated, adapt or die (preferably just die)". What sucks even more is that some people I talk to seem to be happy with this, like "great now I can just have claude do everything for me" and others seem to have gone through the five stages of grief and accepted that we will have to use LLMs in the future and this is inevitable (I hope it isn't! I don't want to be forced to use something unless I can decide for myself if I find it helpful, and so far I think I benefit more from doing everything myself. EDIT: rereading I just want to add that some things like vaccines should obviously be used by everyone, and the idiots who "decide for themselves to not get vaccinated" are putting themselves and others at risk, but I don't think that argument works for LLMs)

I try to stay optimistic (what choice do I really have lol...) but some days are difficult because I have to question if this the right career for me, and to try and separate the neutral discussion about AI (what is it good for, how can we use it to write better code) from all the noise.

I know I've gone on for too long, but I'll end by talking about tutoring. I tutor highschoolers math, and I feel like the people I teach sometimes "just don't care" about why something is the way it is (e.g. a lot of the Grade 9s I taught didn't understand why a^0 = 1, or why you add fractions by finding a common denominator, etc.) It's like the educational system is saying "this thing is scary, don't question it and accept these things as a fact" and this is awful because students start to treat math as "that subject where I have to memorise a bunch of steps" instead of understanding the basics and seeing how everything builds from previous results. Again LLMs have only exacerbated this issue...

Anyways, this post cheered me up, and now I want to learn how QNX works :) but that will have to wait a bit... :P

krig

The main thing I now bring to the table, as a software professional, is the ability to understand what's really going on. Sometimes, yes, this involves doing basic science to answer a question, but I usually find it hard to be satisfied with an answer until I have gone down to the source code of the confusing component to really understand it. This is an unreasonably effective skill that has only become more relevant over the years, not less.

Amen. Maybe I would phrase it as "...the patience and tenacity to keep trying to figure things out until I do."

tsion

Regularly delving into the source code of my dependencies (including standard libraries, or things like the Android platform as in the article) has been one of the highest value behaviours I've learned in my career.

benj

My view of software development has split into two separate categories: (1) software to meet business needs and (2) software as a solution to a problem.

I think the characterization of software as basic science combining multiple libraries by and large applies to “enterprise” software or every other CRUD application out there. There are many of those, and some power very profitable business, but the level of innovation they require is mind numbing… many of us have said “I could build that thing in a week!”

In this context aiming for understanding is very expensive and often discouraged because salaries are expensive and the ticket is only pointed at 2… I think this is why it was so impressive the feat that that microslop dev accomplished when his ssh was slower than usual and he dig into the source code to unravel a hack that terrified the tech world. How did he had time to look at the ssh code!? Under what ticket was that? Didn’t he get called out because the 2 points story ticket was taking too long?

On the other hand, software is an incredibly powerful tool to explore problems, build understanding and encode information of a given problem. There are many cases in which software is used like that, but it seems like it’s the minority of cases in the age of SaaS and now LLMs…

All of this is two say, I wonder if the sentiment of software as a basic science of combining libraries need the characterization of “enterprise or CRUD” software development is the basic science of combining libraries until the desired result is accomplished 🤷‍♂️