Teachers are sometimes called upon to teach something with which they have no experience. Don't laugh. Doctoral level education is often exactly like this. The student's advisor may have no background in the student's topic, but must still provide effective guidance.

At the other end, teachers are often called upon to teach something like APCS-A when they don't themselves even know Java and have little, if any, experience in Object-Oriented Programming. How can they proceed and be effective. I don't think that "Keeping one day ahead of the students" is any sort of answer to this and will likely leave the students frustrated and confused.

If you are in this situation, I assume that the obvious solution (DON'T) isn't available to you. Similarly "Fake it 'til you make it" isn't a solution since the future of your students is at risk.

It is possible, of course, to borrow a syllabus and book list from some other teacher, but the deeper issue is about how you respond to student questions and concerns when your own knowledge doesn't provide an answer.

What would you do in a situation in which you know very little, to provide effective learning among your students? Past successful experiences would be especially welcomed. So would caveats.

Here are two links that speak to some of the things in this question:


  • 5
    $\begingroup$ "How do you teach something when you don't know it yourself?" .... "badly" ? (I just wanted to tell a joke). But joke aside, the best teachers imo are those who have enough knowledge about the subject to be able to "distill" the important things from it, and to give enough different point of views on it to help those who may not understand the first few tries to explain it. This requires "deep enough" knowledge of the subject matter. $\endgroup$ Commented Feb 28, 2018 at 9:22
  • 3
    $\begingroup$ This is the fundamental condition of teaching. There are always class members who get it more than you do. Your task, life-long, is to accept that, cope with that, and still provide teaching value, even to those students. $\endgroup$
    – user207421
    Commented Feb 28, 2018 at 9:48
  • $\begingroup$ Related: academia.stackexchange.com/questions/86953/… $\endgroup$
    – Pere
    Commented Feb 28, 2018 at 10:14
  • $\begingroup$ Did you consider giving your students an opportunity? As students, we presented quite a few lectures ourselves. This is especially powerful with hands-on lectures. Especially with CS, you're pretty likely to find a couple students that are already pretty good at things you're lacking in :) $\endgroup$
    – Luaan
    Commented Mar 2, 2018 at 8:45
  • $\begingroup$ When I have had very small class, or small part of learning, then I model how to learn. We all learn together. $\endgroup$ Commented Mar 2, 2018 at 13:51

9 Answers 9


This is a vital question, perhaps the vital question, for a CS educator to deal with, because technologies will keep pushing us. There is no end to this particular merry-go-round.

I have been stuck, non-stop, in exactly this situation, for the last four years in a high school for gifted students, and I can attest that it is physically, mentally, and emotionally exhausting. It can push you to the edge of a nervous breakdown. It can also be incredibly rewarding, both for you and for the students.

