@coinfoundry
So, assuming that someone is ready to go full blood sweat and tears to create/modify their own miner, where would you point them? To start mastering C++ first? or something else?
Well I would probably start with learning C and C++. Don't waste your time attempting to master those languages in the sense of reaching a point where you'd consider yourself a "master" by developing endless learning projects that have no real value to you until you can finally move on to the real stuff.
Once you've grasped the basics, clone a CPU miner (yes CPU, not GPU as this would make it even harder for a beginner) from Github (links below) and spend a significant amount of time understanding the code (we are talking weeks or months here). You might hit a huge wall here since miners are jam packed with inline assembly, SIMD intrinsics and other tricky optimizations. If this proves to be too much to swallow (and it most likely will) take another approach: Arm yourself with documentation about a coin and attempt to develop a very simple totally unoptimized miner for it. I'd suggest to stay away from the bitcoin-family of coins due to huge pain that is dealing with the coinbase tx and related areas. Once you got a simple miner working return to the github repo you've cloned earlier and compare your implementation to theirs. Figure out the implementation differences, note where you are wasting time compared to them etc. Apply those concepts to your own miner and you will gradually get closer and closer to your goal. At one point you'll either realize that you've become a pretty good developer or that the challenge is too overwhelming in the end.
Links: