Access our API for our Downloads and Scripts

Let Your AI Assistant Search My AutoHotkey Tools Here’s something that used to drive me nuts. Someone would ask me “Joe, do you have anything that grabs data off a web page?” and I’d have…

Continue reading

The Programming Language Decision Guide I Wish I’d Had Years Ago

AutoHotkey, Python, and Now Rust: How I Decide Which Language to Use

A few weeks back I was sitting there staring at a Rust compiler error for the third time in an hour, and I caught myself thinking: why am I doing this to myself? I have an AutoHotkey script that already does something similar. It works. It took me twenty minutes to write.

And then the Rust version finished processing a batch of audio files at 212 times realtime, and I stopped complaining. 😊

That moment is basically this whole article. After years of building nearly everything in AutoHotkey, I started branching out. Some Python. Now Rust. And the question I kept bumping into was not “can I learn this language?” It was “how do I know WHEN I should reach for something other than AHK?”

Have you ever felt that? You know one tool really well, you suspect you’re using it for jobs it wasn’t built for, but you have no idea where the line actually is.

So I sat down and worked it out. Then I did something I’d recommend to anybody: I took my answer and had four different AI models tear it apart. More on that in a minute, because they caught a mistake that would have cost me real time. Now on with the show…

Choose Your Next Tech Stack For the AI Era

Choose Your Next Tech Stack For the AI Era


The Question Isn’t “Which Language Is Best”


That question is a trap. It leads to arguments on the internet and nothing useful.

The useful question has four parts, and I ask them in this order:

  1. What does it have to touch? Windows itself? A web page? A GPU? Files?
  2. How am I delivering it? A single .exe? A script? A URL?
  3. How long does it live, and who maintains it? Me forever, or the client next year?
  4. Does speed actually matter? Usually no. I check this LAST, not first.

That third one is the one I used to skip, and it turns out it’s the one that matters most. More on that below.

Answer question 1 honestly and about 80% of these decisions make themselves. If the task IS “click that button in that Windows app,” you’re done. It’s AutoHotkey. Stop reading and go build it.

Where AutoHotkey Still Wins (And It’s Not Close)


Let me be really clear, because I don’t want anyone reading this and thinking I’m walking away from AHK. I’m not. It’s still where most of my work happens.

For these jobs, nothing else is even in the same building:

  • Global hotkeys. Three lines in AHK. Fifty in C#. Good luck in Go.
  • Driving another Windows app. UIA, window control, sending input. This is home turf.
  • COM automation. Excel, Outlook, whatever. Terse and readable.
  • Quick internal tools. The stuff you build for yourself on a Tuesday afternoon.

For internal automation I’ll still finish 5 to 10 times faster in AutoHotkey than in anything else on this list. That’s not nostalgia, that’s just measuring. Speed of BUILDING is a real kind of speed, and it’s the one that usually matters. ⚡

The Part I Was Missing: When to LEAVE


Here’s where the AI review earned its keep. My first draft of all this listed strengths and weaknesses for every language, and one of the models pointed out that I never actually answered my own question. I described the languages but never said when to leave AutoHotkey.

Ouch. Fair. So here it is. I move up when ANY of these are true:

  • The script passes roughly 500 to 1,000 lines and keeps growing
  • It needs real concurrency (AHK is effectively single-threaded)
  • It needs tests that run automatically
  • It has to run unattended for long stretches
  • The client will maintain it, not me
  • I need a real compiled binary that doesn’t unpack back into source

That last one surprised me when I thought it through. An Ahk2Exe file doesn’t really compile anything, it bundles the interpreter. Anybody who wants your source can get it back out in about a minute. For most of what I do that’s completely fine. For a paid tool going out to a client, it’s worth knowing.

The Short Version of Each Language


LanguageReach for it when…The catch
AutoHotkey v2The task IS Windows interactionNo tests, no threads, gets fragile past ~1,000 lines
PythonA library already does 80% of the job (AI, data, PDFs, Excel)Shipping it to a client is genuinely painful. 15MB to 150MB .exe files
RustCPU-heavy work, or you want a clean 3MB .exe with no runtimeSteep learning curve. Weak native GUI story
C#A real desktop app with native controls, going to a clientRead the warning below before you plan around file size
TauriYou want a GUI, you already know web, and you want a small .exeWeb UI, not native controls. Rust underneath
GoNetwork services, simple CLIs, and you don’t want to fight RustCOM work is miserable
PowerShellRegistry, WMI, AD, or “run this once on a client machine”Execution policy friction. No real story for a shipped GUI
The C# thing I got wrong. I had written that C# gives you a polished desktop GUI AND a tiny 10MB standalone .exe. All four AI reviewers flagged it. That combination does not exist. .NET’s Native AOT (the thing that makes tiny .exe files) does NOT support WPF, and WinForms support is experimental. So you pick one: a small console app, or a GUI app that ships at 60MB to 150MB. Good thing to learn from a review instead of from a client asking why the download is so big. ❗

