18

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.

  • 4
    Knowing when to say "you should be able to answer that question yourself" is essential for every teacher. You should get over your resistance to saying it. – user37208 Feb 24 '16 at 18:50
  • 2
    The problem with undergrad courses is they don't instill solution design,and often focus solely on syntax. Some good methods I've seen to work around this includes starting the students with some pseudocode to give them an idea of how to design a solution for the problem. – CKM Feb 24 '16 at 19:13
  • 2
    Are you sure they can actually program? blog.codinghorror.com/why-cant-programmers-program – Kimball Feb 24 '16 at 19:22
  • That's an interesting blog post @Kimball. Perhaps they do not actually know. However, I would almost expect it from the EE students, since the last "real programming class" they had was in their freshman year, and this is a junior level course. My concern is that the computer engineering students also seem to struggle the same way, and they are currently enrolled in a number of programming-only classes. – Brendan Simpson Feb 24 '16 at 19:47
  • 1
    While on the other hand, I've had job interviewers reject literal textbook algorithms as not possibly correct: madmath.com/2015/12/that-time-i-didnt-get-job.html – Daniel R. Collins Feb 25 '16 at 0:33
6

How do I inspire my students to work through problems on their own?

By giving students assignments that they truly work on their own, with minimal hand-holding, then assigning the appropriate grade. Some students will be upset enough with their less-than-desirable grades such that they become "inspired." The other students who fail to keep up with the pace of the course will earn the grades which truly reflects their lack of ability/skill/etc.

Sitting down with the under-performing students, and explaining that they may benefit, for example, from retaking the necessary prerequisites may be in order. It's not easy to tell a junior/senior that they should probably go back and retake a sophomore-level class, but that's life, and it's better for everyone in the long run.

Although I've not been in my current faculty position for very long, I've already seen the consequences of dumbing down the assignments, and the effect that it has on the quality of the follow-on courses, both in student capabilities and my ability to teach the things that need to be taught at the appropriate pace.

The way I see it, you can either make your assignments easier, or be tough: I have (somewhat reluctantly, at first) grown to prefer the tough route.

4

Let me give you a student's perspective on things. This may make you very sad to hear, and it may be different elsewhere but, like Kimball touched on, perhaps your students may not know how to code.

It's a sad truth that most of my peers do not know how to program basic tasks, much less more difficult concepts such as linked-lists, binary trees, etc. For most lower level programming courses a lot of the course work can be found online. When I attempt to engage my peers with group study sessions or peer programming I find that most of them seem to be content just copying source code from online and posting it as their own.

Now, professors of higher level programming courses check the source code and grade you on format, structure, readability, variable and method names, and so on; but, many professors for my lower level courses simply checked to make sure the output was correct. My peers are having a very hard time in upper level CS courses, and many of them simply do not understand what is meant by "multi-threading," "dependency injection," "listeners," "interface," "abstract class," "visitor," etc.

I fear that there will soon be a generation of programmers who simply will not know how to program and will have simply skated by in university. I'm interested to hear other people's thought and opinions on this trend. Is my college the odd-man out? Or is this a trend elsewhere as well?

  • 1
    I fear that there will soon be a generation of programmers who simply will not know how to program - I think that generation is already here, and they are reproducing. Unfortunately, based on their programming acumen, I worry their reproduction method will just be copying pointers to their own DNA rather than using an evolutionary algorithm. – Kimball Feb 25 '16 at 1:45
3

Sounds like you need to train problem solving strategies, like those described in Pólya's "How to solve it" (dated, but very relevant; problems discussed as examples are easy to grasp with minimal mathematics knowledge).

Perhaps the question How to teach perseverance? is also relevant.

3

I agree with bss. As an almost computer science grad I can attest to how many people can skate by the first few years of classes.True, the answers can be found online but another big issue is that so many people can luck into the solution. Something isn't work? Keeping changing a variable in a while loop until poof! It works. Or they get a hint from another classmate or TA or friend and after that they can piece the pieces together. Then they get to higher level classes and even if they genuinely want to succeed, they don't have that basic understanding, yet they got an A or B in the class. It's a big problem.

However, back to your question. Assuming you know they can get there (or really believe they can) and they are just doubting their abilities (something I have a terrible habit of) I would suggest the Rubber Duck Method. I'll leave the wiki link below but the gist is: you talk to someone/thing explaining what the issue is. So often just talking out loud going step by step of what is happening can result in a "ah ha!" moment. Even writing out the issue on sites like overflow can result in figuring out the solution just by taking the time to specifically lay out the problem.

I do have to say, the worst thing you can do is tell them "come on! It's easy, the answer is so clear!" They are already frustrated and annoyed they can't figure it out and telling them it's easy just discourages them even more. If it's so easy why can't I solve it? Do I really just suck at this? I'm not saying you, OP, are doing this. This is just in general for anyone else in a similar situation.

Good luck!

https://en.wikipedia.org/wiki/Rubber_duck_debugging

0

For me all inspiration comes from my internal drive for knowledge. At the age of 12 I was told, and I learned, that the best way to learn is to teach. Have your students tutor other's in their class and to ask for help. Most people believe they must do everything completely on their own or simply were taught that asking for help is weak.

Please contact me with any questions.

Gracias, Juan Weaver

  • Hi, and welcome to Academia.SE! Can you please clarify your statement a bit, as I find it quite confusing. Your request that people contact you also does not fit with the curated Q&A model of this site. – jakebeal Jul 6 '16 at 17:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.