This is a crash course in how software works and what it can do. It is organized around data: how it can be stored, acquired, transformed, analyzed, transmitted, displayed, and secured. There is a strong emphasis on learning by doing: students will have hands-on experience in and outside of class with a wide range of technologies.
Students who complete the course will be able to write simple programs to automate routine tasks. They will have enough familiarity with the modern software stack to quickly contextualize new technical information. Even more importantly, they will be able to talk to technologists intelligently and understand the kinds of constraints that shape technical decisions.
The course is intended for students 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.
Instructor: James Grimmelmann, james.grimmelmann@cornell.edu
Head TA: Eyvind Niklasson, een7@cornell.edu
TAs:
Piazza is the preferred way to reach the course staff.
The primary readings will be from a draft of the textbook Computer Programming for Lawyers (CPFL) by Jonathan Frankle and Paul Ohm. 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.
In addition, we will frequently point you to online resources, including documentation for various languages and APIs, question-and-answer sites, and useful tools.
Python:
Python package/API documentation:
Web APIs:
Command Line (macOS/Linux):
Command Line (Windows):
How Computers Work:
Unicode and UTF-8
HTML
CSS
Regular expressions:
We meet Mondays and Wednesdays 12:20 to 1:35 in the Bridge case classroom (L23). You will also be assigned to a weekly lab session, co-led by two TAs. The labs meet Thursdays 2:00 to 3:00.
Each week of the course will follow a standard rhythm. Lectures on Monday and Wednesday (together with the assigned readings for those lectures) will present new material. The lab on Thursday will then review the material from lecture and give you a chance to reflect and ask questions at more leisure. We will “hand out” a homework assignment during lab that draws on the concepts from that week. The assignment will be due by noon on Thursday the following week. This means that for most of the course you will be working on an assignment that covers one set of material while you are reading and learning about different new material.
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 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).
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 (especially during the new building’s shakedown cruise) that the recording doesn’t work.
You must have a computer on which you can install up-to-date software. That means a Mac running a recent version of OS X, a PC running Windows 10, or an up-to-date distribution of Linux.
Follow these tutorials in order to set up your programming environment:
The first lab session – and if necessary, the second – will be primarily devoted to helping you get set up.
Your grade for the course will be determined based on the grades for homework assignments 2 through 6. (Assignment 1, which would have been required but ungraded, has been dropped.) We will drop your lowest score and then average the remaining four.
Any assignment may be submitted up to 36 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.
Here are the instructions for downloading and submitting assignments.
This syllabus is at http://james.grimmelmann.net/courses/fms2017F. It will be updated as the course progresses.
We have created a Piazza site for this course; all students enrolled will be invited. We will post announcements there, and use it to distribute handouts and homework assignments. You can also post questions for the course staff there and discuss course-related topics with your classmates.
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.
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.
All of the following is subject to change as we go along. This is the first time this course has been taught; we are all learning by doing. The notes underneath each class are the reading assignments.
Aug. 20 - 26:
Aug. 27 - Sept. 2:
Sept. 3 - 9:
Sept. 10 - 16:
Sept. 17 - 23:
Sept. 24 - 30:
Oct. 1 - 7:
Oct. 8 - 14:
Oct. 15 - 21: