Week 1: Early Career Software Developers
“Listening to Early Career Software Developers” Paper
You now have a new batch of CMPSC 156 students! But before we dive into the diving, we have to motivate the students. Why should they take this class? Why are we teaching it? What skills will they learn from it? What purpose does this course fulfill in their professional career development?
The objective of the first few lectures in CS 156 is to provide the necessary background for why a course of this nature is needed and how this course will attempt to alleviate concerns faced by young software developers in industry. One of the main teaching tools that we use to accomplish this is Craig et. al. [1]. The paper’s main contribution is that it identifies six key areas / challenges that young software developers face when first entering professional software development positions:
- “What”: Differences in Scope
- Academic projects are often well-defined, while industry projects are often ambiguous and vague
- “When”: Short vs. Long Time Spans
- Academic projects generally last a few weeks, while industry projects often last for years
- “Who”: Individuals vs. Large Teams
- Academic projects are done individually or in small groups, while industry projects are done in large teams and organizations
- “Why”: Learning vs. User Needs
- Academic projects are designed to be learning tools, while industry projects are designed to serve actual customers
- “How”: Ad-Hoc vs. Professional Tools and Practices
- Academic projects only use tools when needed, while industry projects are often accompanied by a suite of professional tools and development practices
- “How Big”: Small vs. Large Codebases
- Academic codebases are often small, while industry codebases are often very large
To get students to understand these issues and think of ways to address them, we start the course by facilitating a collaborative discussion about the six challenges listed above across team members. This serves to not only provide the necessary context for the projects in this class, but also give students a chance to work with and communicate across teams, which addresses one of the above points and will get students acquainted with the tools we use for communication within the class.
Lecture 1: Introduce the problem / paper
As part of the first lecture, introduce the paper and the motivation for teaching the course.
Why is this course different from all of the other courses we teach? Because, as a young software developer, I saw a gap between what I learned in school and what I needed in industry.
There’s a huge gap between what you learn in Computer Science coursework and what you’ll actually do in industry. Students will often have no trouble getting through a Computer Science program, but are lost upon entering industry for the first time.
Our goal is to teach students how to do software development in the real world by bridging the gap between programming in Computer Science curriculum and professional software development in industry.
Encourage students to read the entire paper, but at minimum, the “Abstract” (section 1) and the “Analysis and Discussion” (section 4). Combined, this is 6-7 pages long.
This will be followed by an individual homework assignment where each student writes about their assigned section, and then an in-class discussion within and across teams.
Lecture 0 - UCSB CS156 Spring 2022
Homework 1: Analysis of chosen key idea
Before the first lecture, student teams of six members each should have been established.
When introducing the paper, have teams assign each of the six key areas listed in the “Analysis and Discussion” section to one member within the team. For Homework 1, students should thoroughly read their assigned section and answer the following questions:
-
(40 pts) For the aspect of software development that you were assigned, the paper describes some aspects of what software development in school is like vs. what it is like in industry. Now consider your own personal experiences in school. Do they line up with what was reported in the paper or are they different? Is it a mix? Write briefly about your own personal experiences in school that are relevant to this topic and how they are the same, different, or a mix of both, as compared to what the interview subjects in the paper reported.
-
(30 pts) What are the things that developers found surprising or different about industry in terms of this aspect of software development?
-
(30 pts) What are suggestions for things students could do in school to better prepare them for this aspect of software development as practiced in industry? These can be ideas from the paper or ideas of your own. Either is fine, but please clearly identify whether each idea is your idea or one from the paper.
Have students complete this homework in a GitHub repository shared with their entire team (and visible only to their team and the staff). Advise students that they will be using these responses to contribute to a larger group discussion in an upcoming lecture.
Homework 1 - UCSB CS156 Spring 2022
Lecture 2: Discussion of the paper
By now, each student will have completed an individual analysis of one of the six key areas where academia can be different from industry. Now it’s time to talk about their findings with other students in the class. Normally, this discussion happens in the lecture immediately proceeding the HW1 deadline.
In this discussion, students will have the opportunity to:
- Discuss their key area with other students who read about the same key idea
- Share their findings about their key area with the other students in their team
The goal of the first group is to have each “key idea” group agree on what the important takeaways are from their section. Students can bounce ideas off of each other and draw parallels between their own experiences in academia, as well as industry, if the student has participated in internship programs. Students should also discuss what skills they think they will need to learn to be prepared to tackle this aspect in the professional world. The hope is that many of the skills that students realize they will need are ones that will be addressed later on in the course, allowing students to understand why this course is structured the way that it is.
The goal of the second group is for students to now learn about the other key ideas / challenges from the other members of their team, who should each be “experts” in their respective sections following the first group discussion. Each member of the team should share the important takeaways that they have discussed / agreed upon in the previous group, as well as the skills that will help them get there. Once the entire team has shared their findings, the team should work together to establish a list of learning goals, i.e. a set of skills / goals that the team expects to be able to do by the completion of this course. Have them document this in a place that will always be visible to the team, so they can refer to this throughout the course (e.g. in retrospectives) as a way to reflect on team performance.
Advise students to document their discussions in Slack, either in their team channel or the #ltd channel corresponding to their assigned section, depending on what group they’re talking to. This serves as a resource that students can look back to later on in the course, and also serves as documentation for a participation activity.
Lecture 3 - UCSB CS156 Spring 2022
References
[1] Craig, M., Conrad, P., Lynch, D., Lee, N. and Anthony, L. 2018. Listening to early career software developers. Journal of Computing Sciences in Colleges. 33, 4 (Apr. 2018), 138–149.