Hey Giorgos!
Have you read this:
https://github.com/grbl/grbl/wiki ? After being generally fascinated with CNC machines since the 1980's, in the last decade I have actually built several CNC machines, and am currently building a 3D printer.....In my opinion the most difficult part of CNC has been learning the software side....Gaining an understanding of the roles CAD, CAM and Controller play in the process can be vexing.....and quite counter-intuitive....often with overlapping boundaries and cascading ramifications.....I plan to wade through the open source software for my 3D printer, but do not look forward to the task.....The best advice I can give you is to "stand back" and attempt to get perspective on the role of each portion of the software process.....
CAD, in its simplest role, is a collection of vectors used to define an object...in this context presumably an object to be actualized through some CNC process.
CAM is an intermediate phase in the evolution from vectors to tool paths that allows the user to define how the actualization will occur.....Here the user defines things like the tool, spindle speed and feed rate...order of operations etc, etc....at the end of the CAM process is a text list or collection of text lists of discreet commands generally referred to as "g-code". G-Code "tells the controller" what operations to perform...what paths to follow in a "universal" language, but the G-Code itself contains no information about HOW the machine actually achieves these operations.....
A Machine Controller is the final step in the process....translating generic paths into machine operations....It takes the "suggestions" from the G-Code text file and translates them into discrete, machine specific operations....some machine controllers augment the G-Code "suggestions" to fall within the machine's capabilities, others do not....regardless, it is the machine controller that expands G-Code directives to Machine Primitives....
For example, if a specific machine uses a stepper motor and lead screws to create linear motion at a rate of 30,000 "steps" per inch, and the machine controller receives a "G-Code" statement to "move" 1 inch at a rate of 900 inches per minute, it is the machine controller's responsibility to "accelerate" from its current velocity to 900ipm at a defined acceleration rate and output the result as 30,000 "timed steps".....If the machine has a defined maximum feed rate of 100ipm then (depending on the Machine Controller) it might reduce the requested feed rate to the Machine's maximum feed rate...or it might simply "halt execution" and report the error...or it might simply attempt to move the machine @ 900ipm regardless of the machine's ability to achieve this rate.....If a different machine ran the same G-Code file but this machine used closed-loop servos the machine controller might simply output an analog signal indicating feed rate to the servo controller and monitor the axis position via the encoder.....The controller's job is to translate G-Code directives into a specific machine's primitives.....
In short, each portion of the process is designed to generate an output or accept an input that is platform/machine independent on at least one end....In the "bad old days" of "NC" machines (Numerical Control) a machine was "programmed" to perform operations by directly inputting each "step"...some early "paper fed machines" had long rolls of paper tape with holes punched in them to trigger various machine operations....much like a "Player Piano"....The task of creating the "tape" for any given operation required hundreds if not thousands of man-hours restricting the fiscal viability of NC machines to long production runs.....The evolution of NC to CNC was in large part dictated by the evolution of computer hardware/software and the increasing capabilities of MicroControllers in a stutter-step fashion....until relatively recently all of the software/firmware was proprietary, developed almost exclusively for a fairly limited number of larger industrial corporations with engineers dedicated to the task of implementation....
While "reasonably" priced software has been around for over a decade, "reasonable" for industrial budgets is frequently well out-of-reach for hobbyist.....and to be frank, for quite a while "Pirated Software" was the only economically viable choice for many hobbyist....enter "Open Source" software.....With the advent of the 3D printer revolution "Open Source" Software // Firmware // Hardware has been catapulted from basic functionality with tons of caveats and limitations to the "bleeding edge" of industrial features in a very short time-frame....Sadly, while the "Open Source" software/firmware/hardware revolution has given Hobbyist very powerful tools, the onus of learning to use these tools falls squarely on the shoulders of the Hobbyist and frequently requires a great deal of effort. There really aren't any "short-cuts" or "Easy Buttons".....no way to "skip" a step and expect some "wizard" to walk you through...though perhaps in the future such features will be available....for now you still have to go through each step....
Best advice I can muster is, "Take your time on the front-end, learn each step and its role in the over-all process..... and remember that as little as 25 years ago there weren't more than a handful of people in the entire world who had a firm grasp on all of the facets of building and using a CNC machine.....most of the people at the center of the 3D printer revolution have professional training and formal education in the field and are doing their best to make the hobby affordable and accessible; they have made great strides, but the hobby still requires more than a casual user to get any given machine up and running and actualizing user generated projects."
Good Luck!
Fish