Don't Imitate Understand - #1

Hello! In this first official issue of the "Don't Imitate Understand" newsletter you'll get:

Course News

Nearly a decade ago I released the course Learn and Understand NodeJS on Udemy. It went on to be among the most popular courses I've ever released, with over 130,000 students enrolling to date.

I've had the goal for a while of giving that course a major update. The good news was a great deal of the course was still valid, because it dives under-the-hood of the Node.js and V8 JavaScript engine source code to explain how you make a web server out of JavaScript.

I'm super excited to say that the course has received a major update. I've added new lectures on some of Node's important more recent features, like support for ECMAScript modules (instead of just CommonJS), and an entire new ending to the course using the PERN (PostgreSQL, Express, React, Node) and MERN (MongoDB, Express, React, Node) stacks. The new updates bring the course to a full 14.5 hours in length.

If you have access to Udemy for Business, or bought the course in the past, you already have access to the new updates. If not, here's a coupon to get it at a really really good Udemy price.

The Dangers of Vibe Coding

The term "vibe coding" is all over social media. It's the idea of just telling an AI (LLM) what you want to code, and letting it do all the coding for you. You speak in natural language, and AI does the rest.

But we might as well call this "Technical Debt: The Fast Way". LLMs are great at helping you code faster. But there are two major issues with vibe coding:

Non-Determinism

LLMs are probability machines. They are "non-deterministic" which means they aren't guaranteed to give you an accurate or consistent output for your input. The more output you generate, the higher the probability of a problem arising.

For important, production code, I would never "vibe code" my way there. You need to provide an LLM guidelines, structure, and code review. Even then, LLMs tend to produce complex code with hard-to-find edge case bugs.

Thus, vibe coding works when you're just producing a quick prototype that isn't meant for production. If you vibe code your way to a deployed production app of any importance, at some point non-determinism is going to hurt you. Maybe badly.

Understanding

Vibe coding, ergonomically, leads to a kind of mental laziness. It's the ultimate copy/paste solution, and leads devs away from understanding the code they are deploying. But at some point you will have to debug the LLM code (and no, the LLM won't always be able to find the problem for you).

You can and absolutely should ask the LLM to explain the code it generates. Even better, tell it to put explanatory comments in the generated code to assist your review (you can always remove comments you don't want in production).

Still, that won't be enough to be confident that a "vibe coded" app is secure, performant, and standardized. Especially if you use newer technologies that the LLM doesn't have many examples of in its training set.

Realism

Terms and approaches like "vibe coding" tend to be pushed more by the people building LLMs (and asking for investor money) than experienced senior developers deploying mission-critical software.

Realistically, LLMs aren't ready to code large important apps without careful developer guidance (and as a non-deterministic technology they will likely always need dev guidance).

By all means improve your prompting skills, learn to give LLMs the best chance at producing good code, and use AI to give your productivity a massive bump. But my advice is not to buy into the vibe coding hype. AI is a probabilistic tool, not a new reliable level of abstraction.

Think of AI is the ultimate imitation tool. The motto applies more than ever: don't imitate, understand.

Links

I have two educational links for you this time around:

That's it for this first issue.

You received this because you either a) signed up for the newsletter directly on tonyalicea.dev or b) get emails from dontimitateunderstand.com. If you enjoy my content, please let other people know about the newsletter!

They can sign up here: https://tonyalicea.dev/newsletter/.

Happy coding!

Tony Alicea