Syllabus version 1.1
This document is also available as a PDF.
Instructor
David J. Malan
+1-617-523-0925
Description
Introduction to the intellectual enterprises of computer sciences. Algorithms: design, implementation, analysis. Software development: abstraction, encapsulations, data structures, debugging, testing. Architecture of computers: low-level data representation, instructions processing. Computer Systems: programming languages, compilers, operating systems, databases. Computers in the real world: networks, websites, security, forensics, cryptography. This course teaches students how to think more carefully and how to solve problems more effectively. Problem sets involve extensive programming in C as well as PHP and JavaScript.
No previous programming experience required.
This course, when taken for a letter grade, meets the Core area requirement for Quantitative Reasoning.
Expectations
You are expected to attend all lectures and sections, complete nine problem sets, take two quizzes, and produce a final project.
Grades
Final grades will be determined using the following weights; remarkable effort will not go unnoticed.
You may take this course pass/fail. Realize, though, that some departments (Computer Science, Applied Math, et al.) do not allow courses taken pass/fail to satisfy concentration requirements. Moreover, you'll certainly learn more by immersing yourself in this course, in which case you might just want to take it for a grade. But it's up to you.
Note that CS 50 draws quite the spectrum of students, including "those less comfortable," "those more comfortable," and those somewhere in between. However, what ultimately matters in this course is not so much where you end up relative to your classmates but where you, in Week 12, end up relative to yourself in Week 0.
Website
The address of this course's website appears below.
Visit the course's website to access the course's bulletin board, enter the virtual terminal room, check your grades, watch videos of lectures and walkthroughs, download handouts and software, and follow links to other resources.
Lectures
Lectures take place in Sanders Theater on Mondays and Wednesdays from 1:00 P.M. until 2:30 P.M.
Each lecture is filmed and made available within 72 hours via podcast (for download to iTunes and iPods) and via the course's website in Flash, MP3, and QuickTime formats. Once posted, these recordings remain available until semester's end. You are welcome to watch or listen to a recording if you are unable to attend some lecture in person. You are encouraged to watch or listen to these recordings for the sake of review.
A schedule of lectures, subject to change, appears below.
Sections
Lectures are supplemented by weekly, 60- to 90-minute sections led by the teaching fellows. Sections provide you with an opportunity to review and discuss course materials in a more intimate environment, with only your teaching fellow and a handful of classmates present. Moreover, the teaching fellows supplement material from lecture with additional examples and implementation details as well as provide further guidance for problem sets and quizzes.
Different sections are offered for those less comfortable, those more comfortable, and those somewhere in between.
A schedule of sections appears on the course's website.
Walkthroughs
On Monday night from 6:00 P.M. until 7:30 P.M. in Northwest Science B101, the staff hold a "walkthrough" for the current week's problem set during which you receive direction on where to begin and how to approach the week's challenges.
Each walkthrough is filmed and made available within 48 hours via podcast (for download to iTunes and iPods) and via the course's website in Flash, MP3, and QuickTime formats. You are encouraged to watch or listen to these recordings before asking questions at office hours.
Office Hours
Throughout the week, the staff hold office hours in Science Center B14 (the "terminal room") during which you can receive hands-on, one-on-one assistance with problem sets. The staff also hold virtual office hours in the course's "virtual terminal room," where you can receive remote, one-on-one assistance via the Web. Thanks to technology, the staff can help you troubleshoot bugs by observing or sharing control of your screen while chatting with you via IM or VOIP, whether you're in your dorm room, at Brain Break, at Starbucks, or beyond!
A schedule of office hours appears on the course's website.
Problem Sets
Nine problem sets are assigned during the semester. Each is due via electronic submission on cs50.net seven or more days after its date of distribution. However, you have nine "late days" that you may "spend" during the semester, each of which provides you with an extension of twenty-four hours. In other words, you may submit one problem set nine days late, each problem set one day late, etc. It is expected that you alert your teaching fellow to your use of any late days for some problem set prior to or upon its actual deadline. Lateness of electronic submissions is determined down to the minute by submissions' timestamps on cs50.net. Submitting one minute late is considered equivalent to submitting twenty-four hours late. If you choose not to submit some problem set at all, you will not be charged any late days, but you will receive a score of zero. Late work is not accepted once you have exhausted your nine late days, except in cases of emergency. Technical difficulties are not considered emergencies. These late days cannot be spent on the course's final project.
In order to accommodate students with different backgrounds, some problem sets are released in two editions: a standard edition intended for most students and a "Hacker Edition" intended for some students. Both editions essentially cover the same material. But the Hacker Edition typically presents that material from a more technical angle and pose more sophisticated questions. Hacker Editions are graded separately from standard editions, but those students who submit the former do not receive any form of extra credit outright. When awarding letter grades at term's end, however, we do bear in mind submissions of Hacker Editions.
To be clear, we encourage most students (including aspiring computer scientists) to tackle the standard editions. However, you may choose, week to week, which edition to submit. You may not submit both or some amalgam of the two.
When final grades are computed, your lowest score on these nine problem sets is dropped; your eight highest scores are weighted equally.
A schedule of problem sets, subject to change, appears below.
Quizzes
The course has two 75-minute quizzes. These quizzes are be "closed-book," but you may utilize during each quiz one two-sided page (8.5" × 11") of notes, typed or written, and a pen or pencil, though nothing else.
When final grades are computed, your scores on these two quizzes are weighted equally.
A schedule of quizzes , subject to change, appears below; these quizzes take place in lieu of lectures on these dates.
You should expect the second quiz to be cumulative but its content based mostly on lectures subsequent to those covered by the first quiz. Unless arranged with the staff in advance, quizzes may not be taken at alternative times even if missed by accident, except in cases of emergency.
Final Project
The climax of this course is its final project. The final project is your opportunity to take your knowledge of programming out for a spin and develop your very own piece of software. So long as your project draws upon this course's lessons, the nature of your project is entirely up to you, albeit subject to the staff's approval. You may implement your project in any language(s) as long as the staff approve. You are welcome to utilize infrastructure other than cs50.net, provided the staff ultimately has access to any hardware and software that your project requires. All that we ask is that you build something of interest to you, that you make something useful, that you solve an actual problem, or, best yet, that you somehow impact campus. Strive to create something that outlives this course.
This semester will conclude with the first-ever "CS 50 Fair," a campus-wide exhibition of final projects.
Inasmuch as software development is rarely a one-person effort, you are allowed an opportunity to collaborate with one or two fellow students for this final project. Needless to say, it is expected that every student in any such group contribute equally to the design and implementation of that group's project. Moreover, it is expected that the scope of a two- or three-person group's project be, respectively, twice or thrice that of a typical one-person project. A one-person project, mind you, should entail more time and effort than is required by each of the course's problem sets.
Guidelines for the final project will be distributed by Monday, 10 November 2008. A schedule, subject to change, appears below.
Books
No books are required for this course.
However, you may want to supplement your preparation for or review of some lectures with self-assigned readings relevant to those lectures' content from either of the books below. The first is intended for those inexperienced in (or less comfortable with the idea of) programming. The second is intended for those experienced in (or more comfortable with the idea of) programming. Both are available for purchase at the Coop and at sites like Amazon.com. Both of these books have been placed on reserve at Cabot Science Library and Gordon McKay Library. Realize that free, if not superior, alternatives to these books can be found among the course's online resources.
This last book below is recommended for aspiring hackers, those interested in programming tricks and low-level optimization of code for applications beyond the scope of this course. It is also available for purchase at the Coop and at sites like Amazon.com. It, too, has been placed on reserve.
Academic Honesty
All work that you do toward fulfillment of this course's expectations must be your own unless collaboration is explicitly allowed (e.g., by some problem set or the final project). Viewing or copying another individual's work (even if left by a printer, stored in an executable directory, or accidentally shared in the course's virtual terminal room) or lifting material from a book, magazine, website, or other source—even in part—and presenting it as your own constitutes academic dishonesty, as does showing or giving your work, even in part, to another student.
Similarly is dual submission academic dishonesty: you may not submit the same or similar work to this course that you have submitted or will submit to another. Moreover, submission of any work that you intend to use outside of the course (e.g., for a job) must be approved by the staff.
You are welcome to discuss the course's material with others in order to better understand it. You may even discuss problem sets with classmates, but you may not share code. In other words, you may communicate with classmates in English, but you may not communicate in, say, C. If in doubt as to the appropriateness of some discussion, contact the staff.
You may even turn to the Web for instruction beyond the course's lectures and sections, for references, and for solutions to technical difficulties, but not for outright solutions to problems on problem sets or your own final project. However, failure to cite (as with comments) the origin of any code or technique that you do discover outside of the course's lectures and sections(even while respecting these constraints) and then integrate into your own work may be considered academic dishonesty.
All forms of academic dishonesty are dealt with harshly.
David J. Malan
+1-617-523-0925
Description
Introduction to the intellectual enterprises of computer sciences. Algorithms: design, implementation, analysis. Software development: abstraction, encapsulations, data structures, debugging, testing. Architecture of computers: low-level data representation, instructions processing. Computer Systems: programming languages, compilers, operating systems, databases. Computers in the real world: networks, websites, security, forensics, cryptography. This course teaches students how to think more carefully and how to solve problems more effectively. Problem sets involve extensive programming in C as well as PHP and JavaScript.
No previous programming experience required.
This course, when taken for a letter grade, meets the Core area requirement for Quantitative Reasoning.
Expectations
You are expected to attend all lectures and sections, complete nine problem sets, take two quizzes, and produce a final project.
Grades
Final grades will be determined using the following weights; remarkable effort will not go unnoticed.
| Problem Sets (best 8 out of 9): | 60% | |
| Quizzes: | 30% | |
| Final Project: | 10% |
You may take this course pass/fail. Realize, though, that some departments (Computer Science, Applied Math, et al.) do not allow courses taken pass/fail to satisfy concentration requirements. Moreover, you'll certainly learn more by immersing yourself in this course, in which case you might just want to take it for a grade. But it's up to you.
Note that CS 50 draws quite the spectrum of students, including "those less comfortable," "those more comfortable," and those somewhere in between. However, what ultimately matters in this course is not so much where you end up relative to your classmates but where you, in Week 12, end up relative to yourself in Week 0.
Website
The address of this course's website appears below.
Visit the course's website to access the course's bulletin board, enter the virtual terminal room, check your grades, watch videos of lectures and walkthroughs, download handouts and software, and follow links to other resources.
Lectures
Lectures take place in Sanders Theater on Mondays and Wednesdays from 1:00 P.M. until 2:30 P.M.
Each lecture is filmed and made available within 72 hours via podcast (for download to iTunes and iPods) and via the course's website in Flash, MP3, and QuickTime formats. Once posted, these recordings remain available until semester's end. You are welcome to watch or listen to a recording if you are unable to attend some lecture in person. You are encouraged to watch or listen to these recordings for the sake of review.
A schedule of lectures, subject to change, appears below.
Week 0
Monday, 15 September 2008; Wednesday, 17 September 2008
Monday, 15 September 2008; Wednesday, 17 September 2008
Introduction. Bits. Binary. ASCII. Programming. Algorithms. Scratch. Statements. Boolean expressions. Conditions. Loops. Variables. Threads. Events.
Week 1
Monday, 22 September 2008; Wednesday, 24 September 2008
Monday, 22 September 2008; Wednesday, 24 September 2008
C. Source code. Compilers. Object code. SSH. SFTP. GCC. Functions. Comments. Standard output. Arithmetic operators. Precedence. Associativity. Local variables. Types. Casting. Standard input. Libraries. Boolean expressions, continued. Conditions, continued. Loops, continued.
Week 2
Monday, 29 September 2008; Wednesday, 1 October 2008
Monday, 29 September 2008; Wednesday, 1 October 2008
Functions, continued. Global variables. Parameters. Return values. Stack. Frames. Scope. Arrays. Strings. Command-line arguments. Cryptography.
Week 3
Monday, 6 October 2008; Wednesday, 8 October 2008
Monday, 6 October 2008; Wednesday, 8 October 2008
Linear search. Binary search. Asymptotic notation. Recursion. Pseudorandomness. Bubble sort. Selection sort. Insertion sort. Merge sort.
Week 4
Wednesday, 15 October 2008
Wednesday, 15 October 2008
No lecture on Monday, 13 October 2008.
Structures. Dynamic memory allocation. Pointers.
Structures. Dynamic memory allocation. Pointers.
Week 5
Monday, 20 October 2008; Wednesday, 22 October 2008
Monday, 20 October 2008; Wednesday, 22 October 2008
Pointers, continued. Heap. Debugging. File I/O. Forensics.
Week 6
Monday, 27 October 2008; Wednesday, 29 October 2008
Monday, 27 October 2008; Wednesday, 29 October 2008
Quiz 0 on Monday, 27 October 2008.
Linked lists.
Linked lists.
Week 7
Monday, 3 November 2008; Wednesday, 5 November 2008
Monday, 3 November 2008; Wednesday, 5 November 2008
Hash tables. Binary search trees. Huffman coding. Heaps. Heapsort. Tries.
Week 8
Monday, 10 November 2008; Wednesday, 12 November 2008
Monday, 10 November 2008; Wednesday, 12 November 2008
TCP/IP. HTTP. XHTML. PHP. SQL.
Week 9
Monday, 17 November 2008; Wednesday, 19 November 2008
Monday, 17 November 2008; Wednesday, 19 November 2008
DOM. CSS. Inheritance. JavaScript. Events, continued. OOP. Ajax.
Week 10
Monday, 24 November 2008
Monday, 24 November 2008
No lecture on Wednesday, 26 November 2008.
Preprocessing. Compiling. Assembling. Linking. CPUs.
Preprocessing. Compiling. Assembling. Linking. CPUs.
Week 11
Monday, 1 December 2008; Wednesday, 3 December 2008
Monday, 1 December 2008; Wednesday, 3 December 2008
Enterprise architectures. Virtualization. Cloud computing. Sneak previews.
Week 12
Monday, 8 December 2008; Wednesday, 10 December 2008
Monday, 8 December 2008; Wednesday, 10 December 2008
Quiz 1 on Monday, 8 December 2008.
Exciting conclusion.
Exciting conclusion.
Sections
Lectures are supplemented by weekly, 60- to 90-minute sections led by the teaching fellows. Sections provide you with an opportunity to review and discuss course materials in a more intimate environment, with only your teaching fellow and a handful of classmates present. Moreover, the teaching fellows supplement material from lecture with additional examples and implementation details as well as provide further guidance for problem sets and quizzes.
Different sections are offered for those less comfortable, those more comfortable, and those somewhere in between.
A schedule of sections appears on the course's website.
Walkthroughs
On Monday night from 6:00 P.M. until 7:30 P.M. in Northwest Science B101, the staff hold a "walkthrough" for the current week's problem set during which you receive direction on where to begin and how to approach the week's challenges.
Each walkthrough is filmed and made available within 48 hours via podcast (for download to iTunes and iPods) and via the course's website in Flash, MP3, and QuickTime formats. You are encouraged to watch or listen to these recordings before asking questions at office hours.
Office Hours
Throughout the week, the staff hold office hours in Science Center B14 (the "terminal room") during which you can receive hands-on, one-on-one assistance with problem sets. The staff also hold virtual office hours in the course's "virtual terminal room," where you can receive remote, one-on-one assistance via the Web. Thanks to technology, the staff can help you troubleshoot bugs by observing or sharing control of your screen while chatting with you via IM or VOIP, whether you're in your dorm room, at Brain Break, at Starbucks, or beyond!
A schedule of office hours appears on the course's website.
Problem Sets
Nine problem sets are assigned during the semester. Each is due via electronic submission on cs50.net seven or more days after its date of distribution. However, you have nine "late days" that you may "spend" during the semester, each of which provides you with an extension of twenty-four hours. In other words, you may submit one problem set nine days late, each problem set one day late, etc. It is expected that you alert your teaching fellow to your use of any late days for some problem set prior to or upon its actual deadline. Lateness of electronic submissions is determined down to the minute by submissions' timestamps on cs50.net. Submitting one minute late is considered equivalent to submitting twenty-four hours late. If you choose not to submit some problem set at all, you will not be charged any late days, but you will receive a score of zero. Late work is not accepted once you have exhausted your nine late days, except in cases of emergency. Technical difficulties are not considered emergencies. These late days cannot be spent on the course's final project.
In order to accommodate students with different backgrounds, some problem sets are released in two editions: a standard edition intended for most students and a "Hacker Edition" intended for some students. Both editions essentially cover the same material. But the Hacker Edition typically presents that material from a more technical angle and pose more sophisticated questions. Hacker Editions are graded separately from standard editions, but those students who submit the former do not receive any form of extra credit outright. When awarding letter grades at term's end, however, we do bear in mind submissions of Hacker Editions.
To be clear, we encourage most students (including aspiring computer scientists) to tackle the standard editions. However, you may choose, week to week, which edition to submit. You may not submit both or some amalgam of the two.
When final grades are computed, your lowest score on these nine problem sets is dropped; your eight highest scores are weighted equally.
A schedule of problem sets, subject to change, appears below.
Problem Set 0: Scratch
due by 7:00 P.M. on Friday, 26 September 2008
due by 7:00 P.M. on Friday, 26 September 2008
Create your own animation, game, or interactive art.
Problem Set 1: C
due by 7:00 P.M. on Friday, 3 October 2008
due by 7:00 P.M. on Friday, 3 October 2008
Meet Linux and C.
Problem Set 2: Crypto
due by 7:00 P.M. on Friday, 10 October 2008
due by 7:00 P.M. on Friday, 10 October 2008
Encrypt and decrypt sensitive information.
Problem Set 3: The Game of Fifteen
due by 7:00 P.M. on Friday, 17 October 2008
due by 7:00 P.M. on Friday, 17 October 2008
Implement a childhood classic.
Problem Set 4: To Be Named
due by 7:00 P.M. on Friday, 24 October 2008
due by 7:00 P.M. on Friday, 24 October 2008
Hmmm...
Problem Set 5: Forensics
due by 7:00 P.M. on Friday, 7 November 2008
due by 7:00 P.M. on Friday, 7 November 2008
Recover lost photos. Solve a murder mystery.
Problem Set 6: Mispellings
due by 7:00 P.M. on Friday, 14 November 2008
due by 7:00 P.M. on Friday, 14 November 2008
Use an IDE. Implement a spell-checker that's faster than your classmates'.
Problem Set 7: XHTML + PHP + SQL
due by 7:00 P.M. on Friday, 21 November 2008
due by 7:00 P.M. on Friday, 21 November 2008
Design a database. Build a dynamic website.
Problem Set 8: JavaScript
due by 7:00 P.M. on Friday, 5 December 2008
due by 7:00 P.M. on Friday, 5 December 2008
Use Google's APIs. Build a mashup.
Quizzes
The course has two 75-minute quizzes. These quizzes are be "closed-book," but you may utilize during each quiz one two-sided page (8.5" × 11") of notes, typed or written, and a pen or pencil, though nothing else.
When final grades are computed, your scores on these two quizzes are weighted equally.
A schedule of quizzes , subject to change, appears below; these quizzes take place in lieu of lectures on these dates.
Quiz 0
Monday, 27 October 2008
Quiz 1
Monday, 8 December 2008
Monday, 27 October 2008
Covers lectures through Wednesday, 22 October 2008.
Quiz 1
Monday, 8 December 2008
Covers lectures through Wednesday, 3 December 2008.
You should expect the second quiz to be cumulative but its content based mostly on lectures subsequent to those covered by the first quiz. Unless arranged with the staff in advance, quizzes may not be taken at alternative times even if missed by accident, except in cases of emergency.
Final Project
The climax of this course is its final project. The final project is your opportunity to take your knowledge of programming out for a spin and develop your very own piece of software. So long as your project draws upon this course's lessons, the nature of your project is entirely up to you, albeit subject to the staff's approval. You may implement your project in any language(s) as long as the staff approve. You are welcome to utilize infrastructure other than cs50.net, provided the staff ultimately has access to any hardware and software that your project requires. All that we ask is that you build something of interest to you, that you make something useful, that you solve an actual problem, or, best yet, that you somehow impact campus. Strive to create something that outlives this course.
This semester will conclude with the first-ever "CS 50 Fair," a campus-wide exhibition of final projects.
Inasmuch as software development is rarely a one-person effort, you are allowed an opportunity to collaborate with one or two fellow students for this final project. Needless to say, it is expected that every student in any such group contribute equally to the design and implementation of that group's project. Moreover, it is expected that the scope of a two- or three-person group's project be, respectively, twice or thrice that of a typical one-person project. A one-person project, mind you, should entail more time and effort than is required by each of the course's problem sets.
Guidelines for the final project will be distributed by Monday, 10 November 2008. A schedule, subject to change, appears below.
Pre-Proposal
due by 1:00 P.M. on Monday, 17 November 2008
Proposal
due by 1:00 P.M. on Monday, 1 December 2008
Design and Framework
due by 1:00 P.M. on Monday, 15 December 2008
Status Report
due by 1:00 P.M. on Monday, 5 January 2009
CS 50 Fair
from 11:00 A.M. until 5:00 P.M. on Friday, 9 January 2009
Implementation
due by 1:00 P.M. on Monday, 12 January 2009
Extensions on the final project are not be granted, except in cases of emergency. Technical difficulties are not considered emergencies. Problem sets' late days cannot be spent on the final project. Late submissions may be penalized 1% per minute late up to a maximum penalty of 100%. Lateness of submissions is determined by submissions' timestamps.
due by 1:00 P.M. on Monday, 17 November 2008
Proposal
due by 1:00 P.M. on Monday, 1 December 2008
Design and Framework
due by 1:00 P.M. on Monday, 15 December 2008
Status Report
due by 1:00 P.M. on Monday, 5 January 2009
CS 50 Fair
from 11:00 A.M. until 5:00 P.M. on Friday, 9 January 2009
Implementation
due by 1:00 P.M. on Monday, 12 January 2009
Books
No books are required for this course.
However, you may want to supplement your preparation for or review of some lectures with self-assigned readings relevant to those lectures' content from either of the books below. The first is intended for those inexperienced in (or less comfortable with the idea of) programming. The second is intended for those experienced in (or more comfortable with the idea of) programming. Both are available for purchase at the Coop and at sites like Amazon.com. Both of these books have been placed on reserve at Cabot Science Library and Gordon McKay Library. Realize that free, if not superior, alternatives to these books can be found among the course's online resources.
For Those Less Comfortable
Absolute Beginner's Guide to C, Second Edition
Greg Perry
Sams Publishing, 1994
ISBN 0-672-30510-0
For Those More Comfortable
Programming in C, Third Edition
Stephen Kochan
Sams Publishing, 2004
ISBN 0-672-32666-3
The book below is recommended for those interested in understanding how their own computers work for personal edification. At the Coop, this book is bundled at a discount with each of the books above. It is also available for purchase separately at sites like Amazon.com. It, too, has been placed on reserve.
Absolute Beginner's Guide to C, Second Edition
Greg Perry
Sams Publishing, 1994
ISBN 0-672-30510-0
For Those More Comfortable
Programming in C, Third Edition
Stephen Kochan
Sams Publishing, 2004
ISBN 0-672-32666-3
This last book below is recommended for aspiring hackers, those interested in programming tricks and low-level optimization of code for applications beyond the scope of this course. It is also available for purchase at the Coop and at sites like Amazon.com. It, too, has been placed on reserve.
Academic Honesty
All work that you do toward fulfillment of this course's expectations must be your own unless collaboration is explicitly allowed (e.g., by some problem set or the final project). Viewing or copying another individual's work (even if left by a printer, stored in an executable directory, or accidentally shared in the course's virtual terminal room) or lifting material from a book, magazine, website, or other source—even in part—and presenting it as your own constitutes academic dishonesty, as does showing or giving your work, even in part, to another student.
Similarly is dual submission academic dishonesty: you may not submit the same or similar work to this course that you have submitted or will submit to another. Moreover, submission of any work that you intend to use outside of the course (e.g., for a job) must be approved by the staff.
You are welcome to discuss the course's material with others in order to better understand it. You may even discuss problem sets with classmates, but you may not share code. In other words, you may communicate with classmates in English, but you may not communicate in, say, C. If in doubt as to the appropriateness of some discussion, contact the staff.
You may even turn to the Web for instruction beyond the course's lectures and sections, for references, and for solutions to technical difficulties, but not for outright solutions to problems on problem sets or your own final project. However, failure to cite (as with comments) the origin of any code or technique that you do discover outside of the course's lectures and sections(even while respecting these constraints) and then integrate into your own work may be considered academic dishonesty.
All forms of academic dishonesty are dealt with harshly.



