COMP 318 Software Development

Quality Software Development in the Age of AI

James Skon, Chalmers 428, 740-427-5369

Department of Mathematics and Statistics

Room: Hayes 213

Time: 1:10-2:00pm

Office: Chalmer 428
Office Hours: 10:11-11:00, Days: MWF, 9:00-11:00, Days: MWF

Please sign up for an appointment here: Link
Walk-ins are welcome, but people with appointments are given priority.

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.C. A. R. Hoare (1980 Turing Award Lecture)

Course Description

This course introduces students to modern software development practices in the age of AI. Students learn to design, build, test, deploy, and maintain full-stack web applications using React, Node.js, and MariaDB on a Linux platform. Emphasis is placed on high-quality software engineering practices, including code readability, modular design, version control, testing, security, and continuous integration. The course begins by developing foundational skills with limited reliance on AI and then transitions to responsible AI-assisted development, teaching students how to use AI tools effectively while avoiding poorly designed and unmaintainable code. By the end of the course, students will have experience building AI-enabled applications and completing a substantial project that demonstrates thoughtful design, robust implementation, and professional development workflows.

Course Objectives

By the end of this course, students will be able to:

  • Deliver a substantial software project that demonstrates professional-quality design, implementation, testing, deployment, and responsible AI-assisted development.Course Core Philosophy.
  • Design and implement full-stack web applications using React, Node.js, and MariaDB, deployed on a Linux server using professional development tools.
  • Apply core software engineering principles—including modularity, readability, separation of concerns, and maintainability—when designing and implementing software systems.
  • Use version control effectively by managing codebases with Git and GitHub, including branching, pull requests, code reviews, and meaningful commit histories.
  • Develop and execute testing strategies that include unit testing, integration testing, and system testing, and use tests to support regression prevention.
  • Set up and use continuous integration and deployment (CI/CD) pipelines to automate testing and deployment workflows.
  • Identify and mitigate common security risks in web applications, including improper authentication, insecure data handling, and injection vulnerabilities.
  • Design software systems before implementation, using written design documents, interface definitions, and architectural diagrams to guide development.
  • Use AI tools responsibly as development assistants, including generating code, tests, and documentation, while critically evaluating, refining, and taking full responsibility for AI-generated output.
  • Write effective prompts and specifications for AI tools that reflect clear requirements, constraints, and design intent.
  • Evaluate and refactor AI-generated code to improve correctness, performance, security, readability, and maintainability.
  • Integrate AI services into web applications in a safe and purposeful way, recognizing appropriate and inappropriate uses of AI within software systems.
  • Collaborate effectively on software projects, either individually or in teams, by planning work, communicating design decisions, and iterating based on feedback.
  • Explain and justify design and implementation decisions, including tradeoffs related to performance, security, maintainability, and AI usage.

Three mantras that repeat all semester:

  • AI is a junior developer, not an architect
  • Design precedes code
  • If you can’t explain it, you don’t ship it

Course Narrative: Software Development in the Age of AI

Software development is undergoing a fundamental shift. Modern developers now work alongside powerful AI tools that can generate code, tests, documentation, and even design suggestions. While these tools can dramatically increase productivity, they also introduce new risks: poorly designed systems, insecure code, unmaintainable “AI slop,” and a loss of understanding and responsibility.

This course is designed to prepare students to be competent, thoughtful, and responsible software developers in an AI-assisted world.

Rather than treating AI as a shortcut or replacement for learning, this course treats AI as a tool that amplifies both good and bad engineering practices. Students will learn how to design, build, test, deploy, and maintain real web applications—first by developing foundational skills without heavy reliance on AI, and later by learning how to use AI effectively as a coding, design, and testing assistant.

The course has two intertwined goals that run throughout the semester:

First, students will learn the principles of high-quality software development. These include good design practices, readable and maintainable code, effective use of version control, testing at multiple levels (unit, integration, and system testing), security awareness, and professional workflows such as code reviews, continuous integration, and continuous deployment. These topics will be revisited continuously as students build increasingly complex systems.

Second, students will learn modern full-stack web development from the ground up. Using React on the frontend, Node.js on the backend, and MariaDB for persistent storage, students will build applications that run on a Linux (Ubuntu) server using industry-standard tools such as VS Code and GitHub. The course assumes only an introductory programming background and emphasizes understanding the platform before relying on automation.

During the first part of the semester, students will focus on learning the full-stack platform and fundamental software engineering practices, with limited use of AI tools. This phase emphasizes writing, debugging, and understanding code directly. Students will build small but complete applications to develop confidence and technical fluency.

