I personally think there is no such books for teaching how to transfer blueprint into code.
My tips for transferring would be :
Define logic chunks from the main uber graph. Also remove duplicated / unwanted logic first.
For each of the event, there would be a corresponding virtual function in C++. For example, BeginPlay(), Tick(), OnConstruction(). Check out the API page for the virtual functions.
You can do something similar like this
void BeginPlay()
{
Super::BeginPlay();
// Calling super means you attaching logic.
// You can omit super if you wants a full override.
// But don't do this on main framework function like Tick().
// You will prevent such object receiving ticks from uppermost layer.
// All your blueprint logic should converted here.
}
All your function are can be dealt in same way. Create function in C++, with same parameter list. Then call them in code. If you wish to call them again in Blueprint, consider check out all UFUNCTION / UPROPERTY / UMETA usage.
Keep on refactoring and simplifying code. Blueprint are excellent when dealing with sequence of logic calls, but could be the worst when come to array sorting, complex math, containers accessibility, etc. I would use Blueprint for logic sequence, so I can see execution fires on simulation, and C++ to hide logic details.
For blueprint function, you can hover over them and see their C++ path. Navigate in your engine files, and find that function. You can decide to use them directly in code, or you can write a simpler one to fit your need. Visual Assist would be helpful here.
The rest is all about refactoring, or try to negate logic for cleaner/shorter implementation.