As one who started off with blueprints I can safely say that both are viable and work well with one another.
Blueprints:
- Easy to prototype new ideas
- Easy to debug due to visual feedback
- Easy to maintain, expand
- When you make an error it does not result in a fatal error and crash
C++:
- Much, much better performance
- More freedom, can extend or override features of the engine, unavailable for blueprints
- You can define functions and properties to be UPROPERTY or UFUNCTION so your C++ function is available in blueprints.
- Downright crash if you do not have good error handling, which forces you to find and eliminate bugs.
My current development cycle is as follows:
Create stuff in blueprints, toy around > Re-implement in C++ > Make child blueprint class from C++ class > Repeat
This way I can iterate fast but also the end result is much more robust.