Vibing my way to competence

Following my curiosity to a logical conclusion.

Vibing my way to competence
"Spectra of various light sources, solar, stellar, metallic, gaseous, electric", print by René Henri Digeon; plate IV in Les phénomènes de la physique (1868)

Perhaps the most exhilarating aspect about AI is that you can build just about anything that you think of. You don’t need to know how to code. You don’t even need to write very well. All you need to do is describe what you want, and the model takes it from there.

This is the essence of vibe coding, and it's tempting to offload all the "thinking work" to the model, but for a learner like myself, I like to think about this as vibing my way to competence.

Working with AI enables me to see the different—yet equally plausible—approaches I could use to tackle a particular problem, even if I don't yet have the technical savvy to implement a solution from scratch. Over the past few weeks, I've been able to build and execute tasks that would have taken years of programming and data experience to develop the necessary competencies to just attempt the work.

But with some skillful prompting and a truckload of critical thinking, I can weigh the pros and cons of different approaches and walk through the process that I deem best. For me, the real learning value is being able to experience an extremely technical process step-by-step, from development, iteration, debugging, and finally, execution.

Generating possibilities

It’s one thing to write the obligatory "Hello world!" script in a new language. It’s quite another to generate a 300+ line Python file that will download data straight from an API and turn that to something useful for you. Experiencing the value of coding in real time provides a macro view into the possibilities. That's a unique kind of learning leverage. It's valuable to know how to do a thing like writing a loop. It's far better to see how a loop can be applied to handle gnarly repetitive processes that would take a human dozens of hours to complete.

It's like being able to learn what goes into writing and publishing a novel you really understand how to write top-notch paragraphs.

In this process, I get a front row seat to see amazing instances of applied programming that solve real problems for me today.

Instead of learning abstract conceptual factoids like "Python can be used for data analysis and automation," I can see the language in action, which broadens my understanding of what's possible.

Instead of learning about the process of data analysis, I can walk through the steps of data analysis, which gives me a great appreciation for the inputs and outputs that make for useful insights—even if data analysis isn't my forte (yet).

Instead of learning about API endpoints and scopes, I get use APIs to solve practical business problems.

This is learning by doing on a higher level.

Sure, the AI is doing the work of writing the code, but even while I'm using AI to generate code for me, there's still lots of active participation. I'm still responsible for:

  • defining the context
  • articulating the problem (which is the most important part)
  • creating the directories and putting the code files in their proper place
  • running the commands from my terminal
  • evaluating and testing the outputs to ensure they're what I expect / meet the intent

I also like to skim most of the code to get a sense of how things are structured (I think this is super valuable because I can feel myself becoming more familiar with the structure and syntax of different languages).

In the old days of woodworking or automotive repair, we might watch a master craftsman or technician perform mind-boggling feats based on their decades of lived experience.

When it comes to coding and technical work, we have access to pretty much the entire corpus of expert programming knowledge, and we can watch how the work gets done. For example, when I use Claude in VS Code, I get to read a brief output of how the model is approaching the task, which in many cases is just as interesting as the final output.

Real world outputs, real world learning

Here's a non-exhaustive short list of things I've been able to do with vibe coding / AI prompting in the past few weeks:

  • build an MCP server for Basecamp
  • generate a Python script to download, transcribe, and analyze 900 inbound Zoom calls to figure out which ones were actual leads and which ones were junky
  • extract thousands of media items from a proprietary platform with no publicly documented API or a bulk download function for a massive content migration project
  • configure a website to display location-specific phone numbers dynamically based on the browser's IP address
  • generate PHP scripts that bulk create items (i.e., Categories) based on a CSV within a WordPress install
  • use WP-CLI to a greater degree than I ever have before
  • build very slick custom content sliders in WordPress that drop in with a shortcode and use the SplideJS library for display.

And here's a brief list of things I've learned:

  • Why a virtual environment (venv) is used in Python development for consistency across environments. I learned the hard way by running a script on my Mac and then trying to run it on my NAS. "Worked on my machine," but not on the NAS...
  • What the requirements.txt file does in a Python project and how it helps with project portability
  • How to use WP-CLI to directly query the WordPress database (didn't know this was possible) For example: wp db query 'SELECT option_value FROM wp_options WHERE option_name="home"'
  • Lots of nuances about APIs and scopes
  • Practical uses of adding JavaScript to functions.php in WordPress
  • How to use the Network panel in the browser to examine network requests for both page speed optimization and for understanding how content is getting served up (e.g. checking whether images are being served in the proper format from the CDN)
  • That Python scripts can be built to include logging
  • How to tail logs for realtime monitoring of a script's progress
  • Why Google Cloud projects have more complex setup requirements compared to other tools that just give you an API key and let you have open access to their services
  • How grep can be used to display actively running processes on a machine
  • How to use the Virtual Machine Manager on my Synology NAS (Tested by installing AntiX Linux on a VM)
  • How to enable third-party packages and software on my NAS (plus lots of neat things about how to leverage my NAS more extensively)
  • How user account permissions can affect developer API access permissions in Zoom
  • How to run scripts with nohup on my NAS and my laptop so longer running scripts complete running after I close my terminal
  • Lots of things about the Extract, Transform, Load process for data analysis while building a marketing dashboard using Funnel.io and Looker Studio
  • How certain commands in Fish shell differ from Bash
  • In the instance of the Splide sliders, how to add custom PHP, JS, and CSS to a WordPress directory to add very advanced functionality beyond what Kadence (or any other theme) offers.

I know a lot of things about web development and data analysis, but I am by no means an expert in every single topic. I simply know how to think about things and iterate on solutions, and AI enables me to do that with access to encyclopedic domain-specific knowledge at a speed that is absolutely unprecedented.

I am learning not only how to develop, but also how to think about development. I'm getting better not just at problem solving but also problem finding. And by virtue of prompting so much, I'm writing a lot about the problems I'm trying to solve, which in turn sharpens my thinking.

I'm sure lots of people treat prompting as a passive process: "Well, the AI told me X." I think that's foolish. Taking the outputs at face value is the path to pain. As amazing as today's models are, I still find tons of places where they hallucinate product features, menus, and configuration options; lose the plot (especially in really long chats); and generally do stupid things. You have to keep your eye on the ball, which in this case is:

  • the real problem you're trying to solve
  • the context in which that problem exists, along with
  • all the attendant human dimensions of said problem.

If you manage to do that, then AI is a fantastic aid to learning. I've learned more in the last three months about so many different things than I ever thought I'd learn in a single year. And all without expensive courses or long-term degree-grade commitment.

Learning always starts with being curious. And if you stay curious (with a healthy dose of skepticism), you can vibe your way to competence and stretch your thinking in ways you never thought possible.