The Problem I have with AI Today

This is a rant post.

The problem I have with AI has multiple layers. I'll try to cover them as best I can in this post. However, this may change over time.

Premise

It started with an email from Lovable. This weekend, they are doing "free credits" for this championship match among the top AI companies out there: OpenAI (ChatGPT), Anthropic (Claude/Sonnet) and Google (Gemini).

So I login to see what's going on and what can be done. I talk with ChatGPT a bit on the side to help me craft the perfect prompt. Then I feed that into Lovable to see what the result is.

My intention is to have it build the scaffolding and beginning of the front-end so I can continue developing the back-end and have the app up in a weekend. This should go like a breeze, right?

Wrong...

Problems

  1. Current AI Limitations
  2. Perception Created
  3. Results of Perception

Let's break down all these points I see and the outcomes they may produce down the line in the hopes I can save at least a few from the impending disaster brick wall I see up ahead.

Current AI Limitations

Let's get one thing straight: AI is an umbrella term. It's better to say LLM's or Large Language Models. I really dislike how people put a huge generic term on something so nuanced. Then again, that's how uninformed people are who don't know better. So let me inform you: It's better to call them Language Models than Artificial Intelligence. AI includes your recommendation engine, search engines, scripts and code and programs we've written as humans. Measuring intelligence is a multi faceted evaluation. While technically correct, it undermines the grand and vast scope that this term encompasses.

My issue with the current limitations around LLM is its lack of configurability and lack of options. While it's great that it can handle most boilerplate tasks, it's frustrating when you want to go deeper and understand more of what's happening under the hood. Even more than that, if your objective is to leave the walled garden these products like BlackBox, AgentGPT, v0, and Lovable have created, then you would be hard pressed to ask for anything outside of what they were trained to do.

If you want to do anything outside of "the happy path", then you're fscked. If you want to configure beyond just the "Intro to ReactJS" tuts, then you're fscked. If you want your app to scale, you're fscked. If you want anything other than just a pretty interface that actually functions, you're fscked. I don't like how this introduces the idea that anybody can code because (maybe I'm starting to have a little respect for experience) not everyone was meant to be a coder.

ReactJS vs Angular

My issue is this: I'm an Angular engineer at heart. I understand the box-style definitions and architecture Angular has created in their ecosystem and strongly prefer the extensibility and design patterns they've created in order to serve what that community offers. I was raised on MVC (Model-View-Controller). The separation of duties between logic, controls and presentation just makes sense to me. It's easier for me to think of things from the context of imported libraries, internal API endpoints that separate the context between logic and data controls, vs services and data presentation. If anything, the "view" is the front-end and really should not be processed by the back-end. Which is why I loathed PHP so much in that it was constantly trying to integrate the concepts into a single operation which intrinsically introduced so many security bugs by nature. This is also why I hate Wordpress because it's just a remote shell with the side effect of being a blog. It breeds so much surface area in app function and feature richness that it discards the importance of security. As a result, there's all kinds of vulnerabilities in its operations and also the core reason why I avoid it like the plague.

I dislike ReactJS and it's tree-like structure. Seeing TypeScript and XHTML mixed together like that touches my brain in very abusive ways that makes me question my sanity after working with the product. I feel like I have to goto therapy afterwords and point on the doll where I was touched and how that made me feel. The way devs will build out extensive trees to make an app function and how huge the files get because they are trying to slam all that functionality in the same file boggles my mind how they can make sense of that. Which probably contributes to why the project is particular about how data is rendered and formatted because it's rife with devs who don't know what they are doing and just slamming stuff together until it works. It's just a mess and makes sense why all the LLM's are trained on this first because, if you notice and pay attention, they are just repeating the same ReactJS beginner tutorials in all the projects created. If WebDev continues down this path, it's only a matter of time before all websites look the same and lack the true creativity web designers used to implement many years ago.

I understand this is just a preference and it's mine. Normally, I don't care as long as it functions and works, but I find myself becoming more opinionated as I grow in my years. Who knows, I may just be that crotchety old man by the time I'm 50? Who knows... 🤷🏾‍♂️

Perception Created

As a result of all this discussion that "AI makes it so easy to code without knowing how to code" and the introduction of this new term "vibe coding" has really shifted the perception around what's possible. While it's great to give easy options and low-hanging-fruit to devs who are not devs, I don't agree with this perception it's created. What if something goes wrong with your app? What happens when it falls under stress? Are you thinking about when it does "go viral" and you find yourself with 1000, 10k or even 100k concurrent users? Have you thought about that? LLM's certainly aren't since they are still on the "Introduction to ReactJS tutorials". So when your app breaks and you can't figure out what's gone wrong with it, what are you going to do? Do you pickup coding at that point, peek under the hood and try to figure it out yourself? Of course not, you never had respect for that process to begin with, so why should have respect for that now? You're going to end up overpaying some experienced dev to come and cleanup your mess because you were too lazy to understand how it worked in the first place and now you don't have the patience to understand how it works.

So, no, I don't believe AI is going to take over the world and displace all these jobs. It may be temporarily disruptive, but all it's going to do is displace the beginners who don't have respect for the craft in the first place. The money-hungry bottom feeders who want $400k/yr with a Bachelor's and 2 years internship and pretending to program at some huge corporation where it's only too easy to just fade into the background and call themselves "l33t d3vs". The ones who want the world delivered to them on a silver platter without working an ounce for the outcome or having the patience it requires in order to properly debug and build a robust and solid application. I'm paraphrasing here, but Former CEO of Google said that LLM's can already code better than 60% of engineers. IMHO: Those people should not have been called engineers in the first place because they hadn't surpassed the beginning tutorials and what was required to be an engineer in the first place.