I claim no special wisdom, but here are some of the techniques I've been using. I hope will be of help to other teachers gazing down the barrel of a similar gun at some point in their career:

  1. Don't be dishonest with your students or try to hide your lack of background. There will be moments that you come up short, and your honesty and forthrightness from the start will help to mitigate any loss of trust that students might feel when this happens.

  2. Find several great resources. Do not depend on one resource to give you the sort of thorough understanding you need to do this well. A strong textbook is great, if there is one to be found, and can help you both understand the material and sequence your lessons. However, single-source preparation leads to two problems: (a) your understanding will be brittle, and you will be left with only one way to explain a concept when students are lost, and (b) it will be very difficult to deal with questions, particularly from your brighter students, that go off-script and try to connect with outside ideas.

    In my best situations, I will have a textbook, a tutorial series (such as might be found on YouTube or a website somewhere), some exercises to work though, and a tutor to help me when I get stuck. SE can, itself, act as the last two of these for CS topics in a pinch, though it is not as good of a tutor as an actual tutor, who will build a dialogue and set of understandings with you over time.

  3. Use the lesson planning itself as your final preparation, in which you summarize the key understandings and design exercises to help your students fill in the dots. Over-prepare your lessons, because your instincts for how long the material will actually take to cover are not yet honed.

    (I once prepared what I thought would be 3 lectures, and ended up delivering it as 1 lecture because things went extremely smoothly. At the end of the hour, ,I arrived at the end of literally all of the material I had prepared. The students enthusiastically told me that the lesson had made a lot of sense. "Great," I thought, "I'm glad that made sense to the students, but what in the world am I going to do tomorrow??")

  4. When students ask interesting, tangential questions, don't be afraid to reply by asking if they would be willing to research it a little and report back to the class next time. It is important that not every student question become a major research assignment for you. Instead, choose your battles carefully. Burnout is a real danger, and your time is valuable. You have made a pact to help guide students through the main topic; don't get caught up in too many tangents on your first pass.

  5. If you're really caught for time, you can simply present learning materials and ask students to work together to try to make sense of it. Be careful not to do this too often, because while this technique can work reasonably well for your high-fliers, it does not leave you in a position to guide and help the students who really struggle.

  6. Accept that this is an imperfect business. You will mess up from time to time. You will make mistakes. You will arrive at a lecture feeling prepared, receive a student question, and suddenly realize that you don't understand something that you thought you did. You may even discover that something you taught was outright wrong. Be prepared to go back to the class and revisit an idea if you screw up. But also, be prepared to forgive yourself for some amount of weakness. You are an imperfect being trying to build a learning opportunity for your students, and all you can do is try your best.

  • 15
    $\begingroup$ I would add to this "Leverage what your students know that you don't". A few years back, my daughter's high school was brand new, and setting up their video and media program. The teacher was a good teacher but a complete novice in the video production world. My daughter had been working on a live webcast team since 7th grade, and had risen to the level of technical director by 11th grade. She pretty much set up the entire program, freeing the teacher to learn and take care of non-technical concerns like budgets and school politics. $\endgroup$
    – pojo-guy
    Commented Feb 26, 2018 at 19:14
  • 1
    $\begingroup$ Ben you said everything I would have said. Great answer. I'll add two things: if teaching code, be sure to write all exercises yourself before you assign them to students (or even concurrently in class - and I do this even if I "know" the language); use a timer to give yourself five or even 10 minutes during class when you need it to find your bearings or wrap your mind about what you're going to do next. Tell your students that if they hit the wall while your timer is set they should investigate their problem independently (or get help from others) and that you'll be with them shortly. $\endgroup$
    – Java Jive
    Commented Feb 27, 2018 at 14:21
  • 1
    $\begingroup$ @JudyOakley Partial answers are considered answers here on SE, and you have two great pieces there. I'm particularly interested in your last bit; could you flesh that out? I don't quite understand what you mean, but it gives me a nagging sensation that there's a trick I could start enacting right away to make life better for me and my students. $\endgroup$
    – Ben I.
    Commented Feb 27, 2018 at 16:25
  • 2
    $\begingroup$ in a high school for gifted students ... are you Charles Xavier? $\endgroup$ Commented Mar 1, 2018 at 14:53
  • 10
    $\begingroup$ @Hankrecords Yes, yes I am. $\endgroup$
    – Ben I.
    Commented Mar 1, 2018 at 16:27

There is one strategy, at least, that often works, especially with older and more experienced students. Using it in Secondary School would, perhaps, be too risky. It is also probably not indicated for core courses except when no alternative can be found.

The underlying principle is that you should not lie to your students or present yourself as other than you are. In other words, don't fake it. On the other hand, what you are is a scholar: someone who can learn. Someone who knows how to learn.

The basic technique is to run the class like a learning lab in which everyone contributes ideas constantly. There is more discussion and almost no "lecture" unless you can get the students to give mini-lectures on cool things they have discovered about the topic. It is teamwork in the extreme with yourself just a team member.

EXCEPT, that your main job is to show them how to learn: research, reading, experimentation, trial and error. You don't supply a lot of course content but you do supply learning strategies and feedback on the things that the students learn.

A slightly less important task is to guide the students away from pure chaos. You will need to get them to focus on things in a reasonable order, delaying things that seem deeper or less connected to the main ideas being presented.

To ease your comfort level, try to find a few recognized experts in the topic at hand. This doesn't necessarily mean text-book authors, unfortunately. You might be surprised that some of them are willing to give you guidance (pointers to papers, etc) that will help you guide the class.

One trick is to have daily summaries produced, perhaps by yourself, and perhaps by students, rotating this task and making the summaries available to all: What are the two or three most important things we discovered today.

If the course is about programming you can organize a very agile team to try to produce something interesting within the framework of the course. If it is about theory you can try to teach students how to find the crux of the proof of a theorem (for example).

Note that this is exactly what you are forced to do if you are teaching a topic that is state-of-the-art, edge-of-the-known-world stuff. Nobody knows how to teach it methodically, so try to develop the method yourselves.

Another use of this is when a group of students forms a Learning Club to explore some topic. The group leader may know a bit more than the others and can try to guide them, but it is a learning-for-all situation.

