Outcomes-based computer science education