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!)