Wednesday, October 27, 2004

Preparing CS students for real-life jobs

Philp Greenspun has a draft article, how best to preapre student,
examining from his point of view current situation of standard
US Computer Science curriculum in relation to what the industry needs.

Its an interesting read and teachers and schools ought to reflect on it.

Keypoints/Notes:

What's wrong with graduates of standard U.S. CS program?

- employers dissatisfied with US-educated workforce (applicable to us also)
- good only at well-defined problem sets
- haven't done much open-ended project work
- generally not ready to a complex, time-constraint project
- brittle designs that cannot be extended to changing requirements

- haven't done much groupwork
- universities overlooked importance of facilities for studs to work together
- universities structured learning on homeworks fighting off distractions
- universities less support on students w/ poor study habits
- not good at taking vague goals from non-technical person and turning them
into concrete specifications that can be implemented with within fixed budget
of time and resource

- not good at communicating (writing, presentations, asking questions or
users and customers)
- lack experience with user interface design and testing
- not dedicated to completing something of value to end-users
- satisfied with good grade
- lack focus on big picture - how their work relates to larger organizational goals
- not very experienced with quickly making sense of large commericial tools
and libraries

What do we want graduates to be able to do?

- wanted graduates to get a job
- current news articles are correct but not complete, many are also being hired
- give energetic young people open-ended project and group work experience
- wanted graduates to have a satisfying careers where they have autonomy,
responsibility, and job security
- sociologists found relation in loss of worker satisfaction as craft jobs are
replaced by factory jobs (working on a small component of a product, not
having a big-picture understanding)

- a professional programmer ought to be able to pick worthwhile problems to
attack. engineering is the art of building cost-effective solutions to problems
that society regard as significant. a person who blindly does what he or she is
told, without independently figuring out the context and significance of the
problem, is not doing engineering.
- a professional programmer needs to be able to sit at a meeting with decision
makers, prepared with substantial domain knowledge, and make
significant contribution to the discussion

Some ideas for a 21st-Century Undergrad CS program

- students come to work on a permanent lab settings, rather like a corporate
open-office maze of desks and dividers. a student who is stuck can therefore
draw on help from surrounding students and from roving teaching assistants.
- students be able to study 48-weeks per year, perhaps in 4 12-week quarters
and finish a bachelor in 30-36 calendar months than the current Ivy-copied
26-28 weeks
- not all are wealthy customers (family)
- early graduate, less expense, well-prepared
- students should graduate with portfolio of work and credentials to show
employers
- teachers as coach not evaluators/giver of grades, standard measure
- all students should have the character of an engineering project:
client talks about the problem; student team prepares a written plan for the
solving the problem; student team discusses the plan with the client;
student team builds a prototype; student team tests the prototype with the
client and the users; student refines the prototype in response to testing;
student team documents its result
- payoff - the graduate will be comfortable with this engineering process