For what it's worth, I have a degree in Maths, a PhD in Physics and I am develop software for research purposes, when I don't teach - so I have some experience.
The best way for a student to learn these hard technical subjects is for them to sit with their colleagues and go through group exercises, alongside a lot of hard individual work. The teacher's job is merely to help them over the hurdles they have difficulty with, and to show them the things that are truly worth learning. Although I never went through it myself, I suspect that the Oxbridge system of having indiviual tutoring sessions in small groups as the basis of the teaching is probably perfect for these purposes.