Featured Post

Moving my blog! New url is https://patitsas.github.io/

Hi everybody, I'm migrating my blog to https://patitsas.github.io/blog/ to take advantage of the simplicity of blogging with hexo. RS...

Showing posts with label cybersecurity. Show all posts
Showing posts with label cybersecurity. Show all posts

Saturday, February 25, 2017

Computer Science for Future Leaders

There's a great physics course out there called Physics for Future Presidents. For some time I've been mulling over what a Computer Science for Future Presidents (and Prime Ministers) would look like.

Last week I taught an introduction to online safety to a group of political activists (experience report here). Along the way I taught a lot of introductory computer science and saw opportunities to cover even more.

I've taught a number of introductory CS classes that are introductions to programming. Like a lot of computer scientists I appreciate coding as an important tool in CS, but don't like how so many students walk out of their first (and potentially only) CS class with the idea that CS == programming. Computational thinking classes make for a good step away from this misconception but still don't cover all the things I'd want future world leaders to know.

The internet and cybersecurity makes a great way to introduce computing --- and to cover what future world leaders need to know about computer science.

This is what I'd cover in a 12 week course. This course would complement an introduction to programming and the two could be taken concurrently.


Computer Science for Future Leaders

  1. Introduction to the course. Searching and sorting, and big O notation. I'd introduce binary and linear search, and insertion, selection, and merge sorts. Motivate searching/sorting as necessary for internet computing (indeed, 25% of the world's CPU time is estimated to be spent on sorting tasks.) Quick review of logarithms.
  2. Symmetric key encryption. How to encrypt, some approaches for breaking encryption (build on searching/sorting from last week). Big-O of encryption/decryption algorithms.
  3. Graph theory. Define edges/vertices. How to find a shortest path over a network, minimum spanning trees. Talk about costs on networks, congestion, resilience/redundancy. Talk about where you'd want to eavesdrop on a network for maximum coverage. Big-O of relevant graph algorithms.
  4. Early communication networks. Talk about how telegraphs worked, how data was encoded. Talk about pre-wireless phone networks and how that data is encoded. Introduce some coding theory: error detection and correction over networks.
  5. What is a file? Character encoding, numerical representation, file encodings. Code lives in files too: HTML as example. What is a file system?
  6. Midterm. What is a computer? Early computers; command-line interfaces.
  7. Pre-internet computer networks. Talk about packets, packet routing, packet switching. How routers work.
  8. Internetworking: how we can connect networks together. Internet infrastructure (ISPs, IXPs, etc), TCP/IP, DNS. Who governs the various components of the internet (ICANN, RIRs, etc).
  9. Asymmetric key cryptography. Why it was necessary for the internet to grow in popularity. Whitfield-Diffie, RSA, PGP. P and NP.
  10. Secure internetworking. SSL, HTTPS, TOR, VPNs, etc. Cookies. How internet surveillance and censorship work. Cyberwarfare. Dangers of online/computerized voting.
  11. Social networking. How social network websites work. What is their business model? AI and machine learning on the internet, filter bubbles and other biases resulting from machine learning.
  12. HCI of the internet. Usability issues on the internet. HCI approach to security: who is in your personal network and how can you stay safe?

The whole course covers a lot of computer science: algorithms, theory of computation, systems, networking, crypto, security, HCI, AI. You could add in a bit on databases if you wanted, too.

Some big advantages of this approach to introducing computer science are:
  • Students get a more accurate feel for what computer science is and what it's about than in an introductory programming course.
  • Students see computer science as a human endeavour. It's history is exposed, as well as motivations for the major stages in its development.
  • Similarly, students see how CS is not value neutral. We discuss topics like neocolonialism in technology development, the role of the military in advancing computer science, how the internet is governed, and how the internet affects politics.
  • Students learn about computer security and the internet that is useful to their daily lives in a way that empowers them. 
  • Improving the state of our democracy. We need leaders and community members to understand these issues to make informed decisions.

Introducing Computer Science via Online Security: An Experience Report

Last weekend I spent two hours teaching an informal introduction to online security to an audience of political activists. I wound up teaching a fair bit of computer science in the process and I'm writing up this experience report because I think it's a valuable way to teach introductory computer science.

Before I put together my lesson plan I spent a fair bit of time looking at other people's introductions. Broadly, they fell into two categories:
1. Introductions for CS students, which would include things like how to write your own HTTPS server or proofs about why RSA works (too advanced for my audience)
2. Instructions for what software you should download to stay secure.

I'm a member of the political organization from which my audience came. People regularly post articles which fall into category 2 on the online community for the group. And not unsurprisingly, these articles have had limited effects on getting people to change their behaviour. This was why I'd volunteered to teach the workshop. I'd initially planned it to be all about the software to install to stay safe.

As I put together my lesson plan I had a change of idea for the goal of the workshop. In my experience teaching introductory programming, students struggle for the first few weeks because they don't understand why they should be learning this or what it gets them. I started to think something similar might be going on here: a typical article telling you to install Signal and HTTPS Everywhere doesn't sufficiently motivate why it's necessary and what's going on technically.

Computer scientists like myself think of the internet in a very different way than my activist friends. My activist friends see the internet as a mystical black box.

My learning goal for the workshop hence became: to demystify the internet.