the case against ai
        
there has been a flood of different ai vendors offering different solutions to 
different problems. the most disruptive of them being chatgpt for the general
populus, and copilot (and friends) for computer scientists. they lure people in
with a promise of getting work off your shoulders, and sometimes even suceeding
(i did have a couple of friends that passed bash scripting assigments given by
a VERY pedantic lecturer, with older free chatgpt only). however, i want to  
argue against using llms (if you care about the quality of your work), and that
relying on such tools is in the best case unwise, regardless of their level of 
complexity - because they're *fundamentally* unfit for those that really care.



i think it's rather universally agreed on that the brain is a muscle. as
intellectual workers, artists, engineers, designers, anyone that works primarily
with their brain (though i've heard someone say that programmers mainly work
with their eyes, and arguably some do...) - it's desireable to train your brain.
it's straight up benficial. if your brain works faster, more efficient, more
creative, this has a direct effect on your work results. there's of course
flavors to this - a writer doesn't need to transpile c to x86 assembly and back
in their head, and a reverse engineer won't really benefit from expanding their
vocabulary when it comes to malware research. but the common denominator is that
some flavor of brain "strength" is going to benefit you and make your life
easier in the long run, just as moving heavy boxes in a warehouse all day is
going to be easier if you develop good stamina.

besides plain old health, exercising your brain gives you another benefit -
you get new knowledge, ideas, thoughts. to me, the brain is something incredible
for one big reason - association. if you think about it, it's really all it 
does. a face is coupled with the idea of a person, a word is coupled to some
abstract concept, smells are associated with memories. walking happens because
we associated a series of nerve signals with the outcome of moving your leg in
a certain fashion that propels you forward and can be repeated until you are
at your destination (even with respect to variables like if youre wearing heels
or not!). moreover, what is really unique, is that we can make big leaps of 
connections across many domains, and it happens often - for example:

- artists: making a connection and translating a concept related, for
  example, with nature to a physical medium - vivaldi's four seasons
- engineers: getting inspiration from a completely unrelated domain and
  applying its concepts onto an engineering problem - see genetic
  algorithms for example

of course, in the day to day, you are not going to make such drastic leaps. but
something smaller happens all the time - for CS, a category theory result gets
used to improve a programming language, or a new probabilistic algorithm is
found and proven faster than others in a domain previously dominated by very
correct and deterministic approaches. someone had both pieces of required
information ingrained in their brain, enough to make a leap, the leap happened,
and as a result they came up with a new and creative, unconventional solution
to a problem.

yet another nice property of the human brain is extrapolation. if i asked you
to find the value of f(10), if i told you that:

                                   f(1) = 1,
                                   f(2) = 2,
                                   f(3) = 4,
                                   f(4) = 8

you could make an educated guess that f(10) is 512. this applies to much more
abstract settings too - when you know how to draw a cat, and someone wants you
to draw a tiger, you can leverage your knowledge of drawing a cat (and well,
the rest of the information you have about the world) and make a very good
attempt at drawing the tiger, even if you haven't been explicitly told how
to do it.

the combination of association and extrapolation makes the brain a very
powerful tool for basically anything, provided you supply it with lots of
information and experiences. but how do you really put stuff in your brain so
that it can be that effective?

simple, you learn. however you do that - by reading, writing code, practicing
mental transpilation, debating with others, whatever. there's a saying in the
fitness community that the best workout is the one you will do - and this
applies to the intellectual domain as well. the point is making an effort to
develop yourself. that's when you unlock the arcane in your brain.

great rant, but how does that even relate to ai?

situation: you are tasked with implementing an algorithm. this is the first time
you've heard of it, and you're not really sure what the benefit of using it even
is. 

the slow way to resolve this is to start researching - you read papers, books on
the topic, you see implementations in other langauges, you watch a couple videos
on the problem classes this solves. then, after making an effort of
understanding it, you attempt the implementation, resolving errors along the
way, and after painstakingly going through all of this process you now have a
nice implementation backed by good understanding of the problem at hand.
your reward is the knowledge you gained along the way - the next time someone
asks you to write a similar algo, even if it has some bigger differences, you
can easily leverage your knowledge of the first one to solve the new problem
faster - and the solution will be cleaner, more efficient, more expressive as
well because you *learned* good practices along the way with the first attempt.

the lazy way to do it is to just type "write me a fourier transform in Rust"
into chatgpt and copy and paste the result into an ide.

is the lazy way faster? of course, by a long shot - *for this instance*. what
most people miss about using llms for basically anything that requires your
mental effort is, well, it robs you of the mental effort. you're basically
outsourcing your work to someone else.

i can't stress enough the "rob you" aspect of this. you basically had an
opportunity to train your brain a bit, and unless you go back, scrap the llm
code, and start from scratch, the opportunity is lost to you. people who argue
that "the outcome is the same", to me, look through a small lens - your program
does fourier transform either way, but with using an ai to do it for you, you're
none the wiser. when someone then asks you to implement a custom variant of the
fft for some weird esoteric data structure thats convenient for some use case,
it might come to a point where the llm will not be able to do it correctly.
it can only draw a cat. your brain is made to draw tigers.

