How should a software dev learn a new concept that is hard to understand?