Information on getting into CS 4700: Foundations of Artificial Intelligence
There are three sets of questions I get about getting into the course: enrollment-related, prerequisites-related, and pandemic/remote learning-related. I discuss each below:
Enrollment logistics
The course's enrollment process is handled identically to other CS courses. Keep points:
- Enrollment preference is given to students affiliated with
CS or CIS majors. That doesn't mean you won't be able to take the
course, it just means you'll have to read this page further.
- If you can't enroll - for whatever reason - put yourself on
the waitlist. If you can't figure out how to do it, it's there,
but some
instructions might help.
- The waitlist is closed during pre-enrollment. You will
need to wait until the add/drop period to get onto the
waitlist.
- The waitlist does not prioritize based on when you got on it. Ignore
your position on the waitlist.
- If you have applied to affiliate but aren't affiliated yet
you are unaffiliated and can't pre-enroll. However, we
prioritize enrollment for affiliated students so if all you're
doing is waiting for the approval to happen, it will happen,
but it may require you to sit tight on the waitlist while that
gets processed. Over the last few years all such students
have gotten into CS 4700.
- Over the last few years everyone with the necessary
background has gotten into CS 4700, regardless of affiliation.
That's not a guarantee, but I share it to provide you with some
expectations for how getting on the waitlist might play out.
- I am not the expert on CS enrollments. If you have any further questions about the logistics of getting into the course please consult the following resources:
If the above does not address your specific circumstances,
please email
cs-course-enroll@cornell.edu.
- You will not get permission numbers from me to get into the course. It will come from email
cs-course-enroll@cornell.edu.
Expected background
The official prerequisites for the course are CS 2800 plus CS 2110/ENGRD 2110, but I don't really care whether you have taken those courses. I care that you have the portions of these courses that are going to be presumed known to you when you take the course, regardless of where you got the background.
Every semester students without the background take the course despite missing elements of the necessary background. They do poorly. Here are the topics that you should make sure you know before taking the course:
- Trees and graphs and algorithms on them. You should
come into the course capable of, for example, giving a pseudo-code
algorithm for depth-first search or Dijkstra's shortest path algoritm.
- Basic probability. For example, if asked to compute
P(A|B) and you know P(B|A), P(A), and P(B), you should recognize that
this is when you pull out Bayes Rule (and, obviously, then correctly
compute P(A|B)).
- Multi-variate calculus. You should be able to
minimize a function of multiple variables, and especially be able to
compute the derivative of the function with respect to a particular
variable.
- Propositional and first-order logic. Coverage of this topic
in 2800 can be somewhat variable, so this is the one prerequisite we
spend some time reviewing and not just assuming.
- Programming. This is a 4000-level course, and it
will therefore also assume you are comfortable programming. While the
course isn't about learning anything new programming-wise, some
homework assignments will involve programming. If you don't feel
comfortable programming do not take this course. It is a 4000-level
CS course! All programming assignments will require Python. If
you do not know it yet, the course assumes you will be able to pick it
up. (Moreover, if you don't know it, it's something you really should
have picked up by the time you leave Cornell.) Much of the
infrastructure for your programming assignments will be given to you,
so if you don't know Python your knowledge gaps will largely be filled
by looking up the syntax for things you already know. All programming
assignments will be done in Jupyter Notebooks. We will have a primer
on it for those who haven't used it in a course as yet. (Similarly, if
you didn't already know it, it's something good to have picked up by
the time you leave Cornell.)
Synchronous lectures with in-person exams
The course is
large, which means the intimacy of the learning experience is much
less than any of us would like, even when there is no pandemic. It is
very important to me that the compromises made as a result of the
class's size are not exacerbated further by distance learning and the
pandemic. I say this with knowledge gained from having taught the
course twice through the pandemic, both during the abrupt change to
online learning Spring 2020 and during the Fall 2020 semester. After
a great deal of personal struggle with the decision I have made two
decisions that will limit the availability of the course to remote
students:
- Synchronous lectures. Although because of its size lectures will be given online,
the course will be a synchronous learning experience. You will be
required to attend lectures "in person" and (unless technology
issues intrude) with video.
- In-person exams. Because of the nature of the
material, it is difficult to do assessment via take-home exams
or projects in the way that some courses have been able to do.
I have also done two semesters of online testing and found
serious limitations to them. As a result assessment will take
the form of traditional in-person exams.
The way to think of it is that I'm treating the course as an
in-person in-Ithaca class. It just happens to be face-to-face online.