Discrete Mathematics
This is a preserved file from cs2102 Fall 2016. An updated version may exist at https://uvacs2102.github.io/

Survey Questions


Here are my (in progress) responses to selected questions submitted in the registration surveys. I’ll add more responses here as I go through the rest of your questions. If you have other questions after reading this, feel free to ask them on slack (if you want it to be anonymous, send it as a direct message and I’ll answer it here).

I really hope that you (I’m assuming I’m talking to the Prof. Evans) regularly take a step back from the math we are doing and make an effort to explain how the things we are doing relate back to computing. In my opinion, this is what will really make the class interesting.
Yes, I’ll definitely try and do this as much as I can. Some of the things we cover in this class have direct and immediate relevance to computing, and I’ll aim to point out in classes. For deeper understanding of the connections, especially when they are a bit less direct as is the case for many topics, I think it is probably necessary to do longer assignments that connect the abstract math concepts to computing. I’m thinking about doing this some later in the course, but also want to keep the assignments a reasonable length.

How does the in class participation work? As in: how do you keep track of who participates?
I’m looking for “class contribution”, not just “participation”. Class contribution means you have done things to make the class better for your classmates (as well as for me!). This could be by answering or asking questions in class, as well as on slack. It could also be by bringing up interesting ideas or sharing relevant materials or news items. I’m not keeping track of “points” for whenever someone does something, and wouldn’t want people to be contributing with “getting a point” as the main motivation. You should be contributing because you want to get more out of the class yourself, and because you want to do things to make the class experience better for everyone. Even for a largish class like this, over the course of the semester it is usually clear which students have made the biggest contributions to the class, and it will impact their grades favorably. If you don’t stand out as a class contributor, it won’t count against you (the common weighting for class contribution in the final grade is 0%), but people who contribute enough to stand out will be rewarded.

Are there any good external resources/references that would aid me in this course?
Yes, there are lots of resources that could be useful.

The most useful will be the MIT OpenCourseWare sites for the “6.042: Mathematics for Computer Science” course:

You’ll find lots of examples and problems on these sites.

Another great (free) resource, but less directly matching what we do in this course, is Richard Hammack’s Book of Proof.

When AI does everything for us and there are few jobs will you become a Communist?
This is a really good question, and something I’ve occasionally talked about (see Invent the Future! from my OS class). I don’t think communism is the answer, but hope we’ll get to some kind of socialist utopia where everyone can have a high quality of life (well above just subsistance) based on the abundant value that can be created with automation, but there are opportunities for highly creative or hard-working individuals to obtain excessive wealth (and some privileges that go with this) by creating things that have great benefit to millions or billions of people.

How did you get so interested in discrete math? It seems like a difficult subject to get in to.
Most of my interest in the area stems from interest in cryptography and its applications. Cryptography is interesting and fun because its about making and breaking puzzles; its important because it enables private and secure transactions on open networks, and it changes power relationships between individuals, organizations, and governments. Nearly everything in cryptography today builds on concepts from discrete mathematics.

I’m teaching this course mostly because I like teaching foundational courses and especially courses early in the curriculum, both for a first chance to expose students to exciting new ideas and empowering students more dramatically than can be done in later courses. The other reasons I wanted to teach cs2102 are becuase I’ve already taught most of the courses in our curriculum (cs200/cs150/cs1120; cs101 (Udacity); cs2220; cs2150; cs3102; and cs4414) and like to teach new things since I learn more by doing that, and this course seemed more likely to be a good source of ideas for Cville Math Circle than the other core courses I haven’t taught yet.

Enjoyed your discussion of using “hard math problems” in todays encryption of for example the Bitcoin. Would love future discussions on the subject as it very much interests me.
Thanks! I will try, but worry sometimes students find trangressions like this confusing (or get worried about whether or not it is something they need to know for an exam (which hopefully it will be clear when it isn’t). If you’re interested in learning more about bitcoin, check out my CryptoCurrency Cabal course from last year.

As I said above, I’m very interested in cyber-security. Please do continue to frame lessons in applicable contexts. After all, I’d love to inspired toward another summer project.
I’d like to know more about data security.
Great! I will keep trying to do this, but also need to limit how much time I spend on things too far outside the main course topics. If you’re interested in the work my research group does in security and applied cryptography, see https://www.jeffersonswheel.org. I am happy to have excellent students join my research group, and anyone who does well in this class will be well-positioned for a summer position.

What inspired you to join the field of Computer Science in the first place, and how important do you feel this course is to the overall field?
I had the good fortune to encounter computers when I was in second grade. My school had a teletype machine with an acoustic coupler modem (you would dial a phone to connect to the district’s headquaters computer and stick the phon into the coupler). There was no display, but it would print out interactions line-by-line. The good news was everything was just a BASIC program. We started by playing the games, but you could type LIST and see all the source code and read it to learn how to “cheat” to win the game, and to start changing the code. The next year, the school got Apple II’s, which were fantastic machines with color graphics (that could display on a TV or monitor) and even a disk drive that you could use to store programs! It was so much fun to be able to play around with BASIC programs to draw on the screen, and eventually figure out how to handle key-presses to make games.

When I was in middle school, I sold my first program, which was a program to keep track of team information for the wrestling coach. Unfortunately, I didn’t test it with more than 10 teammates, so when he tried entering the team in it the program crashed when he got to the 11th person.

I knew programming computers was a lot of fun, but didn’t know anything about computer science (or that I wanted to do it for a career), until taking Gerry Sussman’s 6.001 Structure and Interpretation of Computer Programs course (at MIT in 1989). That opened me to the power and beauty of computer science, beyond just writing programs, and I’ve only had a few digressions since.

As to why cs2102 (and the other theoretical and foundational courses you take) is important, courses like these are the ones that should empower you to envision and execute creative computing beyond standard practice. There are tons of 3-month boot camps that can train most smart people to become adequate web and mobile developers or data scientist programmers, and people who complete these programs are able to find good six-figure jobs. The best of them will stay active in learning new APIs and tools, and develop the experience needed to build increasingly complex projects. If you want to do that you don’t need to do a four-year degree at an expensive University like UVa — there are much easier, faster, and cheaper career paths to being a professional programmer.

On the other hand, people without fundamental understanding of the underlying mathematics and theory of computing (which you should get from cs2102, cs3102, and cs4102), and deep understanding of how computing systems work (which you should get from cs2150, cs3330, and cs4414), are unlikely to do things that really advance the state of computing. Most programmers do things that are unsurprising and mundane; you should aspire to do things that are surprising and indistinguishable from magic.

Although I hope cs2102 will be valuable and exciting on its own, its real importance in the curriculum and your overall computing development, is to prepare you well for cs3102 and cs4102. As a whole, though, the foundational understanding you should get from those courses should enable you to design, build, and analyze computing systems that do things people previously thought were not possible (or didn’t even think about at all!)