Intro
I love my Mac, but I realized I really have no idea how to program it. I'm a proficient C programmer in the Posix realm, and have some competency with Android apps in Java, and I used to be quite familiar with Python. But I have no idea how to make macOS or iOS apps, as their language (Swift) and APIs are completely foreign to me, and I would like to know them better.
The project
Probably the best way to learn something is to dive in and do it, and the cool thing to do these days seems to be to write an NES emulator. It has a lot of breadth to it (computation! graphics! sound!), which gives me a chance to touch on and learn a lot of APIs, while also being not so complex that I can't grok it. The NES was also my first console as a child, and while I have a superficial understanding of how it works, I think it would be interesting to get down and dirty with it. It also is pretty well documented on places like NesDev.
Where to start?
I expect I will have to read up on Swift to get some flavor of the language, so I can make some educated guesses on how I'll have to architect things. The plan is to Not Let Perfect be the Enemy of Good Enough, as the goal is to learn. Without experience, I have to really get past the urge to try to get everything right the first time. I've also familiarized myself a bit with the architecture of the 6502 chip the NES is based on, and as CPUs go, it is quite simple, so I expect a surface level simulation to not be exceedingly difficult.