Midway through the semester, the course intentionally transitions to AI-assisted development. Students will learn how to use AI responsibly by starting with clear designs, well-defined interfaces, and explicit requirements. They will practice writing effective prompts, evaluating AI-generated code, refactoring weak solutions, and using AI to assist with testing and documentation—while remaining fully accountable for correctness, security, and maintainability.

In the latter part of the course, students will design and build an AI-enabled web application, learning how to integrate AI services into their own systems. Finally, students will propose and develop a substantial project—either individually or in small teams—that they will iterate on for the remainder of the semester. These projects must demonstrate thoughtful design, robust implementation, effective testing, and responsible use of AI.

By the end of the course, students will not only know how to build modern web applications, but will also understand how to think critically about software quality in an era where writing code is no longer the hardest part. The goal is to produce developers who can design well, reason clearly, test thoroughly, and use AI as a powerful assistant rather than an unquestioned authority.

Learning Resources

Grading

AreaResourceTypeLinkNotes
FoundationsModern Software EngineeringDavid FarleyBook, summary(Bookstore)Primary conceptual text
Continuous Delivery — David FarleyVideoshttps://www.youtube.com/@ContinuousDeliveryEngineering mindset
BackendNode.js DocumentationDocshttps://nodejs.org/en/docsOfficial reference
Express DocumentationDocshttps://expressjs.com/Routing & middleware
MDN Express TutorialTutorialhttps://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_NodejsBest beginner guide
Node & Express Crash Course (Traversy Media)Videohttps://www.youtube.com/watch?v=Oe421EPjeBEEnd-to-end overview
FrontendReact DocumentationDocshttps://react.devModern React
React Official TutorialTutorialhttps://react.dev/learnRequired early
React in 100 Seconds (Fireship)Videohttps://www.youtube.com/watch?v=Tn6-PIqc4UMMental model
Net Ninja React PlaylistVideohttps://www.youtube.com/playlist?list=PL4cUxeGkcC9jsx6G9Y0t5k0U0n8x-0rFClear pacing
DatabaseMariaDB DocumentationDocshttps://mariadb.com/docs/Production DB
MySQL DocumentationDocshttps://dev.mysql.com/doc/SQL reference
SQLBoltInteractivehttps://sqlbolt.com/Strongly recommended
Database Normalization GuideReadinghttps://www.guru99.com/database-normalization.htmlSchema basics
UI / CSSBootstrap DocumentationDocshttps://getbootstrap.com/docs/5.3/Layout & components
Bootstrap 5 Crash CourseVideohttps://www.youtube.com/watch?v=4sosXZsdy-sFast onboarding
Version ControlGit DocumentationDocshttps://git-scm.com/docCore concepts
GitHub DocumentationDocshttps://docs.github.com/Workflow reference
GitHub Hello WorldTutorialhttps://docs.github.com/en/get-started/quickstart/hello-worldFirst GitHub task
Oh My Git!Interactivehttps://ohmygit.org/Learn Git by doing
TestingJest DocumentationDocshttps://jestjs.io/docs/getting-startedUnit testing
Jest Crash CourseVideohttps://www.youtube.com/watch?v=7r4xVDI2vhoPractical intro
SupertestDocshttps://www.npmjs.com/package/supertestAPI testing
CI / CDGitHub Actions DocumentationDocshttps://docs.github.com/en/actionsCI pipelines
GitHub Actions in 15 MinutesVideohttps://www.youtube.com/watch?v=R8_veQiYBjIMinimal intro
AI as a Junior DeveloperDavid Farley — AI & Software EngineeringVideohttps://www.youtube.com/@ContinuousDeliveryEngineering-first AI
Kent Beck — Tidy First?Readinghttps://tidyfirst.substack.comDesign before automation
OpenAI Prompt Engineering GuideGuidehttps://platform.openai.com/docs/guides/prompt-engineeringBetter prompts
Simon Willison — AI BlogBloghttps://simonwillison.netPractical AI caution

Due Date: All assignments are due as specified in the grading table below.

Missing Lab Assignments: Labs are an important part of this class; the effort spent on them is a crucial part of the learning process. Failure to submit labs is unacceptable: students earning 0s on two labs cannot receive a grade higher than a B- for the course; students earning three 0s on labs will receive an automatic F for the course.

Collaboration and Academic Honesty: In order to facilitate learning, students are encouraged to discuss assignments amongst themselves. Copying a solution is not, however, the same as “discussing.” A good rule of thumb is the “cup of coffee” rule. After discussing a problem, you should not take away any written record or notes of the discussion. Go have a cup of coffee or cocoa, and read the front page of the newspaper. If you can still re-create the problem solution afterward from memory, then you have learned something, and are not simply copying. (The “group work” are exempt from this, as they are intended to be done together.)

