How do I read BIND source code?

Assuming that BIND is the DNS server software from UCB/Vixie and now ISC;

Do not do that. There is only a handful reasons that might require you to read and understand BIND and modify it in order to make it work in a way which is not already implemented within the software. Also you probably would need to work in an ISP to implement such modifications in RL conditions.

In order to elaborate, I was working in a given year at a given ISP. That ISP was in need of a (legitimate mind you) modification in resolver responses for a well defined and dynamically changing subset of its users. I have managed that project and wrote BIND part of it. Project was three part, user database and RADIUS, a L7 switching system and a dedicated BIND server. After spending some months and completing project, by modifying the source code to do what I wanted, I have realised that by using an obscure and not well documented (almost not documented at all) subset of configuration parameters for root servers it was possible to perform what was needed, so we released a V2 for that project, with its own root(s).

Long story short;

If you know what you need, you can do it in configuration.

If above paragraph is not meaningful for you, reading the code would not help much. BIND is a very specific, and special purpose server, it is not (for example) like Apache, which is also very specific in what it does but general purpose in deployment.

If you want to modify DNS traffic in and around your network, well, do not..