So CAD part design is a lot like programming, so why not use an actual programming language? That way you get the editing and version control of a programming language.
OpenScad works fairly well for 3D printing, but isn't very good for CNC. It's internal engine understands volume occupied, but not surface shape. This means it can't output standard CAD file formats like STEP or IGES.
CadQuery uses the same engine that's in FreeCad to output STEP and IGES files. It's Python based, so you don't have to learn another language to use it. FreeCad or other CAD programs can then do analysis or generate CNC profiles, for example.