Computing for the Web Introduction to Hacking
CSCI040:
Important links:
About the Instructor
Name | Mike Izbicki (call me Mike) |
[email protected] | |
Office | Adams 216 |
Office Hours | MW 3:45-4:00 or by appointment (see my schedule) |
Webpage | https://izbicki.me |
Research | Machine Learning (see izbicki.me/research.html for some past projects) |
Fun Facts | grew up in San Clemente, CA (1 hr south of Claremont) 7 years in the navy, worked on nuclear submarines and at NSA left Navy as a conscientious objector phd/postdoc at UC Riverside taught in DPRK |
About the Course
General Information:
-
There are no prerequisites for this course, but students who have taken calculus find this course easier.
-
This course fulfills the math general ed requirements for CMC students. But, most students find it much harder than taking MATH30 (Calculus I).
-
This course is similar to CS5 at Harvey Mudd or CS51 at Pomona.
- If you have already taken either of those courses, then you cannot take this course.
- If you are majoring in computer science at either of those schools, then you cannot take this course.
- This course is designed for CMC's
- data science major,
- data science sequence,
- and computer science sequence.
- This course is more practical than the Mudd/Pomona courses.
Primary Learning Objectives:
- Automate boring tasks <-- this is a hacker's primary goal
- Create static and dynamic web pages
- Understand the basics of:
- HTML
- CSS
- JavaScript
- Jinja
- SQL
- Markdown
- and Python <-- this is the main focus of the course
Secondary Learning Objectives:
- Introduction to "hacker culture" and open source software
- Understand basic:
- "front end" and "back end" development
- test driven development
- accessible development
- internet infrastructure
- web security
- search engine optimization
- Use Python libraries
Textbook:
All of our textbooks are free as in beer. Some of them are free as in speach.
- Shay Howe's Learn to Code HTML & CSS.
- Al Sweigart's Automate the Boring Stuff with Python.
- Other online resources as listed in the weekly schedule.
Hackers believe in the free exchange of information and often use the following websites to share textbooks and other knowledge:
But most of the people who use these sites are script kiddies
Grades:
Your grades will be calculated according to the following tables.
Category | Percent |
---|---|
Projects | 50 |
Labs | 30 |
Quizzes | 20 |
This will be a hard class, but a low-stress class.
-
The material is intrinsically hard. That's why we have an extra 2 hour lab period per week compared to most classes.
-
The course is low-stress because you have full control over what your grade will be:
- Weekly labs are automatically graded by Python.
- You will grade your own quizzes.
- Projects have TONs of extra credit opportunities. In the past, I've had students end the course with a 150%, and I've had other students choose not to complete certain projects because they would get an A without completing them.
-
Historically, the average student needs to spend about 10 hours per week (including class time) to get an A. About 25% of students will either: spend 15-20 hours per week and get an A, or spend 10 hours per week and get a B/C.
-
The projects are designed to be fun, real-world projects:
Points Project Due Date 0 10 Building a Webpage Sunday, 6 Sep 1 15 Wikipedia data analysis Sunday, 27 Sep 2 15 Data visualization Sunday, 11 Oct 3 20 Reddit propaganda bot Sunday, 25 Oct 4 15 Scraping ebay Sunday, 1 Nov 5 25 Twitter clone Sunday, 6 Dec There's also fewer projects than in CS5/CS51. Those courses have 1 project per week.
Your final grade will be computed according to the following table, with one caveat.
If your grade satisfies | then you earn |
---|---|
95 ≤ grade | A |
90 ≤ grade < 95 | A- |
87 ≤ grade < 90 | B+ |
83 ≤ grade < 87 | B |
80 ≤ grade < 83 | B- |
77 ≤ grade < 80 | C+ |
73 ≤ grade < 77 | C |
70 ≤ grade < 73 | C- |
67 ≤ grade < 70 | D+ |
63 ≤ grade < 67 | D |
60 ≤ grade < 63 | D- |
60 > grade | F |
CAVEAT: In order to earn an A/A- in the class, you must also complete one of the following tasks.
-
Read Harry Potter and the Methods of Rationality. This is a fanfic written by Eliezer Yudkowsky, who is a famous AI safety researcher. The premise is that Harry Potter's parents were both wizards and scientists, and the story introduces a lot of concepts important for AI safety and the philosophy of data science.
-
Watch the following shows/movies about hacking:
-
Season 1 of Mr. Robot (available of Amazon Prime). This is the most accurate portrayal of hacking in any movie, see for example this article and this article.
-
War Games (available on Amazon Prime. This is a classic hacker movie and was quite realistic for what hacking looked like when the movie was released (1983).
-
CitizenFour (available for free from the Internet Archive). This is a documentary about Edward Snowden and the hacking that the NSA does. There's also a live-action movie called Snowden that you could also choose to watch.
-
Zero Days - Security Leaks for Scale (available for free on youtube)
-
Late Work Policy:
You lose 10% on labs/projects for each day late. Quizzes may not be submitted late.
If you have extenuating circumstances, contact me in advance of the due date and I may extend the due date for you.
Schedule
Week | Date | Topic |
---|---|---|
0 | Mon, Aug 24 | Course intro |
0 | Wed, Aug 26 | Web 1.0: HTML |
0 | Thu, Aug 27 | Lab: GitHub |
1 | Mon, Aug 31 | Web 1.0: CSS |
1 | Wed, Sep 2 | Web 1.0: SEO |
1 | Thu, Sep 3 | Lab: Google Analytics |
2 | Mon, Sep 7 | Python: control flow |
2 | Wed, Sep 9 | Python: control flow |
2 | Thu, Sep 10 | Lab: SMS/Twilio |
3 | Mon, Sep 14 | Python: lists |
3 | Wed, Sep 16 | Python: dictionaries |
3 | Thu, Sep 17 | Lab: basic algorithms/data structures |
4 | Mon, Sep 21 | Python: strings |
4 | Wed, Sep 23 | Python: files |
4 | Thu, Sep 24 | Lab: markdown to html converter |
5 | Mon, Sep 28 | Python: JSON |
5 | Wed, Sep 30 | Python: matplotlib |
5 | Thu, Oct 1 | Lab: Analyzing Trump's tweets |
6 | Mon, Oct 5 | Python: reddit |
6 | Wed, Oct 7 | Python: reddit |
6 | Thu, Oct 8 | Lab: Generating propaganda |
7 | Mon, Oct 12 | Python: reddit |
7 | Wed, Oct 14 | Python: reddit |
7 | Thu, Oct 15 | Lab: RedditBots |
8 | Mon, Oct 19 | Python: web scraping |
8 | Wed, Oct 21 | Python: web scraping |
8 | Thu, Oct 22 | Lab: Requests |
9 | Mon, Oct 26 | Python: multilingual support (Unicode) |
9 | Wed, Oct 28 | Python: multilingual support (Unicode) |
9 | Thu, Oct 29 | Lab: machine translation |
10 | Mon, Nov 2 | Web 2.0: SQL |
-- | Tue, Nov 3 | US Elections |
10 | Wed, Nov 4 | Web 2.0: SQL |
10 | Thu, Nov 5 | Lab: SQL |
11 | Mon, Nov 9 | Web 2.0: Flask |
11 | Wed, Nov 11 | Web 2.0: Flask |
11 | Thu, Nov 12 | Lab: Dynamic webpages |
12 | Mon, Nov 16 | Web 2.0: Flask |
12 | Wed, Nov 18 | Web 2.0: Flask |
12 | Thu, Nov 19 | Lab: AJAX |
13 | Mon, Nov 23 | Web 2.0: Flask |
13 | Tue, Nov 24 | Lab: Twitter |
Collaboration Policy
You are encouraged to discuss all labs and projects with other students, subject to the following constraints:
- you must be the person typing in all code for your assignments, and
- you must not copy another student's code.
You may use any online resources you like as references.
WARNING: All material in this class is cumulative. If you work "too closely" with another student on an assignment, you won't understand how to complete subsequent assignments, and you will quickly fall behind. You should view collaboration as a way to improve your understanding, not as a way to do less work.
You are ultimately responsible for ensuring you learn the material!
Accommodations for Disabilities
I've tried to design the course to be as accessible as possible for people with disabilities. (We'll talk a bit about how to design accessible software in class too!) If you need any further accommodations, please ask.
I want you to succeed and I'll make every effort to ensure that you can.