You also need to know what tooling is required to do the job and depends on what type of programming you are doing.
Machining: Roughing end mills, finishing end mills, reach problems using long length end mills, material issues cast austenitic stainless versus aluminum, ETD 150, hardness of part requiring ceramic machining, deep hole drilling with through the spindle coolant or coolant inducer, fast spiral polished flute taps for aluminum, reaming allowance, back spot facers, screw machine length drills, jobber length drills,
taper length drills, extended length drill, cutter compensation, climb cutting versus conventional cutting, grinding allowance, heat treatment shrink or growth, reaming and roller burnishing, cutting taps versus cold forming taps, spiral point tap, taper tap, bottoming tap, interrupted thread tap, honing allowance, live tooling on a CNC lathe.
Punching: clearance between punch and die, louver punch and die, tonnage limitation, high shear punch, bevel angle for plasma cutting, cut direction differences with plasma, piercing issues with plasma or laser, following error of slides,
Turning: Limiting max spindle speed, decreasing pitch threads.
These are some of the issues I have faced in my career. CNC programming can be very challenging depending on what you are doing. Understanding what you are making and knowing what tools to use is the most important skills.
Good Luck
Bill