The Rule That Fixed Everything: Wrap, Don’t Rewrite


This is the one that took most of the stress out of the decision, and honestly I feel a little dumb for not seeing it sooner.

You don’t have to pick ONE language per project.

I kept framing this as “should this tool be AHK or Rust?” when the real answer is usually both. AutoHotkey stays as the Windows glue, the hotkeys, the window handling, the GUI. And when there’s a slow part, that slow part becomes a small Rust or Go DLL that AHK calls with DllCall. Or a little compiled command-line program that AHK shells out to.

The workflow I’ve settled into:

  1. Prototype in AutoHotkey. Fastest way to find out if the idea is any good.
  2. Find the slow part (there’s usually exactly one).
  3. Move ONLY that part to Rust or Go as a DLL or a small .exe.
  4. Keep AHK driving the whole thing.

This is not a compromise or a fallback. It’s how a lot of shipped software actually gets built. And it means “learning Rust” stops being a scary rewrite and becomes “write one small function that does one fast thing.” Way less intimidating. 🚀

How Well Will AI Write It? That’s a Real Criterion Now


Here’s something that would have sounded ridiculous five years ago: how well AI writes a language is now part of how I choose it.

Don’t get me wrong, I’m not letting AI pick my stack. But if I can build something three times faster in a language because the AI is fluent in it, that’s real. Three things predict it:

  • How much code exists to learn from. Python and TypeScript, tons. AutoHotkey, not much.
  • Can the AI check its own work? This is the big one. Rust and C# have brutal compilers that catch mistakes instantly.
  • Version confusion. Python 2 vs 3, and AHK v1 vs v2, both poison the training data.

That middle one flips the ranking in a way I didn’t expect. If you’re just chatting with an AI, Python wins because there’s so much of it out there. But if you’re running an AI agent that writes code, compiles it, reads the errors, and fixes itself in a loop? Then Rust and C# actually pull ahead, because the compiler tells the AI exactly what’s wrong. Python fails at runtime, which is much harder to diagnose.

And AutoHotkey? No compiler. No type checking. No test framework. That means an AI agent has almost no way to verify its own work. That’s a big part of WHY AI writes weaker AHK, and it’s not something more training data alone fixes.

Practical tip: when I have AI write AutoHotkey, I paste v2 documentation into the conversation first. It cuts down the v1 syntax leaking in by a LOT. Small habit, big payoff.

The Boring Stuff That Decides More Than the Language Does


If you ship tools to other people, this section matters more than half the comparison table above. It sure did for me.

  • The SmartScreen warning. An unsigned .exe throws a scary Windows warning, and your client will report that as “your tool is broken.” The standard advice is to go buy a code signing certificate. I’ll be honest, I think that advice is mostly oversold. The certificates are EXPENSIVE, the whole reputation system is murky, and a fresh certificate often doesn’t stop the warning anyway until it has built up enough downloads. You can spend real money and still watch the same scary screen pop up. My approach is simpler: tell the client the warning is coming, show them the “More info” then “Run anyway” click, and hand it over through a channel they already trust. Setting the expectation beforehand solves the problem better than a certificate does, and it costs nothing.
  • Antivirus false positives. This one is not equal across languages. AutoHotkey and Python .exe files get flagged FAR more than native Rust, Go, or C# builds. If your client has aggressive managed antivirus, test that early.
  • Can they read your source? AHK unpacks instantly. Python decompiles. C# decompiles in seconds with free tools. Rust and Go are real machine code and much harder to reverse.
  • Who maintains it in two years? Nobody can hire an AutoHotkey developer. That can be leverage if you want the ongoing work, but it should be a choice, not an accident.

Where I’m Headed


So here’s my actual plan going forward:

  • AutoHotkey stays the default. Hotkeys, window work, app automation, internal tools, prototypes. That’s not changing.
  • Rust for the heavy lifting. Audio processing, batch jobs, anything where speed genuinely matters. Usually as a DLL that AHK calls.
  • Python when the library IS the product. AI work, document handling, data.
  • TypeScript and Cloudflare Workers for anything phone-shaped. Already doing this and it works great.
  • C# is my biggest gap. It’s the honest graduation path for polished client-facing desktop apps. Real GUIs, real threading, real tests, and AI writes it well.
  • Tauri is the one I’m most curious about. Rust backend, web front end, 3MB to 10MB .exe file. It sits right where my Rust learning and my existing web work overlap. It might get me a shippable GUI faster than learning C# and XAML would.

