Understanding software through linguistic abstraction