One thing I'll suggest - if you ever want to cut anything metal, you'd probably do well to learn how machining works in general and by that I mean on a manual lathe and mill. The coding part is going to be easy for you (and probably anyone else reading this), but knowing what you want the thing to do is a MUCH different task than being able to tell the machine what to do.
Everything about how you move that tool through the work matters. Materials, workholding, spindle speeds, tooling, tooling coatings, feed rates, plunge speeds, all of these things need to be worked out and they all change when you swap a tool or a part etc. Speeds and feeds are dynamic, you need to learn about conventional-vs-climb milling, you'll need to know about cutter geometries and the materials the cutters are made of, when and how to deploy coolant, the list just never ends.
GCODE is, by far, the easy part for a programmer. It's a very simple language that hasn't changed much in the past several decades. "Knowing machining" is that tougher hill to climb.
My recommendation? Check your local community colleges/trade schools! I took a couple semesters of machining classes as a 40-something grown-ass dude and I learned a huge amount of stuff that would have been expensive or dangerous to learn by trying. You'll get hands-on access to big machines with someone over your shoulder helping to make sure you keep your limbs attached to your body.
Second this. My work occasionally deals with Gcode files. The coding is simple, knowing what to do (or not to do!) is harder. My first foray into the world of Gcode I named "Smokey" because it was a quick fix for another program generating bad Gcode that quite literally caused smoking on the work surface and could have lead to a fire had the operator not been paying attention.
And note that while Gcode is consistent it's meaning isn't always--is Z positive going into the work surface or going away from the work surface?
Z in a positive direction should always be up on a 3-axis machine --- the only time it might even appear not would be if the machine was already even higher than that position.
One would think so, but apparently it varies between manufacturers. Our machines are all carving up a flat surface resting on a table. I think what's going on is that functionally that means that the working head is permanently upside-down. Is Z measured in the context of the whole machine, or is Z measured in the context of the cutting assembly?
If you literally want to emboss hello world on a piece of foam, you can buy cheap CNC kits on Amazon like https://www.amazon.com/dp/B08HRLGL6C/ which will execute G-code.
They're weak and imprecise by the standards of CNC machines but if you're only looking to learn a bit and cut foam? That's a low price.
lets say I want to emboss hello world on a piece of foam