I recently took up a job at my Alma Mater as an adjunct professor teaching an undergraduate embedded systems course. Due to the nature of the school, and this being my first teaching assignment, I work in conjunction with a more experienced professor; he handles the lecture and one of the lab sections, I handle the other lab section.
I find that my students seem to grasp the concepts discussed in the lecture, but fail to connect what they have learned to actually, practically writing code to solve the problems presented to them. It is as if they can describe what needs to be done, but they can't actually do it on their own. Now, I did some tutoring as well when I was an undergrad, and I saw a similar effect. I know the students are capable, because I have seen them do very similar things before, however as soon as they get stuck on something, they freeze up and even the most basic, prerequisite concepts (programming, in this case) seem to leave their heads.
It is very frustrating, and I have to resist the urge to just hand them the answer, but I feel that as the semester progresses and we encounter more difficult topics, we are going to have issues completing the labs. How can I inspire my students to realize that they do possess the knowledge to solve the problem and that they do not need me to take them to the answer one step at a time? It seems callous to just say "You know this, I'm not helping you" (obviously with less harsh words), but I really don't know how else to get that point across.
Other Thoughts: Based on some of the answers (which are great, by the way), it seems like I may be mistaken in my assumption that my students know how to program, and that may be related to the fact that this course spends a lot of time trying to teach the important parts of embedded systems, without stressing the programming piece as much, because hey, the students already took a programming class. They already know how to to it.
This is actually something I plan to discuss with my dept. chair. Unfortunately, since I basically handle the lab section for now, and the semester is under way already, I can't exactly modify the course curriculum.
I think we as an institution need to alter the course to have more general, thought provoking programming assignments in addition to the "easy-code hard-implementation" of embedded programming. For example, have the students write a prime number generator in C (for a homework assignment), even if this week's lab is as simple as blinking an LED. Or maybe not even a direct programming assignment, something more like "Explain what could happen if a function that declares a variable calls itself from within itself (recursively) 1 million times?" Its open ended, but with a little research and critical thinking it should be apparent that you'd eventually have a stack overflow/stomp on memory somewhere else. Its hard to make programming assignments that are compact and can't be found on Google.
Thank you all for your answers.