4 ms·
Something that made my coding skills jump: Attempting to reverse-engineer a extremely large, and known to be well coded by wizards C++-based game. I ended havi
by speeder 10y ago
Something that made my coding skills jump: Attempting to reverse-engineer a extremely large, and known to be well coded by wizards C++-based game.
I ended having to learn details on how C++ work (how vtables work? why?, etc...), what some common stuff on the code was (reference-based smart pointers, locks of various kinds, thread-related stuff, alignment-based custom fast allocators, STLPort stuff, etc...), reading papers about why some things were done that way (yep, the game I choose has lots of papers and talks about its coding!), and so on.
In the end, I couldn't find any of the things I wanted to find, and couldn't convince the game IP owner to let me patch some bugs I found (that are actually killing the game review ratings on Steam), but I don't regret it one bit, I felt like I learned in the 3 months I fiddled with that, the same amount of information I needed to learn in 2 or 3 years of coding my own projects.
- GeertVL 10y agoAny blog post on how you did it and what tools you have used?
- speeder 10y agoOf course not. Lots of the stuff involved are borderline illegal, or in some countries completely illegal, this is why also I don't say the name of the game on my post. I don't want that to come haunt me later.
- mettamage 10y agoI'm curious what would work better. Reading and working for open-source projects or reverse engineering like you did. I noticed that my coding skills became better when I did a reverse engineering class, mainly because I needed to debug a lot more than normal.
- douche 10y agoAnother great learning experience is taking a code base written in one language and porting it to another. I keep poking around at the old IdTech code and reimplementing parts of it. About the most productive thing I've managed is an extractor for the Wolfenstein 3D graphics files, but I've had fun and reviewed a lot of my C knowledge, along with some dusty corners of the language I was porting into that I don't use much.