Method used in protein engineering that mimics the process of natural selection to steer proteins or nucleic acids toward a user-defined goal