If programming smartapps (and/or device types) for SmartThings is your primary goal, then the language you need to learn is Groovy.
http://docs.smartthings.com/en/latest/introduction/groovy-the-smartthings-programming-language.html
Unfortunately, Groovy is nowhere near as widespread as many other languages, so documentation or tutorials written for newcomers to programming is nigh on non-existent for Groovy.
The good news, however, is that Groovy is built upon Java, so knowing the fundamentals of Java is a very good starting point.
Certainly learn the fundamentals of Java. There is lots of material out there specifically targetting novices which will allow you to learn the fundamentals of types, variables, arrays, strings, loops, conditionals, functions, parameters, classes, variable scope, etc., all of which will stand you in very good stead for the future.
Java is a big topic; whilst it is a useful tool to have in your belt, as a beginner it may be difficult for you to know which parts are relevant and which are not. The semantic differences between Groovy and Java may also trip you up occasionally if you’re trying to understand some SmartApps whilst also learning Java.
If you can learn the fundamental elements I listed above, such that you understand the concepts and are comfortable explaining them to somebody else, that would be an excellent start. This would then allow you to:
-
Read existing SmartApps, make changes to them and have those changes
do as you expect, or work out why they don’t.
-
Ask informed questions of the more practiced here on the forums and
understand the explanations which come back.
As you’re learning, don’t get too hung up on object oriented programming, inheritance or polymorphism for now. All quite useful techniques, but not that relevant when coming to grips with SmartApps.
The topic of standard Java libraries is also very large. Again, don’t get hung up on trying to learn them all - simply learn what they are, how you find their documentation and how you can access their functionality. You should pick this up as part of any course on Java programming - you shouldn’t need to specifically go out looking for it.
Anything about design patterns you should skip for now, along with Java EE, beans, etc.