Hi todd2
Quick Google search gave lots of hits for online instructor lead courses.
As TestComplete wants to run as fast as it can, you need to make an extra effort to make it wait as much as needed for the application response and for the elements to be ready. Combining multiple waiting techniques would be required, for example https://support.smartbear.com/testcomplete/docs/app-testing/web/common-tasks/waiting-for-pages.html
I hear your pain, I had to deal with exact situation. Four years now on the project and I have successfully automated our constantly changing packaged application that is built on Salesforce CRM. In Salesforce, the majority of the UI action changes the page URL. My automation run takes 1:30, and the log number of entries are on the 9k mark. That is a large project. You should be able to accomplish the same.
I used KeywordTest and JavaScript, and for the NameMapping I strictly create each node entry manually by myself. I do not allow TestComplete to map anything or self-heal and that was the game changer for me especially for shrink the size of NameMapping database. Learning XPath to write my own statements and also learning to use browser Inspect to analyze the HTML dome structure was a challenge. TestComplete does a good job in recognizing Salesforce UI elements, but I needed to parameterize the NameMapping node to reduce the amount of updates as Salesforce constantly change UI libraries.
The language you chose should not make any difference, and the alternative for you is to strictly write code base scripts and bypass the NameMapping all together.