Computer Science 50

Introduction to Computer Science I
Harvard College

Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, encapsulation, data structures, databases, memory management, software development, virtualization, and websites. Languages include C, PHP, and JavaScript plus SQL, CSS, and HTML. Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. Designed for concentrators and non-concentrators alike, with or without prior programming experience.

College Students: http://cs50.net/
edX Students: http://x.cs50.net/
OpenCourseWare: http://cs50.tv/

Fall 2013, Fall 2012, Fall 2011, Fall 2010, Fall 2009, Fall 2008, Fall 2007

Computer Science 164

Software Engineering
Harvard College

Introduction to principles of software engineering and best practices, including code reviews, source control, and unit tests. Topics include Ajax, database schemas, event handling, HTTP, MVC, object-oriented design, and user experience. Projects include web apps with front-end UIs (mobile and desktop) and back-end APIs. Languages include JavaScript and PHP.

College Students: https://cs164.net/
OpenCourseWare: http://cs164.tv/

Spring 2014, Spring 2012

Computer Science E-1

Understanding Computers and the Internet
Harvard Extension

This course is all about understanding: understanding what's going on inside your computer when you flip on the switch, why tech support has you constantly rebooting your computer, how everything you do on the Internet can be watched by others, and how your computer can become infected with a worm just by turning it on. In this course we demystify computers and the Internet, along with their jargon, so that students understand not only what they can do with each but also how it all works and why. Students leave this course armed with a new vocabulary and equipped for further exploration of computers and the Internet. Topics include hardware, software, the Internet, multimedia, security, website development, programming, and dotcoms. Through optional hands-on sections and workshops, local students have opportunities to dissect as well as upgrade a computer with additional hardware, search the Internet more effectively, build a wireless network, create digital images, eradicate spyware, and design webpages. Problem sets offer online students similar opportunities. This course is designed both for those with little, if any, computer experience and for those who use a computer every day.

Extension Students: http://computerscience1.net/
OpenCourseWare: http://computerscience1.tv/

Fall 2011, Spring 2010, Fall 2008, Fall 2006, Fall 2005, Fall 2004, Fall 2003, Fall 2002, Spring 2002, Fall 2001, Fall 2000, Spring 2000, Fall 1999, Spring 1999

Computer Science E-75

Building Dynamic Websites
Harvard Extension

Today's websites are increasingly dynamic. Pages are no longer static HTML files but instead generated by scripts and database calls. User interfaces are more seamless, with technologies like Ajax replacing traditional page reloads. This course teaches students how to build dynamic websites with Ajax and with Linux, Apache, MySQL, and PHP (LAMP), one of today's most popular frameworks. Students learn how to set up domain names with DNS, how to structure pages with XHTML and CSS, how to program in JavaScript and PHP, how to configure Apache and MySQL, how to design and query databases with SQL, how to use Ajax with both XML and JSON, and how to build mashups. The course explores issues of security, scalability, and cross-browser support and also discusses enterprise-level deployments of websites, including third-party hosting, virtualization, colocation in data centers, firewalling, and load-balancing.

Extension Students: http://cs75.net/
OpenCourseWare: http://cs75.tv/

Summer 2012, Summer 2011, Fall 2010, Summer 2010, Fall 2009, Summer 2009, Spring 2009, Summer 2008, Spring 2008

Computer Science E-76

Building Mobile Applications
Harvard Extension

Today's applications are increasingly mobile. Computers are no longer confined to desks and laps but instead live in our pockets and hands. This course teaches students how to build mobile apps for Android and iOS, two of today's most popular platforms, and how to deploy them in Android Market and the App Store. Students learn to write native apps for Android using Eclipse and the Android SDK, to write native apps for iPhones, iPod Touches, and iPads using Xcode and the iOS SDK, and to write web apps for both platforms.

Extension Students: http://cs76.net/
OpenCourseWare: http://cs76.tv/

Summer 2013, Summer 2012, Spring 2012, Summer 2011, Spring 2011

Computer Science E-259

XML with Java, Java Servlet, and JSP
Harvard Extension

This course introduces XML as a key enabling technology in Java-based applications. Students learn the fundamentals of XML and its derivatives, including DTD, SVG, XML Schema, XPath, XQuery, XSL-FO, and XSLT. Students also gain experience with programmatic interfaces to XML like SAX and DOM, standard APIs like JAXP and TrAX, and industry-standard software like Ant, Tomcat, Xerces, and Xalan. The course acquaints students with J2EE, including JavaServer Pages (JSP) and Java Servlet, and also explores HTTP, SOAP, web services, and WSDL. The course's projects focus on the implementation and deployment of these technologies.

Extension Students: http://cs259.net/
OpenCourseWare: http://cs259.tv/

Fall 2007, Spring 2007, Spring 2006, Spring 2005, Spring 2004

Computer Science S-1

Great Ideas in Computer Science
Harvard Summer

This course is an introduction to the most important discoveries and intellectual paradigms in computer science, designed for students with little or no previous background. We explore problem-solving methods and algorithm development using the high-level programming languages Java and Scratch. Students learn how to design, code, debug, and document programs using techniques of good programming style in a Linux-based environment. This course presents an integrated view of computer systems, from hardware architecture and data communication systems through compilers and cryptography. We examine theoretical and practical limitations related to unsolvable and intractable computational problems, and the social and ethical dilemmas presented by such issues as software unreliability and invasion of privacy.

Summer 2010, Summer 2009, Summer 2008, Summer 2007, Summer 2006, Summer 2005, Summer 2004, Summer 2003