This syllabus comes from https://lincolnmullen.com/courses/programming.2019/.

Only the online version of this syllabus is authoritative, and it may be updated as necessary.

Web Programming for Historians (Fall 2019)

Course: HIST 698-001. Fall 2019. Department of History and Art History, George Mason University. 3 credits. Meets Tuesdays, 1:00–3:00 pm in Research Hall 402.

Instructor: Lincoln Mullen <lmullen@gmu.edu>. Office: Research Hall 457. Office hours: by appointment. Book an appointment.

Course description

In this course you will work collaboratively to create a web application from scratch that does something historically meaningful. We will decide what the scope and purpose of the web application should be, including its historical content. By working on a web application, you will learn three fundamental technologies: how to create a data model and administer a relational database; how to create an application layer using a web application framework; and how to create a user interface for the web. We will use PostgreSQL as the database, the Django web framework for the Python programming language for the application, and HTML, CSS, JavaScript and other web standards for the user interface. You will thus become familiar with those languages and frameworks, as well as with the tools and techniques of collaborative software development. But more important, you will learn to conceptualize, manage, and design a project that makes a meaningful contribution to the field of digital history.

Learning goals

  • You will have a basic proficiency in Python and the Django web application framework, as well as related web technologies.
  • You will understand the structures and common patterns of web applications.
  • You will understand how to adapt web technologies to historical purposes, as well as how to collaborate on software development in the humanities.

Essential information

This class will be very flexible, and so you will have to be flexible too. The first few weeks will acquaint you with the basics of programming for web applications. You will learn the kinds of things that would apply to any project that you might build. After that, we will be working on building a historical project together. The specific things we will need to know will depend on what we decide to do. This is by design: figuring out what you need to learn is an important skill, maybe the most important skill.

That flexibility has a few implications: (1) Be prepared to treat this syllabus as a collaborative, living document, which we will continually revise throughout the semester. (2) Plan on doing a lot of reading of documentation, as well as searching for tutorials, in order to learn about the technologies that we are using. After the first few weeks we will have to go looking for materials about the things we want to learn. (3) Expect to negotiate the scope of the class project as well as your specific role on it with me and with the other people in the class.

The other kind of flexibility concerns scheduling. We’ve agreed to hold the formal class meeting for two hours each week, and spend the other 40 minutes of class in impromptu sessions targeted at what you need to learn or at solving the problems you are facing. Please make liberal use of the ability to book appointments with me, and be in touch if the scheduled times don’t work for you.

Resources

There are some essential resources that you will need:

Software

Try to install the following software or get accounts at the following places before the first day of class.

  • You will need Python 3.7.x, along with Django 2.2.x. Follow the installation steps in Django for Beginners.
  • You can use whatever text editor you want, but if you don’t have a strong preference, it will be easiest to use Visual Studio Code.
  • DB Browser for SQLite will help you inspect databases.
  • Sign up for a GitHub account if you don’t already have one.
  • You will be given a login account to a development server at RRCHNM at an appropriate point in the semester. We will use this to deploy our class project.

Assignments

For each class there will be readings, tutorials, or the like that you will need to do in order to come to class prepared. Most students have found that they should do these readings before class and again after class. These will count for 20% of your grade.

For the first weeks of the semester, you will complete the tutorials from each of the chapters in Django for Beginners. These tutorials should be submitted as GitHub repositories. These assignments will count for 30% of your grade.

For the remainder of the semester, we will work on some project that we will define. Your contributions to the project may vary in form from other people in the class, but you will have to submit evidence of substantial contribution (such as commits to the repository, documentation written, design documents, and so forth). Your work on this project will count for 50% of your grade.

Schedule

Week 1 (August 27): Introduction

Before class:

  • Read PCC ch. 1–2
  • Read DFB ch. 1
  • Come prepared with a development environment on your laptop, to the best of your ability. Follow the guide in DFB ch. 1 and ignore the similar instructions in PCC ch. 1.

Week 2 (September 3)

Assignment due: Come to class with a working Django “hello world” from ch. 2. No need to submit this via GitHub.

Before class:

  • Read PCC ch. 3–4
  • Read DFB ch. 2–3

Week 3 (September 10)

Assignment due: Submit the code for your pages app (ch. 3) to GitHub. (Ignore the part about deploying to Heroku.)

Before class:

  • Read PCC ch. 5–6
  • Read DFB ch. 4

Week 4 (September 17)

Assignment due: Submit the code for your message board app (ch. 4) to GitHub.

Before class:

  • Read PCC ch. 8
  • Read DFB ch. 5

Week 5 (September 24)

Assignment due: Submit the code for your blog app (ch. 5) to GitHub.

Before class:

  • Read PCC ch. 9
  • Read DFB ch. 6

Week 6 (October 1)

Assignment due: Submit the code for your second blog app (ch. 6) to GitHub.

Before class:

  • Read PCC ch. 10
  • Read DFB ch. 7–8

Week 7 (October 8)

Assignment due: Submit the code for your newspaper app (ch. 8) to GitHub. (Skip the app from ch. 7.)

Before class:

  • Read PCC ch. 11
  • Read DFB ch. 13

Week 8 (October 22)

Assignment due: Come to class with proposals for historical web apps.

During this week we will decide on the project that we are going to work on together for the rest of the semester and sketch out how we are going to do it.

Week 9 (October 29)

TBD

Week 10 (November 5)

TBD

Week 11 (November 12)

TBD

Week 12 (November 19)

TBD

Week 13 (November 26)

TBD

Week 14 (December 3)

TBD

Class project released (December 10)

🚀 Initial release of the class project on or around this date 🚀

Fine print

This syllabus may be updated online as necessary. The online version of this syllabus is the only authoritative version.

Students must satisfactorily complete all assignments (including participation assignments) in order to pass this course. Your attendance is expected at every meeting. If you must be absent, I request that you notify me in advance of the class meeting. I am sometimes willing to grant extensions on assignments for cause, but you must request an extension before the assignment’s due date. For every day or part of a day that an assignment is late without an extension, I may reduce your grade. No work (other than final projects) will be accepted after the last day that the class meets. I will discuss grades only in person during office hours.

See the George Mason University catalog for general policies, as well as the university statement on diversity. You are expected to know and follow George Mason’s policies on academic integrity and the honor code. If you are a student with a disability and you need academic accommodations, please see me and contact the Office of Disability Services at 703-993-2474 or through their website. You are responsible for verifying your enrollment status. All academic accommodations must be arranged through that office. Please note the dates for dropping and adding courses from the GMU academic calendar.