Terraform syntax is definitely not sexy, but it's a robust piece of software, and in fact, can be used to learn better Go techniques.
A total aside, but people who claim Golang is easy are full of it. It's an extremely hard language to write well at scale, and Terraform is a good example to study.
I really wish terraform will one day reach the same features and maturity as cloudformation.
If there is one thing TF needs to learn to do is handle failure. Right now it has that rosy yolo approach leaving you to pick up the pieces when it fails.
Until it doesn't. How many times I've seen stack being in error because could not rollback.
CF can't do trivial things like creating a resources in account A that is needed for account B.
Here is a challenge for you: Deploy a moderate to complex infra with Terraform and after that try to clean up all the resources it created. 50$ says Terraform cannot do it and you need some sort of manual/script intervention. The future is bright.
What happens when you have to use something outside of AWS? How do you codify those changes?
As far as I know, it is possible to bridge terraform providers into a CFN stack using that mechanism, similar to how Pulumi works
0: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGui...
I turned down offers when I saw they use Terraform. I was lucky to find purely CloudFormation based infra development.