TECH 5300: Fundamentals of Modern Software

James Grimmelmann

Cornell Tech

Fall 2019


This is a crash course in how software works and what it can do. It covers the basics of programming, databases, and web applications. There is a strong emphasis on learning by doing and the course includes weekly programming assignments in Python.


There are no prerequisites or corequisites.

The course is intended for students with no prior training in programming. It covers the essentials of program implementation and debugging. Students who have significant programming experience may not take this course. Talk to me ASAP if you are uncertain whether this applies to you.

Course Outcomes

Students who complete the course will:

  1. Be able to write simple programs in Python to automate routine tasks.
  2. Understand fundamental software concepts including control flow, simple and compound data types, databases, and web servers.
  3. Have enough familiarity with the modern software stack to quickly contextualize new technical information.
  4. Be able to talk to technologists intelligently and understand the kinds of constraints that shape technical decisions.

Course Staff

Instructor: James Grimmelmann,



The primary readings will be from a draft of the textbook Python for Non-Technical Professionals (PfNTP) by Jonathan Frankle and Paul Ohm. Details will be forthcoming. We will provide you with a PDF of the draft. It is not public, and should not be shared with anyone outside of this course. If you have corrections or suggestions for the authors, please send them to me and I will pass them along. Specific passages are noted on the course schedule below, along with a few selections from other sources.


The following is a collection of online documentation, textbooks, and tools that may be useful in understanding the material or in going beyond it.



Python package/API documentation:

Web APIs:

Command Line (macOS/Linux):

Command Line (Windows):

How Computers Work:

Unicode and UTF-8




Regular expressions


Class Meetings

We usually meet Mondays and Wednesdays 2:00 to 3:15, usually in Bloomberg 161 and 165, and Thursdays 12:30 to 1:45, usually in Bloomberg 061 and 071. I intend for the Wednesday and Thursday classes to be lectures that introduce new material, and the Monday classes to be “labs” in which we review the material from the previous two lectures and work on coding problems together and individually. The course staff will circulate to help you if you get stuck. There are some occasional exceptions tos this template, which are listed on the detailed schedule below.

We will “hand out” a homework assignment each week that draws on the concepts introduced that week. The assignment will be due by midnight on Wednesday the following week, and the TAs will hold office hours Monday through Wednesday. The idea is that the lab and office hours will help you tackle the assignment if you are having difficulty.

Bring your computer with you to class and especially to labs: we will frequently invite you try things for yourself as we go. The TAs will provide technical support in and out of lab; they can’t do your programming assignments for you, but they can help you make sure that your programming environment is working correctly, help you with the mechanics of submitting your homework, etc.

Attendance in the lectures is required. Especially in view of the other significant demands on your time, I will be understanding about conflicts and flexible in working with you to make alternative arrangements as needed. That said, consistent unexcused absences are not okay, and may lead to a reduced grade or exclusion from the course (after reasonable written warning) Attendance in the labs is recommended but optional.

Class Policies

I want our classroom to be a welcoming space, one where we all learn from the diversity of each others’ experiences and perspectives. The best comments are ones that help your colleagues learn. I expect you to act professionally and respectfully to your classmates (and our occasional guests) at all times. I will not condone harassment.

If anything in or out of class troubles you, please come and talk to me about it. Not all discomfort is avoidable, but I will do everything I can to help that is consistent with the educational goals of the course. I will also respect any requests for confidentiality as far as my legal and professional duties allow.

If for any reason your preferred name is not the one that appears on the course roster, please let me know how you would rather be addressed. (For example, I regularly have students who go by their middle names rather than their first names, or who have changed their names as part of significant personal transitions.) It’s a small thing, but there’s no reason I should get it wrong.

All class sessions are recorded. You will have access to the recordings. So will I, your classmates, and other Cornell Tech faculty and staff as part of their jobs. The recordings will not be shared outside the Cornell Tech community. In special circumstances (e.g. at the request of a guest speaker) I may turn off the recording, and it might sometimes happen that the recording doesn’t work.

Course Tools

All of your work for the course will be done using the cloud-based Codio service. In effect, each of you will have your own dedicated computer, which you can log into and use with any modern web browser. It comes preloaded with Python and all of the other software you will use in the course. It will update with sample code, slides, and assignments as we proceed. It includes an easy-to-use code editor that you can use to write your programs. And you can submit your assignments at the click of a button.

Toward the end of the course, we will talk about how Codio, and other similar cloud services, work under the hood. And we will help you through the process of getting your own computer set up to do coding if you want to continue further down that road. But Codio is a great place to start, because it gets you down to business about as quickly and as smoothly as possible.

You will receive (via email or Blackboard) an invitation link with more specific instructions. Note that Codio is not free: student accounts are $10/month. You are welcome to continue or cancel your account after the course finishes and you have received your course grade. If this cost will be a financial hardship for you, please contact me ASAP so that I can make appropriate arrangements.

Note that the first day of class will be devoted in part to helping get you set up.


There are six graded programming assignments. There is also an ungraded “assignment 0” which is designed to get you comfortable with the course programming environment and with the mechanics of completing and submitting your code.

Your grade for the course will be determined based on the grades for the six homework assignments. We will drop your lowest score and then average the remaining five.

Any assignment may be submitted up to 48 hours late – i.e. before midnight on Friday – with a 20% late penalty. Assignments will not ordinarily be accepted after that.

If you have a medical emergency or other good reason that prevents you from completing an assignment on time, talk to me and we will make appropriate accommodations.

Class Resources

This syllabus is at It will be updated as the course progresses.


We are members of an academic community built on respect, trust, and honesty. I will take you at your word; in return, I expect you to be truthful and candid in your dealings with me and your classmates. Your conduct in this course is subject to the Cornell Code of Academic Integrity and the Campus Code of Conduct.

We are also joined in the endeavor that is Cornell Tech because we believe in improving the world through law and technology. I cannot compel you to do what is best and right in all things. But you should aspire to.

Collaboration policy

Part of the process of learning to code is getting stuck and working to get unstuck. Part of getting unstuck is talking to your classmates, but part of it is rolling up your sleeves and working on the problem alone. For this reason, although we encourage many forms of collaboration, we are implementing a string, bright-line collaboration policy for the class. Any violation of this policy will be considered a violation of the Code of Academic Integrity.

  1. For graded assignments, you may not view the code of anybody else who has taken or is taking the class.
  2. For graded assignments, you may not show your code to anybody except the course staff.
  3. You may discuss concerns or concepts with your classmates, but please keep this at a general level. For example, you are allowed to discuss questions such as, “what does this error message mean?” or “what is a tuple?”
  4. You may discuss answers to class exercises, those from the book, or those found elsewhere that have not been assigned, and in doing so, you may share or view code with others. Do not use this as an end-run around this policy.
  5. You may use online references and Google freely. More than that, you are positively encouraged to look things up early and often. There are, however, two important limits. First, you may not ask questions based on the assignments. Treat the Internet like a classmate: general questions about Python are fine, but posting your code or asking questions about specific tasks required for the homeworks is not. Second, you may not look at solutions to the assignments if you see that someone else has posted them.


All of the following is subject to change as we go along. The notes underneath each class are the reading assignments.

Aug. 25 - 31:

Sept. 1 - 7:

Sept. 8 - 14:

Sept. 15 - 21:

Sept. 22 - 28:

Sept. 29 - Oct. 5:

Oct. 6 - 12:

Oct. 13 - 20:

Oct. 14 - 20: