Students will research existing software design documents and resources for both projects and then write a report detailing their differences and helpfulness to various levels of developers.

Prerequisite Knowledge

Students should have:

Taken a CS1 course (Introduction to Programming).

Already learned syntax and the basics of a programming language.

Already learned simple data structures.

Rudimentary software design knowledge

Could be delivered along-with this activity

Ex: Design Patterns knowledge

Learning Objectives

Upon completion, students should:

Understand how thoughtful software design is encouraged, or not, in open source communities.

Be able to give examples of software design artifacts, and how to go about finding them.

Realize what they consider good software design, and be able to back it up with reason.

Realize why software design is important, and how it will effect them in their future careers.

Background:

Is there background reading material?

What is the rational for this activity?

For students, who are often novice and beginner developers, it is critical to understand the big-picture when jumping into a new software project. A proper view of the system-wide architecture can bring context on how the entire system works, instead of focus on a particular component. When you can have knowledge of other pieces of the puzzle, you tend to implement better code because it is thoughtful of how your current focus interacts with functionality around it and even to functionality seemingly far-removed. Students need to be aware of why this helps them and their career, how to find this kind of documentation, and that it might shape their opinions and focus when choosing projects to interact with.

This paper describes how they had to get students to re-think how they write code. The students needed to think more outside of the syntax of the actual language, and more toward software design / repeatable design patterns that dont depend on the coding language.

I am looking at this paper and thinking about the various tasks or activities that they show were done in their classroom. I may be able to use these ideas.

“It should be re-emphasized that practical programming does not play a central role in the unit. At the end of the year students and teachers realized that programming in itself is not the main goal.”