Programming projects are performed in teams of two to three students formed during the second class meeting. The teams are heterogeneous in terms of prior knowledge of their members. I believe that group work is especially important in computer programming courses. Most real world programming projects involve teams, so the students exercise skills that will be important in their future work. In addition, their team colleagues dramatically enhance their learning experience and are the first and most powerful resource outside of class.
Team work allows for larger and more challenging assignments while reducing the overall workload.
While all of my classes are based on EMail communication, I believe that EMail is particularly valuable in programming classes. All assignments are submitted by EMail. This allows for a true midnight deadline, not limited to the days when the class meets. The time stamp of the EMail message provides an unbiased and respected by the students arbitration of the submission date. The assignments are tested by the TA on sample data sets that are made publicly available later.