Learning how to learn is likely more important than any specific topic. Without that you can never leave your guides behind nor can you outshine your teachers. Older students have, hopefully, already experienced learning and, hopefully, have a few learning strategies developed already so it isn't as big a task as teaching novices in a field in which they have no preparation at all.

I note that there was a time, around 1980, I think, at which you could earn a Doctorate from Carnegie Mellon University in CS, but could not earn an undergraduate degree. The reasoning behind that was that "there was insufficient academic content" at the time in CS, in the faculty's judgement. The doctoral students were, of course, developing that content that could later filter down to a wider audience.

  • 4
    $\begingroup$ With respect to your aside about undergraduate degrees in CS, the first taught course in CS was a post-graduate Diploma at the University of Cambridge in 1953; Cambridge introduced an undergraduate "Part II" in 1970 as the third year of a science degree; expanded it to two years in 1978 (following one year of maths or science); and to "three" years (really 2.5, because half of the first year was still science) in 1989. Even today they don't have a full three year course of just CS, although it's up to 2.75 years. Source: cl.cam.ac.uk/downloads/books/CambridgeComputing_Ahmed.pdf $\endgroup$ Commented Feb 27, 2018 at 13:06
  • 2
    $\begingroup$ "Learning how to learn is likely more important than any specific topic." This. $\endgroup$ Commented Feb 28, 2018 at 9:17
  1. All possible questions about an assignment should have an answer if it would block students from finishing it if left unanswered. Questions which are vital for assignments that are not answered is the death of the assignment.

  2. Limit your scope further. If you don't know a subject, you will not be able to fill in the holes for any edge cases without sufficient understanding. Therefore, don't teach what you cannot explain sufficiently enough to have them do the assignment.

  3. Understand learning dependencies. A common mistake is to assume students know something when they don't. You can use a simple concept map to do this. One of my favorite tools to do this is to use GraphViz, a suite of programs to help create node-edge graphs. A visualization can also be very helpful to do this.

Here is an example of a .dot file that can be converted using GraphViz's dot program into the following image:

digraph G {
    label="Basic C Programming";

    n0 [label="Binary Values"]
    n1 [label="Hello World"]
    n2 [label="Basic Data Types (int, float, char)"]
    n3 [label="Pointers"]
    n4 [label="Arrays"]
    n5 [label="ASCII Encoding"]
    n6 [label="Strings"]

    n0 -> n5
    n2 -> n1
    n2 -> n3
    n2 -> n4
    n5 -> n6
    n3 -> n6

    n7 [label="Conditionals"]
    n8 [label="Functions"]
    n9 [label="Structures"]

    n7 -> n8

    n10 [label="While Loop"]
    n11 [label="For Loop"]
    n12 [label="Do While Loop"]
    n13 [label="Switch"]

    n10 -> n11
    n10 -> n12
    n7 -> n13

A basic, unfinished concept map for basic C programming concepts

  1. Zero-bug tolerance in assignments and code. How can students trust you if you don't have a solution that compiles?

I am currently a high school student takes APCS, as well as several other IT related courses from an instructor who has very little understanding of CS concepts as a whole, and I greatly appreciate him for essentially sponsoring these classes. If you are in this situation and interested in contacting someone with experience doing this, I'd be happy to have him get in touch with you. He started in the navy doing electrical work, and then transitioned into being an officer relatively early on, so most of his experience is irrelevant to CS and IT.

What he does is:

  • Organize the business aspects of creating courses. Currently, we have 8 IT courses, each ending with getting either a Comptia or MTA certification, that he has been able to negotiate funding for them from both grants and connections he has from the military. Without his ability to get funding, I would have nowhere near the job opportunities I am presented with now, nor the opportunity to learn as much as I have.

  • Finds people he knows who do have in depth experience with CS. One of his friends is a full time software engineer at a large corporation, and my teacher convinced him to get certified to teach and his friend is now teaching several CS courses accredited by our local community college at my high school.

  • Teaches using good, online materials. He never lectures during class, as that would be a waste of time for all involved parties. Instead, he treats the class periods as blocks of time for students to research/learn from coursework made by people more knowledgeable. This works best in classes with students interested in the course material, however most taking advanced CS courses are and this has not been an especially large issue.

So, to recap, what he does is uses his skills and network to find others who are knowledgeable to teach (be it online coursework or people he knows), and create opportunities for the students that otherwise would not have existed. I don't fault him for not knowing the answer to most of the questions in my classes, as I would't have any way of taking the classes without him. Simply learn as much as you can, and attempt to facilitate a good learning environment for those who are interested in being involved.

  • 5
    $\begingroup$ Good on you for even noticing the fact that he's creating opportunities. Often HS students don't take the time to think about the larger context of what their teachers are really doing for them. I don't fault them for that; they're young! But in my experience, the kids who do notice are pretty special kids. :) $\endgroup$
    – Ben I.
    Commented Feb 28, 2018 at 1:32
  • 2
    $\begingroup$ Also, welcome to Computer Science Educators. Having students here is quite helpful. Hope you can find other questions where your perspective can be helpful. Thank for joining the site. $\endgroup$ Commented Feb 28, 2018 at 2:27

