CS 312 Software Development

Lecture 00 - Introduction

Introduction

CS312's main topics:

  1. Effective processes for managing SW development teams, e.g. Agile
  2. SW development best practices and the supporting tools and services, e.g. VCS (git and GitHub), CI, ...
  3. Modern web application technologies, e.g. JavaScript, React, ...

What is this class not? Software engineering.

There is a separate (but related) field that is attempting to make SW development an engineering discipline. Some of the ideas we will use come from that work, but we will not get into the formalisms or the theory that a software engineering class would include (e.g. requirements languages). That said the term "SW engineer" is often used a catch-all, not just someone who practices those formal methodologies.

What also is this class not? A JavaScript class. CS312 is not a class about JavaScript, it is a class about SW development that uses JavaScript and web applications as a vehicle.

What I ask of you

What I ask of you: "Do the class". That is commit to the CS312 tools and processes, even if it seems too process-intensive at times, or even if it conflicts with what you have learned or used in other settings, e.g. an internship. I predict that you will find that these processes actually make your teams more productive by enabling everyone to contribute effectively.

One goal of this course is to practice formal SW development methodologies. That is the process itself is important. And recall that perfect practice makes perfect. That is make that extra effort to write a good test (first) or maintain the product backlog (two things we will learn about it). Think of it as building your SW development muscle memory. This practice will give you the experience to make informed choices in the future about the best processes, tools, and technologies.

This class has a lot of moving parts (see "Getting Started"). And we have made a lot of choices for tools, techniques, methodologies. In some cases it is a choice among many similar alternatives where there to is no "right" answer. That is I don't want you to get bogged down in questions of whether any particular tool or technology is the best in a technical or other sense (we often are optimizing for the best class experience, not the best tool). You may be more familiar with the alternatives. In keeping with above, we ask you to "do the class" with the class tools. Doing so will make your teams more efficient. At the same time, if our approach seems to conflict with best practices, don't hesitate to ask us about it - we will both learn from the ensuing discussion.

Warning, the only constant is change

The world will move underneath us. Web technologies are moving at a torrid pace (and in some ways problematic pace). The software/library versions we use at the beginning of the semester may be out of date by December. We will try to use techniques to maintain consistent environments, but be mindful of that change. And be mindful when reading posts on StackOverflow, etc. Check the dates!

A diversity of backgrounds

We have a wide variety of backgrounds:

  • Some of you have learned these technologies in/for another class
  • Some of you have used these technologies in an internship or summer research, and
  • Some of you have never touched these technologies before...

In some of these aspects, CS312 will similar to your future working environments but more challenging (a company doesn't usually create a team of composed only of new developers). To overcome these challenges, we expect you to:

  • Be responsible for independently picking up the details of unfamiliar tools or technologies.
  • Put in the effort to make sure you don't get left behind. Use the resources on the course page (and others) and make sure to ask me and others for help when you need it. Don't be the teammate that can't contribute because you don't know what is going on!

If you have prior experience, we expect you to:

  • Use your knowledge to actively make your team better, not to sit back in judgement or frustration. Recall the often the best way to learn is to teach (e.g. "see one, do one, teach one"); you will get more out of the class if you actively engage with all of your classmates, including those with less experience.
  • Understand you can't do it alone. It may seem like you can do the project better or faster by yourself, but the end product will actually be worse if the whole team can't (or doesn't) contribute.

A recent study of what makes a great SW engineer at Microsoft, identified these attributes in engaging with teammates.

  • Creates shared context: molding another person’s understanding of the situation while tailoring the message to be relevant and comprehensible to the other person.
  • Creates shared success: enabling success for everyone involved, possibly involving personal compromises.
  • Creates a safe haven: creating a safe setting where engineers can learn and improve from mistakes and situations without negative consequences.
  • Honest: truthful (i.e. no sugar coating or spinning the situation for their own benefit).

Last updated 02/18/2021