A short story of how I got into programming. If you don’t want to read a boring, poorly written story, just skip to the end of my post
When I first started programming in the late 90s I was really into the game Ultima Online. I was very poor at this time so I couldn’t play on the official pay servers and instead played on one of the free servers (they reverse engineered the netcode used for the game and built servers around it). The free server I played on was ran on the Sphereserver (Ultima Online emulator). I later found out that you could download the server files and mod the game using their own scripting language. The language was very odd, but I did what I could to learn it and it wasn’t THAT hard because I was already familiar with the game and the language was rather limiting on what you could do with it. This “scripting” language, called SphereScript, was my first language.
A few months later I found another Ultima Online emulator called, UOXC (short for UOX Classic), which was based off of several previous open source UO Emu servers and was very, very primitive. You couldn’t really change very much at all about the game, but it was open source. It was coded in C++, so I downloaded the source … studied it for a few days, barely understood anything past the basic concepts, then downloaded some free C/C++ compiler. With in a few days I could wrote a very short text based game that was an amazing 30ish lines of code. After my making my 30 lines of goblin slaying action, I went back to the UOXC source code and started toying around, changing variables, adding / removing small lines of code, etc… After 3 - 4 weeks of doing this I added code for one of the player based housing subsystems that wasn’t implemented in UOXC … mostly it just made a UI widget pop up on the client’s screen when they mouse clicked on their house sign and gave them info about the house and also let you set who could or could not enter the house. It was exciting because (1) I made something and (2) I had to also learn a little bit about doing TCP/IP netcode and had to research UO’s packet structures. There were a “few” bugs, but it did what I wanted … I felt smart
Since I felt like the smartest kid on the planet at that moment (I was 18 or 19) I decided to give up playing with the server code and “write my own custom UO client”. I hadn’t done anything graphical yet at this time so I had to learn opengl as best as I could. After a few weeks I had a character that could log into a server and walk around. It was “amazing” lol … but really I was so lost with the OpenGL code that I decided 3D was not for me. At this time I decided that I should just learn 2D stuff because it was simple and didn’t require me to learn whatever a matrix or a vertex thingy-ma-bob was.
So I downloaded a 2d library created by Sam Lantinga called SDL or libSDL. It was a very low level 2D graphical library and it was cross platform (so I didn’t have to learn any of that scary windows programming). I started working on a remake of Final Fantasy 1 (the NES game) and I also bought a C++ book called “Sam’s Teach Yourself C++ in 24 Hours”. I was already familiar with most of the basic concepts of C++, but I still went through each of the 24 chapters and coded them out to make sure I knew what I was doing. I did learn quite a few things though I forget exactly how useful it was to me as I did it all in a few days.
But yeah that Final Fantasy remake … this is where I learned that making things from scratch was very, very time consuming. After a year or two I once again had a game that I could log into, pick a character, and walk around lol. Really during this time I somehow kept getting sidetracked, mostly from researching and learning how FF1 was made, how the 6502 (processor) and it’s assembly language worked, how x86 assembly worked (this is what made programming “click” for me honestly lol), and tons of other funny techie things that no one wants to hear about. Anyways … my computer died … I didn’t back up any of my files. I was frustrated and I quite programming for about 10 years.
A few years ago my brother bought me Ark: Survival Evolved. I love that game and somehow racked up 4k hours in a year and a half (while working 40 - 80 hours a week, and sleeping 1 - 3 hours a night … hoowww??). I eventually downloaded UE4 and the Ark Devkit used to mod Ark. After playing with that for a month, I figured out how UE4’s blueprint system worked, but got frustrated and started working with regular UE4 so I could use C++.
Now for the moral of that long, boring story (of which I left out a lot of other programming things that I learned):
What got me into programming was my familiarity of what game I was modding or “remaking”. This helped me a lot, because all the details are already laid out and very quickly allowed me to figure out if things were coded (semi) correctly. It also allowed me to open up code and quickly familiarize myself with what was going on even though I didn’t understand the actual “code” at that very moment.
So my suggestion is do something similar if possible. Just try to learn something that’s applicable to “you”, else you may have trouble staying interested in it. Whatever language you choose doesn’t really matter as pretty much every language follows the same logic, so after you learn one, the others are a thousand times easier to learn. I would suggest going with C++, but there is a lot to learn there. You can pick up the basics rather quickly, but since it’s a very, very broad language it’s near impossible to ever “master”.
Though it sounds like your focus is the art side of things, and you can do a lot with UE4’s blueprints as well so perhaps even learn that first. The blueprint node scripting is a little weird though, as it doesn’t always follow the same logical flow that text based languages follow and sometimes behavior in complicated blueprints will be unexpected and a little harder to figure out what’s causing that unexpected behavior. Still blueprints should be a lot quicker to learn well enough to make them applicable to your projects / ideas. Once you become comfortable with blueprints, you could then have a much easier transition into learning C++, which you really only have to use for certain things…