The labs provide students with opportunities to get acquainted with aspects of the programming course that are no fun to talk about (or listen to) in the large lecture. They are an effective means by which to render students operationally competent at writing Java programs in the context of Java, unix, and emacs. They also provide an excellent opportunity to reinforce material of a conceptual nature presented in class.
"Labs" are more or less well structured and technical in nature. They differ from "Programming Challenges" which are less well structured and more conceptual in nature.