Chapter 26. Novice Professionals: Recent Graduates in a First Software Engineering Job

Andrew Begel

Beth Simon

Much is written about software engineering education: how to teach novice computer scientists the programming, design, and testing skills they need to become professional software engineers. However, computer science students are not done with their education at graduation; it is really just the beginning. Newly hired engineers must learn to edit, debug, and create code on a deadline while learning to communicate and interact appropriately with a large team of colleagues. In this chapter, we explore the similarities and differences between these two educational experiences, by providing a detailed view of the novice experience of software developers in their first industry job.

Universities try to prepare students for industry by teaching them core computing concepts that will allow them to become lifelong learners and keep pace with innovations in the discipline. Approaches to teaching these “hard” skills have been driven by advances in industry, such as through new programming paradigms (OO) and new development methodologies (Agile, Extreme Programming). Academic settings offer less support for “soft” skills, or human factors in software engineering, such as the ability to create and debug specifications, to document code and its rationale and history, to follow a software methodology, to manage a large project, and to work and communicate with others on a software team.

Students who enter the professional software engineering workforce have to learn new skills, techniques, and procedures, effectively becoming novices all over again. What they may be surprised to find is that the soft skills are a major component of their new jobs [Curtis et al. 1988], [Perkins et al. 1989]. Employers recognize that students entering the workforce directly from university training often do not have the complete set of software development skills that they will need to be productive, especially in large, independent software development companies. An article in eWeek.com interviewed several industry software developers who said that new college graduates lack communication and teamwork skills, and are unprepared for complex development processes, legacy code, deadlines, and working with limited resources [Taft 2007].

Schein proposed that there were three main aspects to introducing newcomers to organizations: function, hierarchy, and social networking [Schein 1971].

Function

This represents the tasks and technical requirements of a position. This is very well addressed through university courses that teach general knowledge such as programming, data structures, and software engineering, and domain knowledge such as graphics, artificial intelligence, and operating systems.

Hierarchy

This is the organizational command structure. This is not covered as well. For example, in many courses where students work in groups, everyone in the group shares equal power, and often equal experience, which is very unlike a newcomer in an industrial job.

Social networking

This is the movement of the newcomer from the periphery of the network toward the center as new personal connections are made. Unfortunately, this is all too often left completely up to the students, with the only message from the faculty being reminders not to cheat or collaborate too closely on homework assignments.

Due to limitations of the instruction they receive in university, we believe that many students are inadequately prepared for software development jobs in industry. We came to this belief after conducting a study of eight college graduates starting jobs as software developers at Microsoft. We observed these new developers in their daily work over a two-month period within the first six months of their employment. After analyzing our data around novice software developers’ tasks, activities, social interactions, and outcomes, we found that although new developers were functionally and technically competent, they lacked preparation and training in the social and communication interactions they encountered on a daily basis. We believe that their initial naïveté caused extra stress, anxiety, low performance, and poor productivity during their formative months at the company.

The lessons from the newcomer socialization research and our data on software developers teach us that the mastery of function, hierarchy, and social networking is critical to the productivity, effectiveness, and satisfaction of new professional software developers. This mastery may be more easily acquired when new software developers are prepared through a variety of pedagogical approaches such as pair programming, legitimate peripheral participation, and mentoring programs. We hope that this chapter’s detailed information on new software developers will enable a better discussion and evaluation of new programs designed to improve undergraduate education. We encourage the reader to think about experimenting with educational programs and interventions while looking at our data.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset