I was asked to tutor a first year engineering student in programming as she was failing. I ended up spending most of the time helping her conceptualize the problem and breaking it down into steps. Once she learnt that, she could manage the syntax aspects of C++. She ended up with a grade in the 60s which isn't bad considering she had a grade in the low 40s after the midterm.
When I was a TA for thermodynamics, I noticed that we would get a bimodal distribution on the midterm exam. Thermodynamics isn't hard once you understand it. We'd get the people who didn't understand with grades in the 40s, but the people who did had grades in the 70s and 80s. The prof said that was pretty common. The objective was to get as many people from the lower curve to the upper curve by the end of the term. You'd typically have around 3 to 5 of a class of 80 fail by the end. Those were the people who just didn't get it. I'm sure that thermo is one of many courses like this.