of course, you can make it a slippery slope argument and say "then using any
tool robs you of the effort" - which is not entirely applicable in this context.
if you want to get better at something, you need to exert effort. but this
effort needs to be concentrated on what you actually want to get better at. if
someone cares about programming, sewing their own clothes will not really make
programming easier for them (unless they can make a leap from needlework to
computer science, which might happen!). buying pre-made clothes of course robs
you of the effort of making those, but this is not how you want to develop in
the first place. it goes both ways - learning how to sew is very beneficial
if you want to design your own fashion collection, but implementing a linked
list won't really help you (unless you can make a leap from computer science to
needlework, which might happen!).

extending this thought more locally, it's ok to for example use some pre-made 
templates for your website if you don't care about webdev at all (though it's 
something nice to know anyway, and your own website is also an expression of you
so it's another thing). you are not robbing yourself of the effort, because you
wouldn't care to exert it anyway. there's an abundance of amazing computer
scientists that have *horrendous* looking websites (torvalds, rms, lattner) or
websites that are just some drop-in template (hotz's blog), it doesn't matter
if it's generated by an llm, because the mental effort is spent elsewhere for 
those individuals. however, me personally, i'd exert it anyway because of the 
making leaps argument i made earlier. i think no knowledge is ever useless, so 
the mental effort is always worth it, even if not optimal towards reaching my 
goals. (learning can just also be fun).



another, less philosophical argument against auto-generated code (without proofs
of correctness, that is), is that it's violating this rule:

                    a computer can never be held accountable
           therefore a computer must never make a management decision

           (ibm slide from 1979)

it's not hard to extrapolate this to *any* decision - decisions about a car
brake driver aren't really management decisions, but an error in a car brake
driver can create a lot of problems. who is then responsible for that error?
if the code is written by a human, the consequences are mostly going to trickle
down to those that were tasked with its development (this rarely is a single
person's fault though). but what if it was written by an ai system? are the
developers of that network responsible? or is it the company that decided to
use it for development? or is it the guy that clicked "enter" to make it launch?
if you're in any part responsible for your code, it's much more robust to run it
through people's minds first, and more importantly of course by consciously
testing it/proving it and making maintainable, sensible changes. even if llm
code is correct, code is written for humans as well and ai generated code might
not infer little (or bigger) style details that make the codebase maintainable.
which is something directly contributing to software quality. so it would be
unwise to use such a tool for software that you have to maintain.



the last important thought about using ai for work like this is about the
creative aspect. llms, or gen-ai in general has this "woo" factor because it can
do things that *look* like creative processes. but they're fundamentally not.
creativity is rooted in self expression - given infinite ways to reach some
goal, we take one that aligns with who we are, what our experiences are, our
taste, style, etc. back to the draw a tiger example - the goal is, well, to draw
a tiger. but theres multiple ways to do it, and all are made of little arbitrary
decisions about the drawing - what's the tiger doing? is the drawing monochrome
or full of vibrant color? is it hyper-realistic, or is it stylized? in what way
is it stylized? all of these things will make your drawing *yours*.

(as far as we know, at least) ai doesn't have a self - it cannot possibly 
self-express. for things that are purely creative, eg. art, ai is basically 
useless. ai poetry for example is about the most pointless thing to come out of 
this - the entire point is to *express* your experiences with the world and wrap
it in beautiful worlds. there's no experience behind generating something that 
looks like a poem as close as possible. it's a party trick at best. but an 
actual artist will never see the appeal of such a tool, becuase it's 
fundamentally at conflict with the notion of self-expression.

(though generating parts of a work to expand upon with your own experiences, i'd
say could be considered art - the self expression is now there - this is a
possible use of ai in art)

extending this to programming - this is going to be subjective - but programming
is also a form of art. it's a little more nuanced because it often needs to
solve some rigid engineering problem; but there are always multiple ways to do
it. this is where you can self express. stuff about making leaps - this is also
self expression in a way, which is very applicable to programming. and if we are
creating any side projects for ourselves out of pure curiosity, without the
constraint of a some shareholder, to me this is very much a creative process - 
we can do anything, and we choose something that aligns with us. this extends
to every part of the process - choosing the algorithms to solve this, picking a
programming language or style, setting the goals for a project, down to the
little decisions about implementation.

ai robs you of that self expression; the scale of the robbery is of course
different, depending on how much you use it. if you just generated some little
helper macro out of laziness, but did everything else in the project, it's
very much mostly yours. but if you generated an entire website, and just changed
the text around, you can't really claim its you who did it, and there's nothing
in that code that makes it "you".



given all of these points, i won't really be using gen-ai for stuff i make. for
me, theres literally no point - i want my creations to express *me*, i really 
enjoy the process of learning, and i already reap the benefits of the mental 
effort compared to my peers. i don't want to miss out on all the fun and
experience i can gain by doing things without outsourcing them to a black box
model (or anything/anyone else for that matter)


a