Skip Course Support
Skip Required Textbooks
OL 101: My Course Help offers Quick Start Guides, an FAQ, and other information to help you navigate this site.
For quick resolution to technical or administrative issues, please Contact Our Support Staff rather than your instructor.
Stephen Prata, C Primer Plus, 5th ed. (Indianapolis, IN: Sams, 2005).
Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, 2nd ed. (Englewood Cliffs, NJ: Prentice Hall, 1988).
Steve Maguire, Writing Solid Code: Microsoft's Techniques for Developing Bug-free C Programs (Redmond, WA: Microsoft Press, 1993).
Steve McConnell, Code Complete, 2nd ed. (Redmond, WA: Microsoft Press, 2004).
This course preview outlines the details of this online course. For more information on taking this course, please send an e-mail message to our support staff at email@example.com. UW offices are closed on these holidays.
Foundations of C++ teaches the building blocks of C++, the C programming language. Two overlapping versions are taught.
Both versions synchronize at week 6 and continue on to cover character I/O and input validation, all aspects of functions, arrays, pointers, C strings, storage classes, linkage, memory management, file I/O, structures, the preprocessor, and advanced data representation. The programming assignments are challenging and fun. The instructor provides hands-on professional code review, focusing on simple and readable coding style, maintainability, practical testing techniques. Online discussion is encouraged.
The following qualifications are required to ensure that you will be successful in this course. If you are unsure of your qualification for the course, you are invited to take the Assessment Quiz.
The C programming language is still going strong. It was created by Dennis Ritchie of Bell Labs back in 1972 as he and Ken Thompson worked on designing the UNIX operating system. Despite the many modern and successful high-level languages (such as C++, Java, C#, Perl, Python, Ruby, and others) created since then, C remains a workhorse language for small devices, smart phones, device drivers, database engines, and high performance computing applications. As of September 2011, web sites such as langpop.com show C as being one of the most popular languages used overall. Most importantly, several of the most well-known and dominant languages (C++, Java, C#) are successful largely because they base their syntax in C. Understanding C and its compiled and procedural constructs provides you a core foundation to branch out into a large set of derivative languages and technologies that have been created since C.
After mastering the material in this class, you will have a working knowledge of nearly the entire ANSI-C programming language. You will be able to design, write, and debug a multiple file program.
Scope of the Course
In addition to the programming language and constructs, the course emphasizes effective programming style that leads to readable, understandable, and maintainable code. Strategic testing techniques are taught which improve code quality and correctness. Constructing a logically coherent, understandable and componentized solution is as important and the language and tools used. In that sense, C is merely the setting for learning these robust language-independent concepts.
Besides reading the weekly assigned book chapters and written instructor commentary, you are required to deliver the following materials to be graded by the instructor:
You do not need to submit practice exercises from the book.
The programming assignments in this class are designed to be platform agnostic. Any ANSI-C compiler on a modern operating system should do fine. The gcc compiler is freely available on Linux, UNIX, and Mac OSX. On Windows, the Microsoft Visual Studio 2010 Express development environment is a good choice. Learn how to configure your compiler options (or project settings) to restrict your code to the ANSI-C language, avoiding C++ features and proprietary language extensions. Use of advanced C99 features is acceptable, but is not required nor supported by the instructor. Use of C++ features is forbidden, as the objective of this class is to teach you the ANSI-C programming language.
Programs This Course Prepares You For
Course Grading Criteria
Foundations of C++ is a pass/fail course. At the end of the course, you receive either "satisfactory completion" (SC) or "unsatisfactory completion" (USC). The individual programming assignments and final exam are also graded in that fashion, ith the addition of a 100-point grade to give you a more detailed quantitative idea as to how you did. As a general rule, 80 points out of 100 is the minimum needed to pass individual programming assignments. However this is subjective, and ultimately the instructor will judge if an assignment is good enough to move onto the next. The assessment comes down to whether you will likely succeed on harder assignments based on your past performance.
While the points are not binding, they help establish consistency between students, as the instructor will retract the same points for the same issue. On one assignment, 85 might be required to pass. On another (harder) assignment, it might be 75. It all depends on the overall class and how the instructor deducted points for individual coding issues. Consistency, fairness, and ensuring your future success are the primary criteria.
Code Review Feedback
One of the primary value-added features of this online course is the instructor’s detailed line-by-line code review feedback on your programming assignments. A great deal of time and effort goes into providing that individual feedback, so take advantage of it and learn from it.
Late and Rework Policy
Foundations of C++ consists of a fixed 16-week schedule of reading and programming assignments (12 weeks for the accelerated students). You must turn in programming assignments on time per posted due date, and take the final exam by the posted due date.
You are highly encouraged to turn in work early, especially on the easier (early) assignments, giving you a safety buffer when assignments later become more difficult.
The online environment offers a unique experience that differs from the classroom-based courses. There are advantages and disadvantages, depending on the needs of each student. While classroom courses offer a regularly scheduled classroom environment rich with personal interaction, they require students to be located locally in the Puget Sound and show up to a regularly schedule physical classroom. Due to traffic, location, working hours, or situation in life, this is difficult for some students. Online courses offer the flexibility of working on your own schedule from any internet-ready location. There are online discussion forums and occasionally real-time live virtual meetings to supplement the text-based learning format. So while you won’t often see your instructor or fellow students face-to-face, you can collaborate online and not be required to be located in the Puget Sound.
We use a learning system called Moodle. On the site, you are encouraged to fill out your Moodle profile. This is a great place to share your programming experience with the class, such as languages you know, number of years, types of products you have worked on, etc. Also consider mentioning your goals after completing this class, such as to gain certain skills for your job or to enroll in the Embedded, C++, or iOS certificates.
The online discussion forums are the best way to pay-it-forward to your fellow students. As you benefit from seeing questions and answers posted that help you, remember to also use these forums for your own questions, rather than defaulting to direct e-mails with your instructor. Often your question is on the minds of several of your peers, and you help each other by keeping those excellent questions visible to the whole class. There are, of course, situations when one-on-one e-mail or phone interaction works best, and your instructor will be happy to help you work through any issues you are having with the course.
The online student handbook is a great resource that links to a rich array of UW library services and answers questions about online course, such as how to purchase your text, schedule the exam, obtain a transcript, and get technical help with the learning tools if you need it.
The following table presents the course outline by book chapter. Most of the 16 weeks cover one chapter and one programming assignment, except for weeks 1 and 13, which have three and two chapters of reading, respectively. The 12-week class skips weeks 1, 3, 4, and 5. Thus on week 5, the 12-week students do what the 16-week students did during week 2. At week 6, all students are synchronized and have the same reading and assignments through the end of the course.
About the Course Developer
Colby O'Donnell has been programming professionally in C++ since 1999. During his first 11 years, he developed portions of several major software releases of premium ultrasound devices at Philips Healthcare in Bothell and Siemens Healthcare in Issaquah. He now works at Microsoft, learning and using C# and SQL. His passion lies in implementing simple, maintainable, and testable software designs that meet customer need.
Colby holds an M.S. in Computer Science from the University of Wisconsin, two B.S. degrees in Physics and Computer Science from the University of Washington. Quick quiz: How do you pronounce UW? Careful, it depends! While enjoying the frigid temperatures of Madison, Colby taught two sections of CS302 in C++ and was ribbed for saying "U-dub".
Skip Upcoming Events
Skip Latest news
There are no upcoming events