The effectiveness varies from teacher to teacher; but generally, it works well. (And can be optimized)

The method I describe has a few stages, each dependent on the previous ones.
To teach something you don't know, share this method with the students (after you did a part of it, preferably after reaching the third part). Learn it at a quick pace, and let them see how you learn it.

Two things are achieved in that way: You can answer their questions, and they are exposed to new methods of learning.


If possible, sacrifice a few sleepless nights (not one after the other, mind you) to dive into the material and learn it. Read it, reread it, and then again.

If the night is needed for other things, then allocate time during the day. As I've said, every stage is important.

If you do sacrifice the night, then bear in mind:
There is indication that learnt material doesn't actually "sit well" in the mind if one hasn't "slept on it" (keeping it simple: during sleep, the brain makes new connections in the brain, and that's how we learn).
So after rushing through a subject, you should let that subject cool down.

That last part is the semi-second stage. It usually happens by default, but (speaking from experience here) one might get carried away, so...


After reading the material for a subject, do what your students would do if you had known the subject. Give yourself exercises. At first, find online ones. For APCS-A, I'm pretty sure there are exercises available somewhere on the internet. As is with everything, practice. Start simple with online things, and then:

After you feel sufficiently practiced with the material for a subject, start

creating your own exercises.

This is the big one. This is the main point. This is my answer.

I cannot emphasize that more (I suppose I could make it italic...). This part is, by far, the most important. This is far from saying that one can "skip" to it. I've tried, it doesn't work if you don't do the previous parts.

For a better learning curve, try to think up of a division of a subject (for example, dividing OOP to sub-subjects in a logical). Create exercises for yourself for each division of the subject. Try to make both practical and theoretical questions.

The latter being questions of pure knowledge, and the former - questions of applying said knowledge.

Track the difficulty of the various questions in each sub-subject.

These stages will come in handy when you teach others. You'll have a well ordered collection of exercises, fully covering the material, in varying difficulties.

I have done what I have described on multiple occasions. This works for self learning (Not so surprising ;)).

The main point is:

Learn it, as you would let your students learn it

Now, as for answering students' questions:

If you don't know the answer to a student's question, then say so. But also say something like

I'll check and get back to you on that

And then treat the question like one of the theoretical knowledge exercises (mentioned above). Usually, the theoretical knowledge can be found on the spot by searching google. There's no shame to let students see how you find information.

When you get back to the student with the answer, show the student how you found it, detailing how you learnt it. This is both useful for you (to make the knowledge stick in your head), and useful for the student.

  • $\begingroup$ -1 for using Firstly, Thirdly instead of First, Second, ... and for jumping from Firstly to Thirdly. Sorry, it's a pet peeve of mine $\endgroup$ Commented Feb 27, 2018 at 17:19
  • $\begingroup$ @QuoraFeans If you read carefully, I have a "secondly". Doesn't have a huge header, but I do specify that there is a "second stage"... $\endgroup$
    – ItamarG3
    Commented Feb 27, 2018 at 17:33
  • 1
    $\begingroup$ This. This is really key, and the other answers are helpful as well. As a physician, I have had to teach medical students, residents, and PAs/CRNPs. Imagine the harm I could cause trying to bluff my way through teaching them about an illness. You either know it or you don't; when you don't, you say, I'll get back to you about that, and then read about it yourself until you understand it. It's no different for any subject at any level; the students deserve to learn. $\endgroup$ Commented Mar 1, 2018 at 1:50

One thing I think is important to acknowledge is the advantage you have in having learned something recently before teaching it. Mainly (these are related):

1) It's easier for you to distinguish "easy" and "tricky" concepts

When you've had a skill/background knowledge/understanding of a concept for a long time, the memory of learning it often fades, in my experience. It's harder to recognize what takes two minutes to understand, and what takes hours/days/several different methods of explanation.

