Making a game is a fun starting project! It's really common for folks to get into programming in order to make games. One thing to keep in mind is that games as we know them are actually quite complex and multidisciplinary- they involve a lot of logic around the game mechanics, managing inputs and control, graphics programming, sound design- and those increase in complexity and scope for 3d projects. If you decide to make a game, just keep in mind that they're quite difficult, so don't feel bad about a lot of early failures (because there will be a lot!)
It can help to reduce the scope of your first few projects- so if you're making your first-ever game, try skipping complex 2d/3d graphics, and just printing characters out to a terminal screen- you mentioned the dice roller, so maybe try recreating a dice game like Greed or Pig. That will reduce the complexity to just the game logic and some very simple console printing, so you can still learn about game loops, input handling, etc; without getting bogged down on some of the more complex details.
I think your background in web programming will be useful, but it can also make some of the terminology that you'll see around general-purpose programming a bit more confusing! I hope this might fill some of those gaps:
-
a file extension (.exe, .txt, .pdf) does not actually guarantee the contents of the file- you can change the extension to whatever you'd like. File extensions are intended to let you know what's inside and give your operating system some clues on how to interact with it, but at the end of the day, a "file" is really just a place to put a bunch of bytes.
-
how you execute a program depends on whether it's written in a compiled or interpreted language.
** In a compiled language, you need a rather complex program (the compiler!) to translate that source code into something your machine can actually run- so eventually, binary code. This means that all the source code has to be processed up front to create that target, which will be a separate binary file. C/C++, Go, and Rust are compiled languages.
** In an interpreted language, you would use a different kind of program (an interpreter!) to process your input file at runtime. So instead of creating a binary up front, the interpreted program is just the source code file, passed as input to the interpreter, which executes the instructions as it reads them from the file. Most interpreted languages will process the source file line-by-line. Javascript and Python are interpreted languages.
** HTML and CSS are also interpreted (by your browser!), but they are not independently turing-complete (individually, they cannot be used to solve all computationally-possible problems), so they aren't considered true programming languages. You would not choose them for general-purpose programming- they have a more specific use case.
-
Compiled programs are typically faster to execute than interpreted programs, but they also require a (sometimes lengthy) compilation step before they can be ran. Interpreted languages tend to be a bit more flexible, and you can run them the moment you've stopped typing the source code- but if your code has an error, they'll just stop running halfway through the file!
-
There are a lot of tradeoffs here, and it's a bit more complex than my introduction. Keep in mind that, especially as a beginning programmer, speed is ultimately not an important factor for choosing a language. If your program is running slowly, it's far more likely that you just need to approach a problem in a different way, like using fewer nested loops.
-
an exe file is just a program that has been packaged to run on windows. That can mean a binary file targeting the windows runtime, in the case of C++, or that can mean a python file bundled with the python interpreter! I wouldn't worry so much about creating an exe specifically- nicely packaging a program is important for distributing it to run on other people's machines, but when you're learning like this, just use the easiest method to execute your program on the development machine. Invoking the interpreter on a python file directly with a desktop shortcut is usually fine for personal use.
-
but yes, you can create silly little programs, and run them whenever you want, however you want, and have a lot of fun doing so! Every language will give you some way to do that- some are easier to use with Windows than others. Python is a very good starting spot.