Here are my answers to the questions people asked on the registration survey. If you missed your chance to ask a question, or think of something else you want to know later in the semester, feel free to ask new random questions anytime you want by submitting comments on this post.
How difficult is it?
I expect and hope that it will be challenging but not overwhelming. It is hard to measure difficulty for this course since there tends to be a pretty big difference in student’s background and how quickly they pick up certain things, but I do think everyone in the class should be able to do well in the class so long as they they put in a reasonable effort.
Is it going to be as fun as cs 1120?
In some ways it should be more fun since you have a lot more knowledge and experience now and can do more exciting projects. On the other hand, I don’t think there is anything in cs2220 as “mind-expanding” as the big ideas in cs1120, so if that is what made cs1120 fun for you then you might be disappointed. But, if you like designing and building systems, and learning new ways to do it better, hopefully you will enjoy cs2220.
why did you get into computer science?
I started playing with computers back in grade school when my school got an Apple II and I wanted to figure out how to win the games, and then to make them better. I had a lot of fun programming computers then, but didn’t know what computer science was. I got interested in computer science after reading Doug Hofstadter’s Godel, Escher, Bach book, and then taking the MIT 6.001 course (on which early versions of cs1120 were loosely based).
I am considering double majoring with CS but am still hesitant. Also, I am interested in undergrad research
Hopefully this course will give you a good sense if you want to major in CS. I’m happy to meet with you anytime during the semester to discuss this, and undergrad research opportunities. I have many undergraduate students in my research group (including 1st and 2nd years, so it is not always necessary to have a lot of experience first).
I’m going to be coming to office hours a lot.
You are welcome to — that’s what they are for!
Why do you think anyone should major in Computer Science?
Someone should major in Computer Science if she or he:
(1) likes solving problems and creating stuff
(2) wants to do something that is both creative and analytical
(3) is too impatient to wait to make physical things
(4) enjoys both working alone and working in teams
(5) wants to be able to make a comfortable living doing interesting workIf when you are faced with a problem that would require an hour of tedious work, you would rather spend a couple hours figuring out a clever way to automate the solution, that’s a good sign you should be a computer scientist.
Where did you do your schooling? And what made you decide to teach?
I grew up in suburban Detroit and went to high school there. I went to MIT for college, and stayed there through finishing my PhD.
When I was in high school I did some tutoring things and taught piano lessons to kids, but didn’t really think I wanted to teach until I was an undergraduate TA and then graduate TA for the software engineering course at MIT (this was for Babara Liskov and John Guttag, the authors of our textbook for this class) and enjoyed teaching a section and seeing how much fun it is when you help someone learn something new and challenging. When I was looking for jobs after finishing my PhD, I considered a few industry jobs, but knew I wanted to go to academia and loved what I saw at UVa.
Does the final project have to be in java?
Not necessarily, but if you want to use some other language for the final project you do need to (1) demonstrate proficiency in Java (since this is expected in later courses) and (2) provide a convincing argument why the other tools you want to use are better suited to your project.
Nothing I don’t expect to learn during the course. Although I may revise that and thus ask you later.
Can’t say I do at the moment.
Okay, you can ask random questions any time you want!
What kind of other CS jobs have you had?
I’ve spent most of my life in academia, which is an awful lot more pleasant than the real world! I have spent some time in industry, though, most recently a semester at Microsoft while I was on sabbatical in 2009. I also spend a few summers working for IBM (Almaden Research Center, near San Jose) in John Backus’ group. I took a year on leave when I was in grad school to start an Internet software company with a friend, and have advised a few start-up companies, mostly in the software security area.
What will our tests be like? Will we be writing code?
The two exams will involve questions about software design, understanding and analyzing code, and designing and writing your own programs. You can get a good sense what these will be like by looking at exams from the last time I taught this course (this is an exception to the don’t look at previous assignments honor requirement — you are able and encouraged to try out past exams as well as look at the provided solutions).
You can find exams from the 2006 course here: http://www.cs.virginia.edu/~evans/cs205/exams/.
The final interview will be different from the exams, and will be an oral exam. I’ll provide more details about how this will work later, but my plan is to give you a description of a fairly small software design problem several days before the exam, and then in the exam I will ask you questions about how you would solve the problem to give you a chance to demonstrate that you have a good grasp of the main concepts and skills from the class.
Can this help me on my path to becoming a graphic designer? So I can implement CS aspects to create websites. programs, and graphics… use CS and art hand-in-hand
There are two main parts of building web applications — the visual design and user interface (“front end”), and the functional behavior (“back end”). This class is more focused on things relevant to the back end, although web applications are becoming more and more intertwined between the two sides. We may have some assignments that include user interfaces also. Designing a good user interface is a very challenging problem, both artistically and technically, but not something we’ll have time to cover much in this class. The best site designers need to understand both the UI and back end issues, and although this class isn’t focused on the front end design aspects, I hope some things you learn in this class will be helpful for this.
I’d like to know what higher profile programs you’ve designed or worked on and where your area of expertise lies in the computer science realm.
My research focus is mostly in computer security and applications of cryptography. Things my group is working on currently include finding ways to make programs more resilient to attacks by using diversity (making each execution different so it is hard for an attacker to figure out how to attack the program), developing ways to do computations while preserving privacy of data (for example, finding out if a fingerprint has a close match in a database, without exposing the fingerprint to the database or releasing the database), and developing tools that make it easier for people to produce secure applications.
Probably the most widely used program I’ve written is Splint (http://www.splint.org/), which is included in most Linux distributions and still in use at many companies (although I stopped developing it several years ago). It is a tool for detecting likely bugs in programs by analyzing the source code, along with some extra information provided
by annotations (mini-specifications).