COMP 318 Software Development 2026

Quality Software Development in the Age of AI

James Skon, Chalmers 428, 740-427-5369

Computing Program

Room: Sam Mather 202

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 FarleyVideos https://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
Continuous Delivery
14 Steps checklist
Modern Software Engineering Preface (Farley); AI as a Junior Developer:
Programming Setup
Windoes WSL
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 programming
Slides
Farley Ch. 1
Jan 21Git fundamentals; commits as design history
Git docs https://git-scm.com/doc; GitHub hello world https://docs.github.com/en/get-started/quickstart/hello-world
Jan 23Node.js, express, and JavaScriptNode.js docs https://nodejs.org/en/docs; Express docs https://expressjs.com/
Jan 26Managing complexity; separation of concernsFarley Ch. 3
Jan 28REST APIs; request/response contracts
OpenAI example
MDN Express tutorial https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_NodejsLab 1
Jan 30MariaDB basics; schema design
MariaDB docs https://mariadb.com/docs; SQLBolt https://sqlbolt.com/
Feb 2Message App
App overview
React documentation https://react.dev; React Official Tutorial https://react.dev/learn
Feb 4React fundamentals; components & state
React Demo
Frontend–backend integration
React documentation https://react.dev; React Official Tutorial https://react.dev/learn
React + Express Tutorial (React docs) https://react.dev/learn
Feb 6React fundamentals; components & state
End-to-end CRUD; common failure modes
React + Node example
https://react.dev/learn
Lab 2
Feb 9React fundamentals; components & state
React + Node + Mariedb Demo
Node + Mariedb Demo
Feb 11Sample App Review
Feb 13End-to-end CRUD; common failure modes
Feb 16Code readability; naming & structure
Node & Express error-handling guide https://expressjs.com/en/guide/error-handling.html
Error Handling Demo

Lab 3
Feb 18ERROR LAB
Error handling; logging vs debugging
https://github.com/Kenyon-CS/error-debug-lab
Code reviews; refactoring basics
Evolvable design; refactoring safely
Refactoring intro (Martin Fowler blog) https://martinfowler.com/books/refactoring.html
Farley Ch. 6 https://docs.github.com/en/pull-requests
Feb 20Refactor demo; design discussionReact + Node refactor patterns (Fireship) https://www.youtube.com/watch?v=Z1Yd7upQsXY
Feb 23Testing as feedbackFarley Ch. 7
Feb 25Bootstrap
Unit testing with Jest
Jest docs https://jestjs.io/docs/getting-started
Feb 27MidtermStudy Guide
Mar 2–17Spring Break — No Classes
Mar 16AI Guided DevelopmentIdeas for progects
Mar 18Project Planning with AI
Mar 20Project Proposals – 5 minutes eachSupertest (API testing) https://www.npmjs.com/package/supertest
Farley Ch. 8
GitHub Actions docs https://docs.github.com/en/actions; Actions in 15 minutes https://www.youtube.com/watch?v=R8_veQiYBjI
Proposal Slides
Plan Draft
Mar 23Data Models with AIData Model ExamplePlan
Mar 25API DesignExample API
Mar 27Group – Present API ideas to each other, and discuss.Data Model Draft
Mar 30
Farley Ch. 10Data Model Final
Apr 1Scaffold the appUML basics https://creately.com/diagram-community/popular/t/uml-diagramAPI Design
Apr 3Scaffolding ContinuedAI as a Junior Developer videos: Farley continuous delivery channel https://www.youtube.com/@ContinuousDelivery; Kent Beck Tidy First? https://tidyfirst.substack.com/
Apr 6Google LoginOpenAI Prompt Engineering Guide https://platform.openai.com/docs/guides/prompt-engineering
Apr 8Testing SetupSimon Willison AI blog https://simonwillison.net/
April 9Visit to Divelbiss (form)
Apr 10No class
Apr 13CORE application flowsFarley Ch. 12Working Auth with Sessions
Apr 15Reliability basics (article) https://martinfowler.com/articles/feature-toggles.html
Apr 17Adding CRUD with AISecure coding with AI (guide) https://owasp.org/www-community/AI_Security
Apr 20Intro to CIObservability 101 (blog) https://www.robustperception.io/what-is-observabilityOne full CRUD interface, ready to demo
Apr 22Responsible AI (policy doc) https://www.ibm.com/cloud/learn/ethical-ai
Apr 24Intro to CDCD Sanity ChecklistCI Tests
Apr 27Iteration, Learning, and Agile Thinking
Iteration as a Defensive Design Strategy
Farley Ch. 14
Apr 29Feedback MattersCD Assignment
May 1Expermentation
Final project due
May 5 – 1:30-4:30Final project presentation/demosFinal Presentation Slides

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