2) You can guess where students will get stuck and what questions they will have

This is probably (hopefully) because you've just gotten stuck in those same spots, and asked yourself those same questions. In my experience, formulating a good answer for myself, or helping myself get over a particular hurdle has been helpful for my students, who often find the same explanation I gave myself illuminating.

3) A student's question that you can't answer immediately can be a great learning experience

It's ok (in my experience) to say that you don't know. Like other answerers here (ItamarG3), I say "I will get back to you"; in a few minutes, by email, or in the next lesson; and if I can, give a best guess at an answer. In the worst case scenario, someone has called you out on not being fully prepared, and you need to scramble for an answer. In the best case, it's a question that goes beyond the course material, and an opportunity for you both, and possibly the rest of the class, to learn something new (and promote learning in general). In my experience, students usually appear proud (and they should be) that they've thought about something in a way that I haven't before. You can't be expected to be the world expert in everything that you teach, and even if you're already familiar with a topic there will always be questions that you don't know the answer to.

I would also note that learning as (or slightly before) you teach works much better if you have (as pointed out in other answers)

a) A prepared syllabus/some homework questions In particular, it's difficult to provide the conceptual overview required for a syllabus until after you've learned much of the material.

b) Someone(s) you can ask for help. We all have questions that we can't seem to answer on our own... If you need a syllabus, hopefully this same person can help you here as well.

c) Extra time and energy to learn. In particular, you want to understand your material more deeply than you expect your students to. This means that, even if you learn quickly or already have some knowledge of the field, you will probably need a reasonable amount of time for self-study.

  • $\begingroup$ Those are good additions. Welcome to Computer Science Educators! $\endgroup$
    – Ben I.
    Commented Feb 27, 2018 at 11:39
  • $\begingroup$ Your profile suggests you aren't registered here. I hope you do register and come back often. $\endgroup$
    – Buffy
    Commented Feb 27, 2018 at 12:34

Fleshing out something I mentioned in a comment to another answer - a very simple thing I have done in the past is to set a timer for myself in class when I feel things have gone south, for whatever reason, to give myself time to regroup and possibly even change direction. Setting the timer forces me to admit that things are not going the way I expected (to myself AND my students) and focus on determining what to do next. It may just be three to five minutes - but do it, and make yourself sit down and actually think. You will be surprised at what you might come up with, either based on plans you already have for another day, or something you may have already covered that you need to reinforce.

Our role is, yes, to teach students our content, but more importantly, it is to teach them to be lifelong learners. I can model that by learning alongside them, even with a subject I think I "know". I can also show them that I make mistakes and missteps - but that I will make a correction and keep going.

  • $\begingroup$ Good point. Trying to brazen your way out of a bad situation is almost always noticed by students. The teacher's reputation will be diminished. Life is much easier when you don't have to insist that you are perfect. $\endgroup$
    – Buffy
    Commented Feb 28, 2018 at 1:03

You start by explaining how CS is different.

One thing that is not going to be immediately apparent to high school or even university students is how young CS is as a discipline compared to other subjects. Or rather the ramifications: they probably won't realize how different that is from the other subjects they get in the core curriculum even as they're memorizing important dates. Every subject has a forefront of changing knowledge (one that high school and undergraduates basically never see) but for the most part that's all CS has.

For every quicksort or lambda calculus there's a hundred things that have become common place in the lifetime of your students. So unlike math, science, literature, etc. which have centuries if not millenia in their bodies of knowledge CS has decades at best.

So you explain that, you explain that over the course of their careers as computer scientists or software engineers they will almost certainly constantly have to learn new concepts/tools/techniques, and that you are doing that right now.

And that's actually quite exciting even if it makes for some conundrums like yours: how many fields can you be in where you, Joe Blow/Jane Doe programmer, can possibly make or at least contribute to a meaningful advancement?


There are lots of great answers here.

I am adding this answer to preserve it outside of a comment.

If you are new and learning the course material yourself try to apply more structure to the content to assist yourself and your students. A good tool for this is to develop scaffolding for your exercises that your students work within. This will help contain the material and limit the types of issues that you will need to prepare for.

I have seen that one of the biggest challenges for new CS teachers is "debugging" student code. This can be time intensive and distracting. Scaffolding can help immensely in this area.

Another technique is working backward on an exercise. Provide answers that are flawed in some manner and have them correct them. This kind of backtracking can avoid the many paths students can take if they were to move forward through some material.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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