Category%Notes
Homework20%Due by Midnight. 10% penalty for up top 24 hours late, then 50% off.
Quizzes15%Must be taken in class. Cannot be taken later without a note from either the provost office or the dean of students (Professor Hawks).
Individual Projects45%Due by midnight on day due. 5% penalty for for up to 12 hours late. One assignment may be up to 24 hours late with no penalty with instructor notification. Projects have intermediate milestones and final complete project. Each milestones are typically worth 10-20 points, while the final grade is 100 points.
Team Project20%Similar grading as above. All members are typically given the same grade unless there is evidence of certain team mambers.
TOTAL100%

Late Policy

Late submissions are only accepted with prior permission via a [Request Form].

  • One Week Extension: Request at least 1 week in advance.
  • Three-Day Extension: Request at least 3 days in advance.
  • 24-Hour Extension: Request up until the due date.

Do not modify submissions after the due date without permission.

Schedule

DateTopicReading / Resource(s)Assignments Due
Jan 12Course overview; software engineering in the age of AI
Slides
14 Steps checklist
Modern Software Engineering Preface (Farley); AI as a Junior Developer: Farley continuous delivery channel https://www.youtube.com/@ContinuousDelivery
Programming Setup
Jan 14Linux server walkthrough; SSH, logsUbuntu/Linux tutorials: https://linuxize.com; VS Code SSH guide https://code.visualstudio.com/docs/remote/ssh
Jan 16What is software engineering? Learning vs guessingFarley Ch. 1HW1
Jan 19Feedback loops; engineering vs programmingFarley Ch. 1Lab 1
Jan 21Git fundamentals; commits as design historyGit docs https://git-scm.com/doc; GitHub hello world https://docs.github.com/en/get-started/quickstart/hello-world
Jan 23Node.js runtime; first Express serverNode.js docs https://nodejs.org/en/docs; Express docs https://expressjs.com/
Jan 26Managing complexity; separation of concernsFarley Ch. 3Lab 2
Jan 28REST APIs; request/response contractsMDN Express tutorial https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs
Jan 30MariaDB basics; schema designMariaDB docs https://mariadb.com/docs; SQLBolt https://sqlbolt.com/
Feb 2React fundamentals; components & stateReact documentation https://react.dev; React Official Tutorial https://react.dev/learn
Feb 4Frontend–backend integrationReact + Express Tutorial (React docs) https://react.dev/learnLab 3
Feb 6End-to-end CRUD; common failure modesReact + Node + MariaDB example: https://react.dev/learnA2 assigned
Feb 9Code readability; naming & structureFarley Ch. 5
Feb 11Error handling; logging vs debuggingNode & Express error-handling guide https://expressjs.com/en/guide/error-handling.html
Feb 13Code reviews; refactoring basicsRefactoring intro (Martin Fowler blog) https://martinfowler.com/books/refactoring.html
Feb 16Evolvable design; refactoring safelyFarley Ch. 6
Feb 18Peer code review workshopGitHub Code Review docs https://docs.github.com/en/pull-requests
Feb 20Refactor demo; design discussionReact + Node refactor patterns (Fireship) https://www.youtube.com/watch?v=Z1Yd7upQsXYA2 due; A3 assigned
Feb 23Testing as feedbackFarley Ch. 7
Feb 25Unit testing with JestJest docs https://jestjs.io/docs/getting-started
Feb 27Integration testing; regressionSupertest (API testing) https://www.npmjs.com/package/supertestA4 assigned
Mar 2–17Spring Break — No Classes
Mar 18Continuous Integration; automationFarley Ch. 8
Mar 20GitHub Actions walkthroughGitHub Actions docs https://docs.github.com/en/actions; Actions in 15 minutes https://www.youtube.com/watch?v=R8_veQiYBjI
Mar 23Continuous Delivery; deploymentFarley Ch. 9
Mar 25CI pipelines; failing buildsCI case studies (GitHub docs) https://docs.github.com/en/actions
Mar 27Deployment to Ubuntu; observabilityUbuntu server deployment guide https://linuxize.com/post/how-to-deploy-nodejs-app/A4 due; A5 assigned
Mar 30Architecture as constraintFarley Ch. 10
Apr 1Design before code; diagramsUML basics https://creately.com/diagram-community/popular/t/uml-diagram
Apr 3AI as junior developer; responsibilityAI as a Junior Developer videos: Farley continuous delivery channel https://www.youtube.com/@ContinuousDelivery; Kent Beck Tidy First? https://tidyfirst.substack.com/A6 assigned
Apr 6Writing good AI promptsOpenAI Prompt Engineering Guide https://platform.openai.com/docs/guides/prompt-engineering
Apr 8Evaluating AI-generated codeSimon Willison AI blog https://simonwillison.net/
Apr 10Refactoring AI outputPrompting + Refactoring checklist (course handout)A5 due
Apr 13AI as dependency; cost & latencyFarley Ch. 12
Apr 15Failure modes; fallback strategiesReliability basics (article) https://martinfowler.com/articles/feature-toggles.html
Apr 17Security & AI; prompt injectionSecure coding with AI (guide) https://owasp.org/www-community/AI_SecurityA6 due; A7 assigned
Apr 20Observability for AI systemsObservability 101 (blog) https://www.robustperception.io/what-is-observability
Apr 22Ethics; when not to use AIResponsible AI (policy doc) https://www.ibm.com/cloud/learn/ethical-ai
Apr 24Capstone proposals; scope reviewCapstone proposal guide (course handout)
Apr 27Continuous improvementFarley Ch. 14
Apr 29Project workday; instructor reviews
May 1Post-mortems; design defense prepProject post-mortem template (course handout)A7 due
May 2Final class: synthesis & wrap-up
May 9Final project demos / defenseFinal project due

