Syllabus
Computer Science 203 Fall 2023
Course Instructor
- Instructor Name: Dr. Gregory M. Kapfhammer
- Office Location: Alden Hall 108
Please visit the instructor’s web site for more information!
Instructor Appointments
- Monday: 10:00 – 11:00 AM, 2:00 PM – 3:30 PM
- Tuesday: 4:30 PM – 5:00 PM
- Wednesday: 4:30 PM – 5:00 PM
- Thursday: 1:30 PM – 3:00 PM
All instructor appointments are 15-minute time slots and take place in Alden Hall, Room 108.
Schedule Overview
- Discussion, Writing, and Programming Sessions
- Developing Professional Skills: Monday, 9:00 AM – 9:50 AM, Alden 109
- SE Book: Software Engineering at Google
- First half of class: Discuss executive summaries for chapters read last week
- Second half of class: Publish a professional précis for next week’s chapters
- Developing Technical Skills: Wednesday, 9:00 AM – 9:50 AM, Alden 109
- FB Book: Fuzzing Book
- DB Book: Debugging Book
- First half of class: Discuss executive summaries for chapters read last week
- Second half of class: Publish a professional précis for next week’s chapters
- Developing as Developers: Friday, 9:00 AM – 9:50 AM, Alden 109
- Review the professional précis documents written by team members
- Create an executive summary for the week’s professional skills
- Create an executive summary for the week’s technical skills
- Publish the executive summaries to the Developer Development web site
- Confirm our team’s readiness for next week’s in-class discussions
- When needed, implement and demonstrate software engineering project
- Developing Professional Skills: Monday, 9:00 AM – 9:50 AM, Alden 109
- Collaborative Software Engineering: Tuesday, 2:30 PM – 4:20 PM, Alden 109
Course Description
A human-centric study of the principles used during the engineering of high-quality software systems. In addition to examining the human behaviors and social processes undergirding software development methodologies, students participate in teams tasked with designing, developing, and delivering a significant software application for a customer. During a weekly laboratory session, students use state-of-the-art software engineering, management, and communication tools to complete projects, reporting on their results through both written documents and oral presentations. Students are invited to use their own departmentally approved laptop in this course; a limited number of laptops are available for use during class and lab sessions.
- Prerequisite: CMPSC 101
- Distribution Requirements: SB, SP
Learning Objectives
Allegheny College’s educational program is designed so that its graduates are able to:
AC-1: Think critically and creatively.
AC-2: Communicate clearly and persuasively as speakers and writers.
AC-3: Invoke multiple ways of understanding to organize and evaluate evidence, and to interpret and make sense of their experiences and the experiences of others.
AC-4: Apply their knowledge and learning to engage in informed debate, and to analyze and solve problems.
Computer Science 203 at Allegheny College is a core course in the Software Engineering major. Graduates with the Software Engineering major, who all take the Computer Science 203 course, must demonstrate their attainment of these learning objectives:
SE-1: While working in a team, can effectively design, implement, evaluate, improve, and document a solution to a problem delivered as a maintainable software system.
- Enables the attainment of AC-1 and AC-4
SE-2: Demonstrates competency in the theories, models, and practices of project domains that require the engineering of software.
- Enables the attainment of AC-2 and AC-3
SE-3: Can effectively create and use software engineering tools that support software engineering activities like testing and debugging.
- Enables the attainment of AC-1 and AC-4
SE-4: Can effectively manage and predict the cost, scope, and deadline of a software engineering project.
- Enables the attainment of AC-2 and AC-3
SE-5: Uses effective oral and written communication methods to explain both the technical and product-use details of a software artifact.
- Enables the attainment of AC-1 through AC-5
The following list itemizes the three types of activities and two types of assessments in Computer Science 203 and illustrates their connection to the course learning objectives:
- Course Activities:
- Technical Development: Develops SE-1, SE-2, SE-3
- Professional Development: Develops SE-3, SE-4, SE-5
- Project Development: Develops SE-1, SE-2, SE-3, SE-4, SE-5
- Course Assessments:
- Executable Examinations: Assesses SE-1, SE-2, SE-3
- In-Person Assessments: Assesses SE-3, SE-4, SE-5
Finally, the following list illustrates how the learning objectives for Allegheny College are attained through the successful completion of Computer Science 203.
- AC-1 is attained through the course learning objectives SE-1, SE-3, SE-5
- AC-2 is attained through the course learning objectives SE-2, SE-4, SE-5
- AC-3 is attained through the course learning objectives SE-2, SE-4, SE-5
- AC-4 is attained through the course learning objectives SE-1, SE-3, SE-5
All five of the course’s learning objectives support the SP and SB distribution requirements.
Course Textbooks
- Software Engineering at Google - abbreviated on this site as SE
- Fuzzing Book – abbreviated on this site as FB
- Debugging Book – abbreviated on this site as DB
Students who complete all of the work on the course schedule will read and write a professional précis for twelve reading assignments in SE (i.e., SE1 through SE12), nine reading assignments in FB (i.e., FB1 through FB9), and four reading assignments in DB (i.e., DB1 through DB4).
The course textbooks are connected to the three main type of course activities in these ways:
- Professional Development as a software engineer:
- Active engagement with content in SE
- Publication of a professional précis of each reading assignment on personal web site
- Use the GitHub issue tracker to review the work of your professional précis partner
- Revise your professional précis based on feedback from your weekly partner
- Publication of a team-based executive summary on this web site
- Technical Development as a software engineer:
- Active engagement with content in FB and DB
- Publication of a professional précis of each reading assignment on personal web site
- Use the GitHub issue tracker to review the work of your professional précis partner
- Revise your professional précis based on feedback from your weekly partner
- Publication of a team-based executive summary on this web site
- Project Development to hone professional and technical knowledge and skills:
- Application of SE to technical and professional tasks during project engineering
- Application of FB and DB to the technical tasks during project engineering
- Integration of professional and technical skills during project engineering
All students are responsible for taking the following steps in regards to FB and DB:
- Install an appropriate version of both FB and DB (both currently designate Python
3.10.2
) - Complete one-time setup and installation steps for the FB or DB textbooks:
- Create a virtual environment for the book’s dependencies with
python -m venv venv
- Enter into the virtual environment for a textbook with
source venv/bin/activate
- Install all platform-dependent binaries for the book’s dependencies (e.g.,
graphviz
) - Install the book’s dependencies with
pip install -r requirements.txt
- Troubleshoot all of the issues that arise during the installation of the book’s dependencies (e.g., one or more missing dependencies cause a Jupyter Notebook cell to produce a stack trace when you press Shift-Enter to run the cell)
- Create a virtual environment for the book’s dependencies with
- Repeatedly perform the following steps when writing a professional précis:
- Change into the directory that contains the contents of FB or DB
- Enter into the virtual environment for a textbook with
source venv/bin/activate
- Run a Jupyter Lab server using a command like
venv/bin/jupyter-lab
- Use the Jupyter Lab server to locate and execute notebooks for chapters in FB and DB
- Watch the embedded video(s) and run all of the providing source code segments
- Use the Quarto system to publish a professional précis for each reading assignment
- Use GitHub Actions and Netlify to host and publish your Quarto-based web site
- Collaboratively use Quarto to publish an article’s executive summary to this web site
The course will also leverage excerpts from the following supporting text books:
- Software Engineering - The Soft Parts, by Addy Osmani
- A Philosophy of Software Design, by John Ousterhout
- How to Write Good Programs: A Guide for Students, by Perdita Stevens
- The Mythical Man-Month, by Frederick P. Brooks, Jr.
Course Policies
Assessment
The grade that a student receives in this class will be based on the following categories. All of these percentages are approximate and, if the need to do so presents itself, the course instructor may change the assigned percentages during the academic semester.
Category | Percentage |
---|---|
Team Participation | 5% |
In-Person Assessments | 5% |
Midterm Examinations | 10% |
Final Examination | 10% |
Professional Development | 15% |
Technical Development | 15% |
Project Development | 40% |
These assessment categories have the following definitions:
Team Participation: Students are expected to regularly attend and actively participate in all class and project development sessions. After either an unexcused absence or a late attendance to either a class or project development session on two separate occasions, a student’s overall team participation grade will be reduced by half a percentage for each additional time they are absent or late in an unexcused fashion. Students who need to miss class or attend class late for an excused reason should communicate their situation to the instructor in a timely fashion. After one warning per week, a student’s weekly team participation grade will be reduced if they are observed undertaking non-course-related activities like viewing email, social media, or other content not about software engineering.
Midterm Examinations: The two midterm examinations are online cumulative assessments covering all prior material from the course sessions, as outlined on the course schedule. Unless prior arrangements are made with the instructor, all students should use their computer to take these tests on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. Each midterm is an executable examination that a student will complete through the use of GitHub, VS Code, and the Python programming tools installed on their laptops.
Final Examination: The final examination is an online cumulative assessment covering all of the material during all of the course sessions, as outlined on the course schedule. Unless prior arrangements are made with the course instructor, all students should use their computer to take the final examination on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. The cumulative final is an executable examination that a student will complete through the use of GitHub, VS Code, and the Python programming tools installed on their laptops.
In-Person Assessments: The two in-person assessments are cumulative evaluations conducted through an in-person conversation with the course instructor. All students should be prepared to answer at least one question each about their attainment of professional and technical skills and the source code and documentation of the software project(s). Each question response will be assessed by the instructor on a checkmark basis.
Professional Development: Graded on a checkmark basis and building on material in the Software Engineering at Google textbook (i.e., SE) and the content covered during that week’s in-person classroom sessions, the professional development tasks, namely the publication of an individual professional précis and a team-based executive summary, both have the following goals: (i) help a learner to demonstrate that they can remember the learned material by recalling facts, basic concepts, and answers to questions presented in SE and (ii) allow a learner to demonstrate an understanding of facts and ideas by translating, interpreting, and contextualizing the main professional concepts found in SE.
Technical Development: Graded on a checkmark basis and building on material in the Fuzzing Book (i.e., FB) and Debugging Book textbooks (i.e., DB) and the content covered during that week’s in-person classroom sessions, the technical development tasks, namely the publication of an individual professional précis and a team-based executive summary, have the following goals: (i) help a learner to demonstrate that they can remember the learned material by recalling facts, basic concepts, and answers to questions presented in FB/DB and (ii) allow a learner to demonstrate an understanding of facts and ideas by interpreting and implementing the main technical ideas presented in either FB or DB.
Project Development: These team-based assignments invite students to explore different techniques for specifying, designing, implementing, testing, documenting, deploying, and maintaining real-world, open-source Python programs. These assignments also encourage students to use and build software engineering tools to complete tasks like debugging and testing. The technical work that a student completes during project development will take place in a public GitHub repository and will be further documented and reflected on in a private GitHub repository that the instructor will use to furnish feedback to the student. Finally, the professional work that a student undertakes as part of project development will occur in both an in-person setting and through a public GitHub repository, with the use of a private GitHub repository offering the opportunity for the student to document and reflect on their contributions and for the instructor to offer detailed feedback.
Both the Professional Development and Technical Development assessment categories require students to complete the following tasks on a weekly basis:
- In collaboration with a partner, read an assigned article in SE, FB, or DB and write your own professional précis, that should contain, at minimum, the following document sections:
- Summary of the article in a fashion that clearly explains its key points.
- Analysis of the article through the translation and/or re-interpretation of its central points into a context that is relevant for you as a developing developer.
- Description of actions items that will help you and the team of software engineers to enhance their development as developers and the completion of the long-term software engineering projects. Each action item should have a clear description of the steps that the author and/or the team should stop doing, start doing, and keep doing, as described in The Ultimate Guide to the Start, Stop, Continue Retrospective.
- Working in a partner-based fashion, the review of your partner’s professional précis for either an SE or FB/DB article, resulting in the creation of an issue in the GitHub issue tracker for your partner’s web site that summarizes the essence of your suggestions.
- Using GitHub, a response to the suggestions that your partner made in the GitHub issue tracker and a summary of the steps taken to improve your professional précis.
- The publication of the professional précis to a Netlify-hosted web site using Quarto.
- A team-based, in-class review of the professional précis that was written by each student in the course and then a synthesis of the key ideas that ultimately results in the collaborative publication of a team-based executive summary of the technical or professional content.
- For both the professional précis and the executive summary, either an individual student or a team of students must complete their work in advance of the class session during which the content will be discussed, as outlined in the course schedule. When an individual does not complete their professional précis according to the agreed on schedule this will result in a reduction of either their technical or professional development score. When an executive summary is not completed according to the agreed on schedule this will result in a reduction in either the technical or professional development score for every student.
The Project Development assessment category requires students to complete, on a weekly basis, both team-based and individual tasks like the following:
- Sprint planning tasks during which between three to five students will lead a team-based discussion to identify the main theme for the weekly sprint and to organize the team and assign work to individuals in the project’s GitHub issue and/or milestone tracker.
- Project implementation tasks when individuals and/or groups of students will implement the required features in preparation for the following week’s project development session.
- A project demonstration during which a team of students will connect a laptop to a projector and then demonstrate the features that were required for the prior sprint.
So as to ensure that they develop as developers, all students are required to participate in all of the activities associated with technical development, professional development, and project development. Every student is also required to document their activities in each of these three categories, including links to relevant artifacts in a GitHub repository. In addition to regularly providing project- and course-relevant feedback in the appropriate public GitHub repository (e.g., the GitHub for a course project), the instructor will furnish individualized feedback to each student in a private GitHub repository used for documentation and reflection. Unless there is a documented extenuating circumstance, the course instructor will not assess a student’s contribution to technical, professional, or project development tasks unless it is evident in a GitHub repository in the form of, for instance, written work in the GitHub issue tracker, project management through the review of a pull request, or contribution of source code or documentation to a pull request that is merged into main branch of a GitHub repository.
Assessment Policies
Unless exempted by the instructor, students must abide by the following assessment policies: All assignments will have a stated due date shared through GitHub, GitHub Classroom, and/or the Developer Development Discord Server. All reflections on and documentation of professional development, technical development, and project development should be committed to private GitHub repositories. In contrast, the publication of the professional précis that a student writes each week should be published to their Quarto-based web site hosted on Netlify. The feedback that a student shares with their professional précis partner should be evident in the GitHub repository for that partner’s web site. Finally, the collaboratively published executive summaries should be reviewed and discussed through GitHub and published on the Developer Development web site and the completed version of each software project should be available in the project’s public GitHub repository. No credit will be awarded for any course work that you submit to the incorrect GitHub repository or web site. Unless special arrangements are made with the instructor, no work will be accepted after the deadline. Using a report that the instructor shares with you through your GitHub repositories devoted to documentation and reflection, you will privately receive a grade for and feedback on technical development, professional development and project development. Your grade will be a function of whether or not you completed work that fulfills the project’s specification and submitted it by the deadline to the stated platform (e.g., a GitHub repository or Netlify-hosted web site). Students may “spend” up to five developer development “tokens” that they may use to either (i) secure 48 hours of additional time to complete an assigned task or (ii) request a reassessment of an already graded project. You may use a token to request the reassessment of work that you completed as part of tasks in the professional development, technical development, or project development categories. For instance, a student may choose to spend a token by asking the course instructor to reevaluate one of the professional précis articles that they posted to their Quarto-based web site. Outside of these five tokens, the instructor will not consider any additional requests for deadline extensions or assignment reassessment. It is mandatory for all students to attend the course sessions. If, due to extenuating circumstances, you will not be able to attend a session, then, whenever possible, please communicate with the instructor at least one week in advance to describe your situation. Students who have any signs of illness should not attend any in-person course sessions. In order to minimize confusion and maximize learning, students must invest time to prepare for the class sessions that focus on professional development, technical development, and project development. Although the course instructor and the student technical leaders will always be available to serve as guide for individual students, teams of students, and the entire class, it is expected that students will volunteer to lead and actively contribute to all class sessions. Only those students who have prepared for class by reading the assigned material, writing the required articles, and reviewing the content written by other students will be able to effectively participate in these class discussions. In order to help students remain organized and to effectively prepare for classes, the course instructor will maintain a course schedule with reading assignments, project descriptions, and executive summaries, available on this site.Assignment Submission
Assignment Evaluation
Developer Development Tokens
Course Attendance
Class Preparation
Seeking Assistance
Students who are struggling to understand the knowledge and skills developed in any of the course sessions are encouraged to seek assistance from the course instructor and/or the student technical leaders. Students should, within the bounds of the Honor Code, ask and answer questions on the Developer Development Discord Server; please request assistance from the instructor and student technical leaders first through public Discord channels before sending an email. Students who need the course instructor’s assistance are invited to schedule a meeting through the course instructor’s appointment scheduler and come to the meeting with all of the details needed to discuss their question. Students can find out the office hour schedule for student technical leaders by viewing the list of student technical leaders.
Using GitHub and Discord
This course will primarily use GitHub and Discord for all course communication. We will use GitHub for the sharing of both source code and course projects and for reporting issues in those materials. We will use two distinct Discord servers for all course discussions. The Developer Development Discord Server provides a way for members of the developer development community to use text and video to chat with each other and will be the main forum for discussing the professional and technical content in software engineering. The Allegheny College Computer Science Discord Server will be the main forum for Department of Computer Science announcements. Any content that a student wants the instructor to assess (e.g., a professional précis or a contribution to a course project) must be in a GitHub repository.
Using Email
Although we will primarily use the Developer Development Discord Server for class communication, the course instructor will sometimes use email to send announcements about important matters such as changes in the schedule. It is your responsibility to check your email at least once a day and to ensure that you can reliably send and receive emails. This class policy is based on the statement about the use of email that appears in The Compass, the College’s student handbook; please see the course instructor if you do not have this handbook.
Honor Code
The Academic Honor Program that governs the entire academic program at Allegheny College is described in the Allegheny Academic Bulletin. The Honor Program applies to all work that is submitted for academic credit or to meet non-credit requirements for graduation at Allegheny College. This includes all work assigned for this class (e.g., executable examinations and course assignments). All students who have enrolled in the College will work under the Honor Program. Each student who matriculates at the College acknowledges this Honor Code pledge:
I hereby recognize and pledge to fulfill my responsibilities, as defined in the Honor Code, and to maintain the integrity of both myself and the College community as a whole.
Effective Engineering
Students who engineer the source code and documentation for their Netlify-hosted web sites, the Developer Development web site, and the two long-term course projects should ensure the implementation of a high-quality final product. While students are permitted to use a wide variety of software engineering tools, such as integrated development environments, testing frameworks, automated debuggers, and code generators (e.g., systems that leverage large language models like GitHub Copilot) and documentation sites such as StackOverflow, they must take responsibility for all of the source code and documentation that they submit for this course, including artifacts that are automatically generated by a software tool.
This means that every student must work as an effective engineer by documenting the sources for their work and verifying the correctness, maintainability, and long-term reliability of all source code and documentation that they submit. As such, a student who uses software tools to create content is responsible for citing their sources and demonstrating their understanding of it during the in-person assessments. Moreover, all students in the class are responsible for all of the source code and documentation submitted to the GitHub repository that hosts the course projects, including any tool-generated software artifacts. This means that every student should be able to answer questions, during an in-person assessment, about any technical or professional content, including that which was automatically generated by a software tool.
Students who are effective engineers also pledge to abide by the ACM Code of Ethics and Professional Conduct. Unless the students in this course furnish a different governing contract, they also pledge to follow the principles espoused by exemplary technical organizations, such as Oxide Computer and its public statement of mission and principles.
Disability Services
Students with disabilities who believe they may need accommodations in this class are encouraged to contact Student Accessibility and Support Services (SASS) at 814-332-2898 or studentaccessibility@allegheny.edu
. SASS is located in the Center for Student Success in Pelletier Library. Please contact SASS as soon as possible to ensure that approved accommodations are implemented in a timely fashion.
Welcome Message
In reference to software, Frederick P. Brooks, Jr. wrote in chapter one of The Mythical Man Month that “the magic of myth and legend has come true in our time.” Software is a pervasive aspect of our society that changes how we think and act. High quality software also has the potential to positively influence the lives of many people. Moreover, the specification, design, implementation, testing, maintenance, and documentation of software are exciting and rewarding activities! At the start of this class, I invite you to pursue, with great enthusiasm and vigor, an adventure in software engineering as you develop as developers.