About half my class in my programming classes didn't do very well. It's not easy concepts to learn, because not only are you learning structure, you're learning syntax...then you gotta learn the libraries once you figure that out.
I find learning the libraries and what I can do the hardest, but it's not difficult. Microsoft Press puts out a Language Resource for .NET, but it's crap. What I'd like is a break down and list of the .net libraries so I easily reference between languages if needbe.
The Libraries are very difficult to learn, but what I do is practice writing code using those libraries. It's time consuming, cumbersome, but it really teaches me to use those libraries. When I took Programmin I and II, I never once struggled with syntax, I found that if the professor explains it well enough, I didn't have any problems. What I find weird is that in a class of 100, we went down to 30. The irony is that those classes are weeder courses, when I got to Design of Algorithms, that's where a class of 30 went down to 5 people, I held the third highest grade in that class out of 5 people.
But man, oh, man I miss the days of Programming I/II because it was so easy.