Final Project Grading Rubric (100 points)

CategoryExcellentAdequateNeeds WorkPoints
Design & ProblemClear problem, solid design, good structureBasic idea, partial designUnclear or weak design20
ImplementationClean, modular, readable codeWorks but messyFragile or confusing25
TestingMeaningful tests; regressions preventedMinimal testsLittle or no testing20
AI Use & JudgmentAI used thoughtfully; output improvedAI used with limited reviewUncritical AI use15
CI / DeploymentAutomated tests & reliable deployPartial automationManual or broken10
CommunicationClear demo & explanationBasic explanationPoor or missing10

Total: 100 points

View Page

RequirementCommentsPointsScore
Meets Functional Expectations40
Presentation Organization30
Preparation – Team is prepared with examples30
Total100

Tools

Schedule

Non Discrimination Statement

Kenyon College does not discriminate in its educational programs and activities on the basis of race, color, national origin, ancestry, sex, gender, gender identity, gender expression, sexual orientation, disability, age, religion, medical condition, veteran status, marital status, genetic information, or any other characteristic protected by institutional policy or state, local, or federal law. The requirement of non-discrimination in educational programs and activities extends to employment and admission.

All employees, including faculty, are considered Responsible Employees and must notify the College’s Civil Rights & Title IX Coordinator with any relevant information.

For further information, please refer to the following Kenyon College policies:

Sexual Misconduct & Harassment: Title IX, VAWA, Title VII:
Pythonps://www.kenyon.edu/directories/offices-services/ocr/title-ix-vawa/kenyon-policies/title-ix-policy/

Discrimination & Discriminatory Harassment Policy (non sex or gender):
Pythonps://www.kenyon.edu/directories/offices-services/ocr/discrimination/

ADA & Section 504:
Pythonps://www.kenyon.edu/directories/offices-services/ocr/discrimination/504-ada-grievance/student-grievance-procedure-resolving-complaints-under-ada-section-504/

Disabilities

If you have any disability and therefore may have need for some type of accommodation in order to participate fully in this class, please feel free to discuss your concerns in private with Erin Salva, director of Student Accessibility and Support Services (SASS). (phone: (740) 427-5453).

Statement on Title IX

Kenyon College does not discriminate in its educational programs and activities on the basis of race, color, national origin, ancestry, sex, gender, gender identity, gender expression, sexual orientation, disability, age, religion, medical condition, veteran status, marital status, genetic information, or any other characteristic protected by institutional policy or state, local, or federal law. The requirement of non-discrimination in educational programs and activities extends to employment and admission.

All employees, including faculty, are considered Responsible Employees and must notify the College’s Civil Rights & Title IX Coordinator with any relevant information.

For further information, please refer to the following Kenyon College policies:

Sexual Misconduct & Harassment: Title IX, VAWA, Title VII:

https://www.kenyon.edu/directories/offices-services/ocr/title-ix-vawa/kenyon-policies/title-ix-policy

Discrimination & Discriminatory Harassment Policy (non sex or gender):

https://www.kenyon.edu/directories/offices-services/ocr/discrimination

ADA & Section 504:

https://www.kenyon.edu/directories/offices-services/ocr/discrimination/504-ada-grievance/student-grievance-procedure-resolving-complaints-under-ada-section-504

Scroll to Top