It is important for students to learn the ideas behind complex concepts like mathematics or computer science. However, all too often, students are left without a good understanding of why those ideas are important. Understanding the "why" of a topic serves not only to help students apply the abstract ideas in the real world, but helps motivate them to care about abstractions that would otherwise be opaque, isolated, and quickly forgotten after the exam.
Project-based learning is a great way to help students understand why your subject matters. However, it is important to avoid projects that railroad your students through. Below, I've codified a set of guidelines that emerged over three years of teaching CSE-562 Database Systems. Hopefully these can be of some use to you in the design of your own project-based courses.
Simulate reality
Express project goals in terms of real world problems with clearly defined measures for success.
Why
I find that students are often the most motivated when when they can see a clear application of the material that they're learning.
Example
In databases, students build a SQL query processing engine -- exactly the same thing that is in Oracle, DB2, SqlServer, Postgres, Mysql, and every other database engine out there (albeit a lighter-weight version of the same)
Use second-order metrics
Do not express goals in terms of canonical correct solutions, but rather in terms of measurable properties like time taken, resources consumed, or adherence to a general end-to-end specification (the memory allocator allocates disjoint regions and has no memory leaks). Numerical metrics are best for this purpose.
Why
Phrasing goals in terms of metrics with clear utility (time, etc...) provides a baseline for students to understand what they're trying to accomplish. Using second-order metrics (vs e.g., examining the RA tree produced by the query optimizer) helps students to think in terms of how to apply the abstract concepts from class, instead of thinking in terms of how to replicate the teacher's solution. Using numerical metrics creates a gradient of 'rightness' that helps students to appreciate how well they're doing.
Example
Database students are evaluated in terms of the time taken to evaluate a query. Times are selected to encourage students to either use course materials or express a high degree of personal creativity.
Allow multiple submissions
Use automated online grading tools to allow students the opportunity to experiment and submit multiple times. Be sure that the automated tools provide extensive feedback.
Why
Experimentation creates opportunities for emergent learning. Concepts that students 'reinvent' on their own are internalized much better than material conveyed in a lecture, or even applied to a project. Furthermore, multiple submissions gives struggling students a reason to keep trying and learn from their failures, rather than being petrified of the possibility of failure.
Example
The database project has an online submission system that evaluates the performance of the student's code. When the student receives any less than a perfect grade, it also provides a detailed report about where and how the student's project failed. Although this results in much longer office hour queues, I've found students to be far more invested in learning how they can do better when there's an opportunity for grade improvement. Also, it creates opportunities for emergent learning. I'm occasionally approached by groups who propose 'improvements' to a project that amount to material that I haven't covered yet. Discovering it rather than just hearing it allows these students to develop a much better understanding of that material.
Grade the ends, not the means
Do not penalize alternative or unexpected solutions. If necessary, revise project description for later copies of the class.
Why
In the real world, the students' goal is to solve problems, so let them do that. It's possible that a student may come up with a solution that does not achieve the pedagogical goals of the project. This will often happen repeatedly. When it does, ask yourself why the alternative strategy would not work in the real world and alter your evaluation strategy to be a more realistic simulation. Often, you'll find that you learn something new about your subject area.
Example
Databases had a project evaluation that was designed to encourage students to use indexes, a type of data structure that uses precomputation to enable fast access to data. Students were given an un-timed precomputation period, and a timed query period. Some students noticed that the queries were all the same and had the bright idea of pre-computing the query results during the un-timed period. In the following year, the evaluation system was modified to pose a different query with every test run.
First grades, then ego
Use grades to evaluate baseline student understanding of the material. Encourage those who are interested in the subject to go further by using non-graded rewards like ego-boosters (top-10 lists), baked goods, or perks like exemption from class chores. Friendly competitions or stretch goals can give students who are already excited a reason to push their limits, and to encourage their peers to push as well.
Why
Although it would be nice if everyone was as enthusiastic about your course as you, not every subject 'clicks' for everyone. That's ok. You can't force someone to enjoy a subject. Ultimately, you have two goals: (1) Ensure that everyone in the class understands the material, and (2) Kindle a passion for the subject for some members of the class. Often, teachers focus on one of these so much that they forget about the other. Passionate students often don't need a strong reason to push their limits. Non-graded rewards give those students direction and an outlet for their passion, without penalizing those students who just aren't interested.
Example
The requirements for an 'A' in the database project are comparatively relaxed, and I describe in pretty graphic detail the design of a query processing engine that will achieve an 'A' grade.
However, the online grading system also lists the top-performing groups with their query processing times in sorted order. Depending on class composition, friendly competitions have emerged between the top-performing groups. I sometimes reward the best performing groups with baked goods.