One thing I’ve learned from all of this: the goal was never to replace AutoHotkey. It was to stop using AHK for jobs where something else finishes faster, ships cleaner, or holds up better over time. Knowing where that line sits makes me BETTER at AutoHotkey, not less committed to it.

Go Have Your Draft Grilled


Quick side note that might be the most useful thing here. I wrote my version of all this, felt pretty good about it, and then sent it to four different AI models and asked them to find what was wrong with it.

They caught a flat-out factual error (the C# thing), an entire tool I’d never heard of (Tauri), and the fact that I never answered my own central question. All four independently flagged the same problems, which is exactly the signal you want. When four models that disagree about plenty all point at the same paragraph, that paragraph is wrong.

It took about ten minutes and it saved me from confidently telling people something untrue. I highly recommend making that a habit for anything you write, build, or plan. It turns out being wrong quickly and cheaply is a superpower. 🤖

Where to Start With Each One


If any of the above made you curious, here’s where I’d actually send you. These are the official docs and the genuinely good free starting points, not a pile of random tutorials.

  • AutoHotkey v2: the official v2 docs and the AutoHotkey forums, which are still one of the friendliest communities out there.
  • Python: the official tutorial to learn it, plus uv for package management (it made Python tooling genuinely pleasant) and PyInstaller when you need an .exe.
  • Rust: The Rust Book is free and excellent. Rustlings gives you small exercises if you learn by doing. For Windows work specifically, the windows-rs crate from Microsoft covers the whole Win32 API.
  • C#: Microsoft’s Tour of C# to start, then WinForms for GUIs. If you want to do UI automation the way AHK does, look at FlaUI and Vanara (comprehensive Win32 bindings). Without those two, C# automation is a lot more painful than it needs to be.
  • Tauri: the getting started guide. If you already build web front ends, you’re most of the way there.
  • Go: A Tour of Go runs right in your browser, and Wails is Go’s answer to Tauri if you want a GUI.
  • PowerShell: the official docs. Already on every Windows machine you’ll ever touch.
  • TypeScript: the TypeScript Handbook, and Cloudflare Workers if you want to put something on the web without managing a server.
Don’t try to work through all of these. Pick the ONE that matches a problem you actually have right now. Learning a language without a real problem to solve is how you forget it in three weeks. Ask me how I know. 😊

How About You?


Have you hit the wall where your favorite tool stopped being the right tool? Did you push through in the language you knew, or did you branch out? I’d genuinely like to hear about it, especially if you found a combination that works well together.

And if you’re sitting on the fence about learning something new: try the “wrap, don’t rewrite” approach. Write ONE small fast function in a new language and call it from the AutoHotkey you already know. That’s a Saturday afternoon, not a career change. Life is an experiment. Go run one. ⚡


P.S. The single biggest takeaway from this whole exercise: you don’t have to pick one language.

Keep AutoHotkey doing what it’s great at, and let a small compiled helper handle the one slow part. That one idea removed almost all of the pressure from the decision, and it’s the approach I’d hand to anyone asking the same question.

Want to get sharper with AutoHotkey while you’re at it? Check out the courses and free content over at the-Automator.com.

Using the YouTube API to upload videos is a pain❗

I Tried 3 Shortcuts to Auto-Upload Videos to YouTube. Every One Was a Trap.

I set out to build something simple: a tool that uploads videos to YouTube for you. No more dragging files into YouTube Studio, filling out the same boxes, and babysitting the progress bar. Just click a button and get back to work.

Holy cow, was there a rabbit hole waiting for me. 🕳️

Have you ever started a project that looked like a two-hour job and turned into a two-week education? That was this. And honestly, the lessons were worth more than the code. So let me walk you through the three shortcuts I chased, why each one blew up in my face, and the boring path that actually works.

Now on with the show. 🚀

The dream: automate the boring part


Every creator I know wastes real TIME on uploads. Open the browser, drag the file, type the title, paste the description, pick the thumbnail, set the privacy, wait. Do that a few times a week and it adds up fast.

That is exactly the kind of repetitive nonsense I love to AUTOMATE. YouTube even has an official way for programs to upload for you. Great. How hard could it be?

The upload part turned out to be the easy 20%. Getting permission to upload was where the fun began.

Shortcut #1: Have every user set up their own Google keys


My first idea felt clever. Instead of me asking Google for permission, what if each user gets their own set of Google keys? Everybody gets their own upload budget, and I stay out of the approval mess.

Then I actually looked at the setup. It is roughly 15 fiddly steps on Google’s developer website: create a project, turn on an API, configure a consent screen, add yourself as a test user, copy two long secret strings. I do this stuff for a living and it is annoying. Now picture handing that to a busy YouTuber who just wants to upload a video. 😬

But the setup pain was not even the killer. Here is the killer:

Any video uploaded through an unverified Google project gets locked to PRIVATE. You cannot appeal it, and you cannot flip it public. You would have to re-upload it the normal way. Ouch.

So even if a user survived the setup, their videos would come out stuck as private. Asking every single customer to also pass a Google audit? Not happening. Dead end.

Shortcut #2: Borrow the browser login (the cookie trick)


Next shortcut, and I will be honest, this one was tempting. What if the user just logs into YouTube in Firefox like normal, and my tool quietly reuses that logged-in session to upload? No developer keys, no setup, and best of all, none of Google’s stingy upload limits.

Don’t get me wrong, technically it can be done. But then I asked the question that matters for anything you plan to sell: what happens when it goes wrong?

And the answers were ugly:

  • It breaks YouTube’s rules. The risk lands on the customer’s channel, not mine. Think throttling, or in the worst case, a banned channel.
  • Google actively hunts for this kind of thing.
  • It breaks every time Google tweaks their website, which is constantly. So I would be shipping refunds and firefighting forever.

Selling a tool that can get a paying customer’s channel banned? That is not a business, that is a lawsuit and a reputation bonfire. 🔥

For my own personal channel, sure, I would risk it. As a product, absolutely not. Dead end.

Shortcut #3: Just use OBS, everybody has it


Third idea. A ton of creators already run OBS, and OBS connects to YouTube. So maybe I could lean on OBS to do the upload and skip the whole permission headache. I was even fine telling users “you need OBS installed.”

It turns out OBS does not upload recorded files at all. Its YouTube connection is for going live, streaming, not for pushing an .mp4 up to your channel. OBS records to your hard drive, and then you upload that file the normal way, by hand.

And no, I could not borrow OBS’s Google approval either. Requiring OBS would just add a dependency that solves nothing. Dead end. Three for three. 😅

The wall I kept crashing into


By this point the pattern was obvious. Every shortcut ran into the same wall: Google will not let an unverified app post public videos. Period.

That is not a bug or a loophole to route around. It is Google’s anti-spam brake, and it is on purpose. Which meant the only real path was the one I had been trying to avoid.

The boring answer that actually works


The right way is the one every serious tool uses. I get my own app officially approved by Google. My customers just click “Sign in with Google,” click “Allow,” and they are done. No setup, no scary steps.

Sound familiar? It is exactly how DaVinci Resolve uploads to YouTube. You sign in once, grant permission, and Resolve handles the rest. TubeBuddy and VidIQ do the same thing. There is a reason they all landed here.

The catch: getting approved takes a Google review that runs weeks to a couple of months, with some back and forth. That is the whole price of admission. It is annoying, but it is a one-time gate, not a per-customer headache.

Here is the reframe that made me feel better about it. Those review weeks are not dead time. The hard technical piece, the actual uploader engine, is already built and tested. So while Google reviews the app, I can finish the product, write the docs, and start a waitlist. The wait is also a moat. It is just annoying enough to keep the shortcut crowd out of the legitimate market.

Once it clears, uploads can go public and the daily limit jumps from a tiny handful to hundreds or thousands, with room to ask for more. A real, safe, durable product instead of a clever hack that dies on the next Google update.

What I actually learned


One thing I have learned over and over: chasing the shortcut usually costs more than the “long” way. I burned a good chunk of time proving three clever ideas were traps. But that is not wasted time, that is how you find the real path. Life is an experiment. The only real failure is not learning anything. 🤖

And the biggest lesson? When you build something to sell, “does it technically work?” is the wrong question. The right question is “what happens to my customer when it breaks?” That one question killed two of my three shortcuts on the spot.

How about you? Ever chase a shortcut that ended up being the long way around? I would love to hear about it.

Want to follow the build?

I am putting the finishing touches on the uploader while the approval clock runs. If a “click once and it uploads for you” tool sounds handy, keep an eye on the-Automator.com and come learn how to automate the boring stuff with us.

P.S. The upload engine was the easy part. The real project was learning which door Google actually leaves open. Automate the boring stuff, but do it the way that lasts. 😊