I was recently asked to teach someone OOP and C++, to a relatively advanced level in the former and an intermediate level in the latter.

After one half of a private lesson, it became clear that the student isn't good at learning in this way. Instead, I tried to give the student some links to explanations and examples (mainly so that the student could learn the remainder of that lesson's material).

That proved to be so effective.

For the next lesson, I won't "bother" with teaching the student. I've found a satisfactory collection of websites that cover the relevant material for the lesson, but I am at a loss on how to order them (and, indeed, the curriculum in the broader sense).

This made me think of the following:

There are probably many students that learn from websites and links etc. much more effectively, as opposed to learning in a classroom (mostly self-learners)

So my question is how can a teacher (or student) find resources that both cover the material, provide example and exercise and are ordered in synergy?

Specifically, OOP and C++ each have many subjects and points of interest that are built on one another. For complex subjects/paradigms, it is much harder to find fitting resources. So the methods (for constructing a curriculum built upon resources and websites as detailed above) I am looking for should be able to tackle such a complex combination, meant for less than 5 students.

  • Note: it is very difficult to learn OO from learning C++. Even from Java or C# it is difficult. It is much easier to learn OO from Eiffel, and then to learn C++, Java and C#. Yes easier to learn all 4 with Eiffel first, than to just learn C++. This is because Eiffel is closer to the OO concept. It has a one to one relationship between the language and OO. E.g. To make an abstract/deferred class: in C++ make all constructors protected, or make at least one method pure-virtual (=0), or ...; In Eiffel put the word deferred before class. – ctrl-alt-delor May 6 at 11:30
  • 2
    @ctrl-alt-delor Well, if you want to be a language warrior, then maybe Smalltalk/Squeak is even better. But I disagree. Other languages can effectively teach OO. The reason that it is difficult in C++ is the same reason that everything is difficult in C++. It is a complex language and its object model is especially complex. It is much better suited to things like Templates in which the Standard Template Library is (or at least was) completely implemented using compiler tricks with no run-time effect at all. Objects on the stack vs on the heap is a very big deal, conceptually and operationally. – Buffy May 6 at 13:42
  • @Buffy public static void main (java and C# are not much better. well may be a lot better, but still can you explain “hello world” program without having to explain access modifiers, OO, return types / functions, main. And we have not even got started. One thing good that can be said about C++ is that it the only language (that I know of), that allows static checking of dimensions ( $f=ma$ ($N=gms^2$)), to be implemented. Oh no, is the feature that allows the Barton–Nackman trick still in the language? – ctrl-alt-delor May 6 at 15:29
  • @ctrl-alt-delor,Don't use "hello world" and don't judge a language based on trivialities. Infants learn language without everything needing to be explained. – Buffy May 6 at 15:33
  • By “hello world”, I mean the first program, there is a lot of stuff that needs explaining or ignoring. This is very unsatisfactory, for the learner or teacher. Once you have learnt OO, then it is much easier to learn the C based OO languages (Java, C++, C#). I can program all of them, and have done I am not saying that any of them are bad languages. I am only saying that they are not a good first (OO) language. – ctrl-alt-delor May 6 at 15:38

At this scale (fewer than 5 students) lectures are a poor choice of educational methodology in any case. Lectures were created as a way to scale up education for the masses. They are driven by economic considerations, not educational ones.

What you have here is precisely the scale of an Oxford University Tutorial in which a few students meet a few times a week with an expert who guides them. Students prepare work in advance. The tutor comments and guides them. He/she can suggest readings, possibly different for each student, and sets new tasks or re-work on existing tasks.

You can also investigate Inquiry Based Learning (Thanks to User skull for proposing that idea in the classroom). This is essentially the same concept as the tutorial, and emphasizes Active Learning.

Thirdly, you also have precisely the scale for a small Agile Software Development team that could be set to a building task using one week iterations that also required that they learn about the language, process, and OO principles as they go. You become both the product customer and the learning Coach. When their code could be improved, show them how in your meetings and have them update it in the next "iteration". With this idea, perhaps combined with the tutorial idea, you can encourage them to teach one another so that not everything they learn comes from you. This can also take Active Learning to the "next level."

As an undergraduate in Maths (shortly after Plato's death), I had at least one course with such a small number of students. One of our tasks was to periodically prepare a topic for presentation to the rest of the class. This might also be possible. Their "lecture" might only require a few minutes and be accompanied by a Q/A session. You can do a wrap-up yourself. This technique can also, over time, helps students overcome their natural reluctance to perform publicly. Many of them will eventually go in to careers in which such performance can be a valuable skill, so you can advance their skill/knowledge on many fronts simultaneously. For some of the students you might need to review their mini-lecture prior to their presentation, both for content and for reassurance.

The real issue is that different people have different ways of learning. You already recognize that and have made adjustments for it, but you may be able to go farther.

I'm not sure that this scales to as many as ten students, however. But some of it might for relatively advanced (i.e. experienced) students.

For a more direct answer to your question (finding resources), you can have the students assist in this. Some sort of computer mediated communication (email list, wiki,...) can be used and students can contribute helpful resources to it. You can reward them for this, also. If it is something like a wiki, you also preserve the resources for the future. You also have a handy way to toss in resources as you come across them and students will have immediate access. Students can also, perhaps, comment on the helpfulness of their peer's contributions, aiding your eventual evaluations.

  • Note that in STEM subjects, Oxbridge tutorials/supervisions build on lectures rather than standing alone. (I hear that in arts subjects it's far more common to skip lectures and just go to supervisions). – Peter Taylor May 7 at 7:39
  • @PeterTaylor. Yes, but that is still for an economic reason, not an educational one. Even Oxford has to scale up these days. I don't know what they would do with four students. With 20-100 students lectures are OK, if not very personalized. Combine them with tutorials and you add value. But if you don't have to scale up, why use those sorts of solutions? Just do what's best for your students. – Buffy May 7 at 9:56
  • I'm not saying that OP should deliver a lecture to one person. What I am saying is that Oxford tutorials are not a good example because (in STEM subjects) they exist in a context where the majority of the teaching is by lecture, which is precisely what you're saying that OP should avoid. – Peter Taylor May 7 at 10:05
  • @PeterTaylor, you are missing an important point, or I am. Are you suggesting that since Oxford has had to scale up education to teach, say, 60 students in a class in STEM subjects and so uses lectures for efficiency that someone with only 4-5 students should not use tutorial only? I'm pretty sure that the professor who teaches 60 in lecture is likely not the one that also runs 15 tutorials twice a week. Use lecture as appropriate, but STEM shouldn't be the deciding factor. Scale is. Use what is best for the students. – Buffy May 7 at 14:06
  • "Are you suggesting that since Oxford has had to scale up education to teach, say, 60 students in a class in STEM subjects and so uses lectures for efficiency that someone with only 4-5 students should not use tutorial only?" No. I'm saying that if the answer argues for using tutorial only, the example it uses as an illustration should be a situation in which the tutorial is at least predominant, and ideally the illustration would be a tutorial only example. Otherwise it's like using C# as an example of a functional language: you can write functional code in C#, but that's not the same thing – Peter Taylor May 7 at 14:52

Your Answer


By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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