I dropped out of college due to medical reasons and was given the "opportunity" to receive disability benefits for the rest of my life. I accepted this and just continued my hobby doing programming. In that time I met many hobby programmers online who didn't seem to work or were temporarily taking breaks from studying to eventually find a job.
Eventually I felt a bit lonely not knowing anyone in real life who were interested in programming, so I found the meetup website and started going to events to get to know people. The friends I met there told me I should try working professionally as a programmer, so I tried and now I've been 5 years in the field and really enjoy it.
In retrospect being outside of the professional field, I knew it existed but it never crossed my mind that I could be part of this as it was for educated and highly experienced programmers only. Because of this maybe I never bothered to even try.
One issue for me entering the field was that I was highly specialized, but the field required me to be more general and perhaps specialize more in other things. Luckily for me I found the right people from the start with similar interests (game engine development, graphics rendering, etc) to help me understand the professional landscape.
I still find it satisfying to work on hobby projects in my spare time. I don't have as much time as before because of work and family, but I do manage to find the time now and then. :)
Now, I like the money our profession pays, it’s great - but I’d by doing something with computers either way, so what a blessing to get rewarded financially as well.
Also, as an erstwhile professor who was at a top 3 program, a motivated and curious student is the best. If you had finished college you’d have done well with your attitude.
What? It’s a job.
You yourself say the financial rewards are a blessing. Sounds like you’re in it for the money, too. If you’re not, your boss might OK a 20 or 30% salary decrease should you request it.
> On evenings unpaid side projects?
I'd bet you've got a very skewed view of how people who make their living programming do this outside of learning something to help them get a better job.
It's boring, problems I'm solving are technically trivial. Most of the real problem is tied to a domain I give 0 shits about and am so bored by that I have to force myself to stay focused. Things I build have practically no value to me, and often no value to anyone except that someone decided to allocate a budget that way.
I would never work on these projects if it didn't pay well. I would prefer craft work if it paid the same.
I'm not complaining though ! I live very comfortably, I came from extreme poverty and I don't see any realistic alternative path that would end me in a better situation.
But I think expecting people to do most programming jobs out of passion is not realistic. If you're really good maybe you'll land in a role that gets you doing something technically innovating that also pays well but I'd say that's top few % of devs, most of us are in the dredges where enthusiastic people are a detriment (worst projects I've seen were a result of someone trying to be too clever for their own good, not lacking skill)
I fell into professional programming basically by accident... was a web developer by education and ended up being offered a position as a mobile developer for iOS as my first out-of-college career. Wasn't what I intended but they extended the offer and said offer included paid education in the field, so who was I to argue?
Years on I've gone through a few jobs and basically never used my web development degree for my day job, only really using it for side-gigs building websites for local businesses.
Life is weird.
But the joy of working on a machine that's part of your life, without the need to please end users (which is cool too but sometimes induce pressure), well, that's basically coding like when I was a kid. Except that now I have a TON more knowledge to work with !
And, while working on disk emulation I had the pleasure ot discover those many copy protections that "prevented" me to get many games :-)
And the other thing I love about it is the communities are typically super open and collaborative. I remember back when I first got into GBA development, there was a ton of docs, tools, libraries, and other things that folks had put together and then shared with one another. It's a lot of very passionate people sharing some very niche interests, which can be incredibly fun (of course it can also be a drama filled nightmare but such is life with passionate people).
These things excites me but i never got to start
Start making a game, and you'll soon realise how the CPU works, and making a simple emulator will start to seem very possible.
And software reverse engineering is just grunt work. I'd start with a very well known existing hardware platform with a very simple CPU design--the GBA is actually a really nice platform as the ARM has a very sane ISA and it's all memory mapped I/O--and get a devkit and start experimenting by writing software to run in an emulator so you can get a feel for how the hardware works.
"Blue Fox: Arm Assembly Internals and Reverse Engineering" by Maria Markstedter
https://www.wiley.com/en-us/Blue+Fox%3A+Arm+Assembly+Interna...
https://www.theregister.com/2023/08/31/a_star_star_domains/
"Maria Markstedter – a noted author, assembly language expert, and security researcher who's written extensively about Arm at the websites she operates – received a cease-and-desist demand from Arm's lawyers. Her offense? According to the letter she shared on Xitter, using the trademark "Arm" in the domain name arm-assembly.com that she used to promote a book she wrote about the ISA."
youtube.com/@lauriewired
Self-promotion I know, but I hope someone finds it useful
Personal projects are often embedded coding of some sort, though I spent some time poking at the PS3 firmware when that was first cracked too.
Spending months reversing and emulating a console… that takes dedication I don’t have though. I guess these guys are really itchy? Or it’s in a really hard to reach spot?
In terms of where to find the time, there are 24 hours in the day, at least 8 for working the 9-5.
When I was more junior, or not doing programming as a full time job, I was more motivated to work on personal projects. Now I am more senior and programming/managing people full time, I can't get motivated to work on code-related projects in my downtime. It sucks :/
I just use my free time to code. I see it as a relaxing activity
Namely passion, curiosity and probably not having much more other hobbies beside programming or hacking stuff around.
I recently went to try to improve a Linux kernel input device driver for a USB headphone: adding unit tests (whose execution is nearly instant). I have learned a ton of things about Linux development, C (I don't know C at all), input devices driver system (hid), the USB protocol and my device specifications.
I have never managed to boot it live to test with my actual device. That is despite spending probably despite spending probably 40 hours including a 10pm - 4am session on a Saturday night. But I had lot of fun doing it and I think that was the point.
I guess you can't beat passion and curiosity.
I think keeping a schedule that way has prevented me from every souring on programming in my free time.
I guess in my case, I had to find a hobby that was not exactly like work, even if it was work-adjacent.
Yes. Believe it or not, the primary author of the ARM translation engine used in the other major Switch emulator is a medical doctor ("IRL white mage", as she sometimes puts it).
Could you share more info about this?
You'll see one-person operations, but they're usually relegated to older hardware and they still utilize documentation from many disparate sources. Even nesdev wiki was built on top of 6502 researchers, Taiwanese clone manufacturer reverse engineers, decappers, older NES emulators, heaps of existing documentation, etc.
A lot of it is building a mental model of the enemy (for me: Windows NT early boot, DirectDraw initialisation) and writing code that got it to the next step, and the next step... It was always slow work, but therapeutic once you find a thread to pull on. When you get it right, the reward is sudden: you have this alien world that is running where it shouldn't, like a fish swimming in a tree.
I'd love to do more of that kind of work!
As soon as you get one well-known program working and displaying something on the screen — congratulations, you've made "an emulator"! Now all that's left is "just" debugging the inevitable compatibility issues that your emulator will encounter with every other program ever compiled for the target architecture. It's like Test Driven Development, but your test suite is "the complete game library of the console"!
(And then, once you've got 100-ish percent compatibility, maybe you can spare some time to optimize performance!)
If you've never done this before, it can be great fun! I'd recommend starting with a Z80 (Gameboy) emulator — it's an extremely well-documented architecture, fairly simple (no weird concepts like clipping masks or MMU mapper chips), fast to get to the "rewarding" point where you've got something displaying on-screen, and so low-powered that on modern hardware it'll run at full speed even with the most naive implementation.
- There IS a path to commercial emulator development. Most of these "retro collections" you see being sold on video game online shops are a frontend, a custom made emulator to avoid any legal/license issue (Avoiding GPL code as much as possible), a cool frontend and some extras depending on how much the team could unearth and license from the original developer/publisher/rights owner. Hell, Nintendo and Sony had teams making official emulators for the Playstation 1 emulation on PSP/PSVita/PS3 or almost every nintendo console before the GameCube for Virtual Console games
- Each country has its own set of laws, but using US cases as an example, developing an emulator for research purposes only (or at lease not competing directly with whatever you're emulating) and not using any file or code snippet from the original hardware can get a pass.
That's how some emulators go by without getting a Cease and Desist from Nintendo or Sony. And that's why they never bundle the BIOS with the emulator, even if it needs it to emulate... well... Basic Input and Output Systems.
It doesn't require being a genius or a fast learner, it just requires the good fortune of having programming be your passion.
If you want to catch up to these guys when you only start to learn programming in college, it's doable but it requires you to be a fast learner and also be somewhat passionated in programming.
Sometimes yea, people have a career in an adjacent field and hack on emulators on the evenings. Other times I've ran across incredibly talented individuals with significant contributions that have never been employed in tech. I've seen multiple instances of this when a younger individual gets involved in a project they don't feel comfortable putting their real identity on for fear of hassles with Japanese companies known to be litigious.
There’s a lot of work that goes into a modern emulator, for what it’s worth. Obviously there are people that reverse various parts of the console but it’s really an amalgamation of all sorts of talents. Someone’s going to be a graphics expert. Someone is going to be a compiler and codegen genius. Someone needs to work on reimplementing APIs and improving game compatibility. Someone needs to do UI work. Someone needs to port the emulator to platforms people want to run it on. Someone needs to do design, and PR, and copywriting, and translation. For smaller emulator projects many of these roles may be performed by the same person. For a large project it’s really a team of people working together, often organized in an ad-hoc fashion. It’s really a gem of open source development, where people can bring their own skills to the table and make something better than the sum of their parts, all the while improving themselves.
It's never ending, it's great fun, and a huge sense of achievement. I'll never forget the first time I saw a BBC Basic prompt when I devved my first emulator.
Writing an emulator is very frustrating at first (when nothing works) but it eventually gets more rewarding as you get to the point of meaningfully running preexisting software. IMO every programmer needs to write one at some point.
Source: Me, and I'm not even good at it.
Note that none of those are career paths. Some career paths might help you do emulator development (embedded C work, EE work, reverse engineering work), but none align with it perfectly.
It is mostly a hobby
It just takes a lot of dedication and time/energy to reverse engineer. People basically do it as a hobby. Usually the most hobby interest is nostalgia vibes from old stuff but even getting new stuff to run is done for the mental excercise fun
The reward here isn't a paycheck, the reward here is fun. Things like console emulators by and large exist on volunteer time and effort provided by nerds and enthusiasts who find pleasure in the act itself with no concerns given to finances.
I did it to have fun with my bot on the game, but in the end I barely used the bot, I had way more fun making it and learning how to improve it.
I suspect the people making these emulators spend way more time writing the emulators than using them, that's where the actual fun is.
The emotional part is critical as human beings. I wonder why we need to remind it again. A lot of human activities don't have anything to do with money.
https://web.archive.org/web/20230518095046/https://boilingst...
archive.org link because boilingsteam.com isn't loading for me at the moment.
Don't forget that the Chinese do this constantly with American products. Trying to figure out how we built something, and doing it for cheaper.
So what would be cool is if he could make a great console experience cheaper than Nintendo could make it.
Emudev projects often outright kick people out if it's determined they've peeked.