I use Unity game engine with Visual Studio 2019 for coding. For creating sprites I use Krita but you can use any other software you are comfortable with.
I have learnt mostly from different YouTube tutorial, reading Unity documents or from Unity Answers forum.
If you are going to use Unity I could give you few tips to avoid the mistakes I have made during my beginner's days. You will get understand these tips when you are little familiar with Unity and VS2019.
1. Always test your UI with different resolutions in the editor. This mistake I did with my first game where UI was too big for anyone playing with lower resolution.
2. Using State Machine. It's quite helpful to learn state machine. I didn't learn it focus on it until my fourth game but it was quite helpful in it.
3.Understanding when to use Update() and FixedUpdated() methods. Update methods happens every frame while FixedUpdate happens at specific interval. You will mostly write your codes in Update() method but in some cases where you need to some value gradually increase over time, you will need to write them in FixedUpdate. If you write such value in Update then it will increase or decrease faster in computer with higher framerates.