Writing Custom Miner

I’m interested in writing my own miner mostly out of academic interest and was wondering if anyone had any good learning resources.