in compiled languages everything needs to be pre determined
errors will happen, it's up to the programmer however to determine where things will go wrong and handle the errors appropriately
if something unexpected happens in this setting the entire program will crash and you either have to issue a new binary else the same error will happen over and over resulting in a unrunnable mess that will never get used
to an inexperienced programmer, a lot will go wrong, therefore a lot of planning will and should have to happen in order for them to even attempt to run the language and make an attempt at the goal
inexperienced programmers are better off with run time languages, sure it won't crash but the user experience is poor, there are undoubtably memory leaks or bugs, but those can be fixed along the way of development which is quicker and more nimble to a learner
write, save, run, look, write, save, run, look - repeat
mistakes will happen the correction on those however is faster and easier when we are able to make mistakes along the way, trusting our ability to figure it out as we go
the most experienced programmers can use compiled once they've figured out all the ways not to use things, are confident in their tooling, and know the errs that are bound to happen
think of someone going to college
you can plan and plan for the things you know you want to get done, but one health issue, a professor that you don't get along with, these things are unexpected errors that when compiled should have been caught but weren't able to be there for it's best to develop at run time with a loose idea of where you want to go
it's rare that errors are generated by the program, most are generated through user error so it's still best plan