I had a lot of interesting conversations while at SIGCSE
last week, but the best talk I attended was given by Microsoft's Andrew Begel
, who spent a year studying the problems new college graduates face in their first software development job. The takeaway:
New developers' problems are mainly due to poor communication, not technical skills.
What do new developers do?
- Programming (reading >> writing, commenting, proofreading)
- Working on bugs ((repro, reporting, triage) >> debugging)
- Testing (writing, running)
- Revision Control (check in, check out, revert)
- Documentation (reading >> writing, search)
- Specifications (reading >> writing)
- Tools (discovering, finding, installing, using, building)
- Communication (asking questions, persuasion, coordination, email, meetings, meeting prep, finding people, managers, teaching, learning, mentoring)
New developers are good at:
- Peer mentoring
- Using many strategies when debugging
They are bad at:
- Engaging a large, legacy codebase without using written docs
- Reproducing bugs
- Using new tools
- Reflecting on their own progress (knowing when they are stuck)
They interact naively with other team members when:
- Asking questions
- Triaging and resolving bugs
- Attending meetings
Beliefs of new developers:
- I must prove I am smart, productive and write quality code from day 1.
- I must do everything by myself.
- I must fix all bugs I personally find in the code.
- Don't ask questions.
- It compiles, therefore it works. If it has bugs...well, that's what testers are for.
- I know when I get stuck.
- It can't be the bug repro instructions, it must be me.
- My self-worth is directly related to how much I coded today.
I think this is really valuable work; it'd be great to see it repeated with new grad students...