Results of Perception

I am no exception to propagating this idea: You don't need a college degree to get a job in IT. All you need is experience. While this was true in the beginning, I think employers are starting to clue in on the idea that yes, experience is important, but so is education. While one may have a bunch of experience with no formal education, they are only knowledgeable in the areas they've touched and eventually get pigeon holed into the technology they know best. With formal education and experience, you know the higher level ways of getting the job done and can explore your options rather than just "doing what works".

I understand the idea around this "You don't need formal education" mantra. There's a lot of IT work to be done and not enough people who are up to snuff on how all this works. As a result, we wanted to make it easy for folks to tap into the potential that is their mind by just taking action. This is great, more engineers means more help, right? We really do need more intelligent people in the world taking the initiative to learn how this stuff works so we can be more effective as a team rather than sole individuals.

Not to mention: Formal education is SLOW and takes forever to develop a proper rubric around how a technology works. By the time a book goes thru the institutional process of organizing -> review/edit -> publish -> approve -> accept -> curriculum, the software has already updated and the next revision is out by the time ink hits the paper and you have a coherent document out there. This is why many are skipping the rest of the process and documenting as the product gets built. In this way, the software comes with a decent manual that hopefully contains everything you need to setup, troubleshoot, configure, deploy, and iterate. So, I understand the lack of patience with formal education, valuable as it may be.

The challenge of education-only::no-experience is: You don't know what these systems will look like when real users are interacting with the product(s) or service(s). You lack what real-world metrics and data look like, so it may be haphazard at first. This is quickly overcome by gaining experience. However, by being spoonfed information up until this point, it may make you risk-adverse. You'll only do industry standards stuff and avoid diving deep into the code, software, or operations to streamline operations and/or results. You'll require all projects be properly defined and have a lack of capabilities in being able to take vague requirements and turn them into something meaningful. This puts additional burden on project managers since they have to dissect and distill down requirements to be more specific instead of trusting the engineer to "build what works". This is great for formal and large corps and businesses; not so great for small and nimble startups that need products shipped by this Friday.

The challenge with experience-only::no-education is: You only know the software to which you've been exposed and experience. You'll quickly "hack" things together to make them work. While this is great for getting up and running quickly. Then, you'll quickly run into dev related scale issues. Anytime other devs or systems engineers come into the picture, there's a bottle neck in the amount of tribal knowledge contained within the mind of the one sole engineer that setup the entire project or platform. A single point of failure at the engineer level means you can't scale the team any further than the sole engineer can think and type out the results. The sole engineer building the systems is handicapped because they can't learn and explore new products or services that will allow them to scale faster; due to the fact that 100% to 120% of their time is solely supporting the product or platform. Trust is not built because of the experience gap. They will become heavily opinionated in their operations and potentially even emotionally tied to the work they've put in because who wouldn't be proud of what they've built?

As a result of the perception we've created around this, the issue I see has a few outcomes:

  1. Lack of respect for the patience, work, and education required in order to build effective systems.
  2. Systems may become unified; not on what works, most efficient and objectively better, but what is most trained, kinda like a bad habit. This can result in bad habits becoming the norm, and will make it incredibly difficult to change once it's trained into the core of the neural net.
  3. Intelligence gap: With the lack of respect for the education, I fear this may bring about a "brain-drain" whereby we will just offload our education and experience into these models and avoid learning how it works. Thus, bringing idiocracy closer to our reality.

What I would like to see is more education and intelligence around all of this. I really want people to foster more critical thinking. It's absolutely abhorrent that "critical thinking" has become a racially biased and political term in recent times.

I hate using these terms because people then think I have put on a jersey and picked a political team when I haven't: I consider myself an independent because I still reserve the right to think for myself and will always be in favor of this. However, it's important to socialize and democratize education and decentralize knowledge so that everyone has the option to reach their full intellectual potential. I will always be in favor of education, intelligence and erudite.

Conclusion

Right now, LLM's who claim to code are just interns, beginner software engineers who don't know what they are doing and can only produce what humanity has already done a million times too many. If you want to be a pioneer in anything outside of the "happy path" of coding and building apps, then you will be on your own and using your own intellect for this. I will repeat this until I am blue in the face going purple: DO NOT GIVE UP YOUR AGENCY! The more you let other things think and make decisions for you, the more you are giving your power away. I violently disagree with this and feel that folks need to continue to think for themselves because free will is paramount.

Blame is just another word for responsibility. So instead of blaming the system for how shitty it is, I would rather see people taking up agency to help themselves become the best they can be. Honestly, I'm sick and tired of seeing people complain without action nor a plan on how they would make it better. I always come with solutions if I see a problem because that's the kind of person I am at my core. Anytime I have seen someone in public (e.g. "real life") complain about something and I either offer solutions or ask them what is the solution, they shrug their shoulders going "I don't know" and that angers me more than anything else. Why complain in the first place if you don't have a better solution??? Why have a problem with the way something happens if you haven't thought about how it could be improved? Or are you just angry because someone else told you to be angry and letting them control and dictate your emotions?

I would tell one to continue to learn, be the best they can be and understand that there is no "one size fits all" solution to anything. When it comes to software engineering, there's no such thing as "the best programming language" ever. There is no such thing as "the best framework ever". There is the tool you know how to use best. There is the tool that produces the best outcomes. Programming languages, LLM's and everything else under the sun is: A tool. It's just a matter of understanding the capabilities, limitations and outcomes of that tool and having the discernment for how that tool is used.

Thank you for reading my Ted Talk!

Comments

Popular posts from this blog

Setup and Install Monero(d) -- p2pool -- xmrig

Build xmrig on Linux

Pulseaudio: Multi-User Setup