Important Notice: I have moved to a new domain. This site is no longer being updated. Read more here.
One thing I dislike about programming culture is the attitude that certain fields are just off-limits. I keep hearing programmers say, "never roll your own crypto!", or "just use this stable, mature library instead!"
But do you wanna know the secret about those folks? Look at their names. Do you want to aspire to be the next Skrillex18127 or adamg84, someone no one has ever heard of, with an illustrious career setting up Wordpress blogs or gluing user interfaces on top of *other* people's work for peanuts? Or do you want to do something awesome instead? To create instead of build; to lead instead of follow?
No matter what field you're in, whoever the person is that you look up to the most ... they got there by experimenting. They're the ones who said, "no, things *aren't* good enough, and I think I can do better!"
So my advice to you is, experiment!
As a teenager, I managed to import a copy of Final Fantasy V. One of my favorite series, the idea that we missed out on a version of the game between "II and III" was pretty darned exciting! There was just that pesky problem that the game was in Japanese, which was certainly quite the roadblock.
I had dreamed of being able to play the game one day and understand it. And soon after obtaining internet access, I found a group whose goal was exactly that: translating this game into English! This group was RPGe.
I remember at the time, they were my idols. The people I looked up to and wished I could be like. I could have just left it like that, but I wanted to be a part of it instead.
And so, even though I never thought I could measure up to people so intelligent, I spent years learning to program, learning to reverse engineer code, developing tools, and honing my skill as a ROM hacker.
And in the end, I became friends with many people in that scene. I became the ROM hacker for the Der Langrisser translation project with Derrick Sobodash. I was able to contribute a bit to the Mother 3 translation project alongside Clyde Mandelin and harmony7. I've been able to chat from time to time with Myria.
As ROM hacking went from a mystical endeavor to something I could actually do, I found my idols had become my peers! I still had a world of respect for them, but with the magic gone ... I set my sights even higher: the people who enabled ROM hacking to even be a thing; emulator developers! I looked up to those developers as a source of inspiration. And I knew I wanted to be a part of it as well!
I failed a few times with some early attempts at emulators (eg StarSNES), but I kept learning, and eventually ... I managed to break through and pull of something I was 100% positive I'd never be able to do: write a functional emulator!
And once again, I found myself with an even broader circle of amazing peers! Now I can routinely talk with the developers of Dolphin, Citra, dasShiny, mGBA, BlastEm, Mednafen, and other amazing projects, despite my own skills not measuring up to theirs.
I met so many great long-term friends that have changed the very course of my life for the better.
To The Future
So do you know who I idolize today? Those who enable emulation itself to be possible: the cryptographers and hackers that break open these systems, enabling emulation to be possible! People like SciresM, naehrwert, plutoo, Andreas Naive, etc. Those who go even further than software and peer inside processors themselves: Dr. Decapitator, John McMaster, etc. Those who use electrical engineering prowess to go at them: neviksti, Costis, Dr. Abrasive, etc.
And so that's what I want to learn to do! And once again, my imposter syndrome kicks in and I find myself full of doubt that I could ever be anything but a nuisance to folks this talented.
But you know what? It doesn't matter if I fail. If I had avoided even trying for fear of failing, I'd have never learned anything. I wouldn't have a career in programming.
No, the truth is, it's only a failure if you don't even try. Even if you end up unsuccessful, you've still learned a ton, and you learn from all of your mistakes. Accept those battle scars as a badge of honor. I'm okay with the near-certain fact that I'll never be known for breaking open a new hardware console. That's okay. I know I'll never write a more secure cryptographic system than Daniel J Bernstein. That's okay, too.
And certainly, I've never wanted to bother people much smarter than me. Yet they've often been a huge help and very willing to help me out. Showing sincere effort and motivation to persist will win over their support.
I can't say I received a lot of support learning to ROM hack (the scene was very small back then, and most discouraged me from getting involved), but I did go on to teach many ROM hackers the craft. When it came to emulation, anomie was always right there helping me along in the early days, patiently answering my questions and explaining to me things that I didn't understand. When I wanted to learn about cryptography, MerryMage was invaluable. blargg helped me get started in electrical engineering, and I managed to build a hardware device that allowed me to extract coprocessor firmware from the SNES ST018! Ryphecha helped me get my feet wet in audio filtering.
And while I'm not exceptionally skilled in any of these fields, I've actually been able to accomplish quite a bit! I learned so much more about networking by writing my own HTTP server. About compression by writing my own codecs. GUI design and resource management by writing my own toolkit. Language design in general by writing my own assembler, scripting language, and base library. And on and on. Even when my methods are unorthodox, they either work and stick around; or they don't and are replaced. I never just accept that something is a bad idea, I try to understand why. That's where the insight lies to come up with new approaches and to create new things.
The honest truth is: I'm really, truly, not that smart. It's apparent to me every single day by looking at the work being done by the folks around me. Nor am I more than, at most generously, a D-list celebrity. I imagine this article would mean a lot more if John Carmack or Linus Torvalds wrote it, but hey. It doesn't make this any less true.
Believe in yourself, don't fear failure, and most of all, don't ever let anyone tell you *not* to do something you wanna do. Who cares if someone already built a better mousetrap? Isn't it awesome to just try and learn how mousetraps are built? Everyone had to start somewhere! Sure, you may not become a famous, world-renowned mousetrap builder, but so what? Life's about the journey, and the people you meet along the way. So go experiment!