That was an issue I discovered recently with respect to C++. I was used to the main part being first and the subroutines following after. It took a while for me to break out of my Qbasic think to grasp the opposite of C++. It didn't take as long as going from Applesoft to Qbasic. Procedural programming was a new paradigm that I had a time wrapping my head around. I've come to prefer it now.
I can't speak for others, but I typically use the main module to set up the program's base environment; type & variable declarations, data fields, and such, after which I pass control to a "main loop" SUB, from which all others are called according to inputs received. I almost always do larger projects in this manner, opting for more cyclic than linear arrangements. As such, I don't usually run a program from the main module, but rather it uses a hierarchy of SUBs and FUNCTIONs for primary flow. When things are arranged in a highly modular form like that, I find bug hunting to be much easier. It also doesn't matter what order your code is arranged in for execution, you can put it in any arrangement that facilitates your needs, function-wise, alphabetic, or whatever. You can also export useful routines to other programs much easier.
I rarely use gosubs anymore, as a SUB generally does the same thing, the only exception being when I'm passing local variables within a SUB or FUNCTION. Even then, I could probably design it better and SUB those out, and if I'm tempted to use a GOTO, I hit myself with a rolled up newspaper. I should probably exorcise gosub in the same manner...