Learning representations for effective and explainable software bug detection and fixing