Good test automation is not created by using an automation tool.
What you get by using an automation tool (like QTP/UFT, Ranorex, etc) and its record-and-play module is bad test automation.
You get test automation that is fragile, not reliable, difficult to maintain, difficult to extend, difficult to implement.
Good test automation is writing code that uses an automation library to interact with an application.
Selenium WebDriver and Appium are automation libraries for web and mobile automation.
Each automation tool provides an automation library or API as well.
Lets decompose what good test automation is:
writing code in general
an automation library
writing code that uses the automation library
1. Knowing how to write the code is the most important.
Then, learn it as well as you can.
Start with the basics.
For example, for Java, basics would be variables, operators, simple statements(if/else, switch), arrays, lists, looping statements, methods, exceptions, packages.
Then continue with other fundamental concepts including the object oriented ones.
In Java, this means classes, interfaces, inheritance, composition, polymorphism.
2. Learn the automation library.
Learn how to use its packages, classes, interfaces to interact with the application.
In the case of Selenium WebDriver, you need to learn
WebDriver interface for opening and managing the browser
WebElement for interacting with elements
By for creating locators
Select for interacting with listboxes
ExplicitWait and ExpectedConditions for synchonisation
Actions for complex gestures
3. Write code that uses the automation library
Write good code in the newly learned language that uses the automation library to interact with the application.
So don’t start with a tool.
Start with a programming language and an automation framework.
Learn first the language, then the automation framework, finally use them together.