ethereum.org maintains a list of language specific resources that you may find useful: https://ethereum.org/developers/#language-specific-resources
I teach and develop courseware for B9lab.
Consequently, familiarity with those is helpful for constructing clients.
We take many students who are in similar situations and recognize that smart contract design is indeed a specialization. There will probably be other specialists who will build the UI and other external concerns for any serious project.
Hope it helps.
As a learning resource/tutorial I suggest https://cryptozombies.io/
With its visibility keywords (private, internal, etc.) and its fine-grained types (with primitive and reference types), solidity just feels a lot more like Java.