8

I teach an introductory programming course at university where 99% of my students are 18-20 years old. They are used to the old and boring education system they know from high school, so they are not precisely "motivated" about learning. And since we have to have exams (I'm with a team of teachers where most of them tend to "keep things as they are and don't make me work extra") the kids' goal is usually to pass that exam with the least effort, regardless of whether they learn to code or not.

Our teaching materials are organized so that one teacher presents the theory to students and then I explain whatever they didn't understand and present them with exercises.

As they are just beginners, they don't know enough to create cool programs yet (I'm teaching the very basics of control flows, some data storage in memory and command line programming). So I'm trying to make them motivated and would like to try flipped classroom methodologies.

However, I'm not sure about how to implement it. Let's say I make videos explaining the topics so they can dedicate my whole class to practice their coding skills. I've tried making videos before (both short and longer ones) and about 5% of the students watch them, as they feel they don't have time to waste given that there are so many other exams they need to pass (other subjects). Also, since this is about programming, there isn't much to be discussed, it's like math: you sit down and get your hands onto code.

How can I best bring in any new motivational tools like flipping my classroom?

  • 17
    This question would be interesting at cseducators.stackexchange.com, probably more so than here. – Buffy Aug 11 '18 at 15:56
  • 8
    18-20 year olds are adults, not kids. Not merely pedantic, the same would apply to a 45 year old returning to education having only experienced the old and boring education system they knew from high school – Stumbler Aug 11 '18 at 20:03
  • 1
    @Stumbler, exactly right. – Buffy Aug 12 '18 at 0:27
  • 1
    It would, but usually 45 year-olds go to university only if they truly wish to learn. At least here, where university is free, lots of kids go just to see what it's like, or to avoid having to work, or because they think that computer science will turn them into "hackers" :P – Floella Aug 12 '18 at 22:28
13

The underlying idea of a flipped classroom is that you use face to face time for things that require it and nothing else. You don't "present" or "cover" material when face to face. This requires a number of things, but it will probably require buy-in from your colleagues as well.

I used to teach an entire degree program with these ideas. As you note, you need a way to keep the students engaged in the course when not face to face. There are a number of ideas for that, some of which require you to change work habits a bit.

It is possible to make the course "round the clock" so that a student can always get a question answered. One vehicle for this is a class wide email list to which everyone, teachers and students, is subscribed. People submit questions to the list and other people, including students, answer the questions. Teachers need to at least monitor to make sure that incorrect information isn't passed around. When I did it, no questions were off limits as long as they were course related. Code couldn't be submitted to the list under our rules, however. I've also used wiki software to the same end, with the advantage that wiki posts can be preserved for future offerings of the course.

To do the above, however, requires that you teach the students that their learning is a group and cooperative effort, not something done in isolation. The core of this idea is that the facts and skills don't flow from teacher to student, but all around the group.

For the content of the course, you can use readings (preferably short) and videos (also short). Don't rely on just video, however, as it has a down side that the audio quality can disadvantage certain students. And if the video is more than a couple of minutes it is easy to lose track an/or miss some things.

But you also need to assure, at least a bit, that students actually do what you expect when not face to face. For this you can include a few fairly easy questions that students must submit to you as their "admission ticket" to the next face to face. You don't need to have a "pop quiz" in the classroom for this, but just a hand in "homework."

You also need to run the course expecting that, at least at the beginning, students won't do the readings very faithfully. So expect a lot of questions, perhaps on the mailing list, to which the answer is "go watch video 83".

The face to face "classroom" sessions should also be cooperative. Teams are good. Pair programming is one of the best ways for beginners to learn to program, but you have to use it properly and faithfully. It isn't just one person programming and one watching. There are other questions on CSEducators that have resulted in detailed descriptions of Pairing. Two people participate in creating a program, but in slightly different ways, with roles switching frequently (minutes). Test first development also integrates well with pairing.

If you use a cooperative learning environment then grading is an issue that you can solve with peer assessment. There are ways to make this valid and non-threatening, largely by making it positive. Partners and team members detail both their own contributions and the positive contributions of peers. You can ask "who were the top contributors and why?" for example. You can ask for the main contribution of yourself and your partner to a pair project.

Note also that short quick questions can be answered on the mailing list. An advantage of this is that every student sees any student's question as well as the answer. During face to face sessions you can also have longer discussion, say about testing strategy or the difference between for and while if many are confused. But try to spend as little time as possible on such low level things, deferring them to the readings/videos and the mailing list. Use the face time for active, rather than passive endeavors.


Don't lose track of the fact that people learn by repetition and reinforcement. In a normal classroom that is usually provided via homework. With a flipped classroom that flips also. The little quizzes (tickets to play) are a minor part of the learning, though they should be a (small) part of grading. The repetition and reinforcement comes in the face session.

  • A great answer, by the way. – onurcanbektas Aug 11 '18 at 17:08
  • 4
    I'd also add a warning that instructor facilitation in the classroom is a skill all in itself. Even (especially?) if you are an all-star lecturer on the material, you will need to develop the skills to facilitate a classroom full of learners. For this reason, I tend not to conduct flipped classrooms for sections with more than about 20 students; I feel I am unable to facilitate in a meaningful way when there are more than 10 groups of two. – HermitianCrustacean Aug 11 '18 at 23:29
  • 2
    @HermitianCrustacean, I wouldn't try it with hundreds. But when students pair, the need for intervention goes down a lot. If you had 20 individuals at computers then, when you work with one, several others with questions normally just wait for you, doing nothing. A pair can work out most of its issues itself. Moreover, if you encourage pairs to ask adjacent pairs, not just yourself, you can further ease the burden. You then need to avoid chaos, of course. But 20 or so seems about right. But the individuals in a pair need to learn to engage with each other. But that is true anyway. – Buffy Aug 11 '18 at 23:34
5

I took a flipped programming course in R last semester. We had only one class of three hours long per week. before the class, we were required to attend a certain DataCamp.com courses and finish an assignment based on the courses. During the class time, we were required to work in teams on solving much complicated projects.

Also using github to communicate between teams was really interning and engaging.

In summary, working in teams, having account on github and being able to see how much code you are producing everyday was really motivating.

  • 2
    Github I think would be a good tool when the instructor grades the code that is produced by the teams. – onurcanbektas Aug 11 '18 at 17:08
1

My technique for getting students to watch the videos is to assign them to watch AND take notes on the videos. I then have a quick open-notes quiz on the video the next class period. I try to make quizzes be pretty close or sometimes identical to the video material so that the students who do watch and take notes get a good benefit.

1

Note: answering this from your question of first-year students, but this also works for graduate courses (just add complexity).

From my own experience with this age/knowledge level (I'll focus on web here) the first thing I do is find out "What do my students want to do with their knowledge?"

I use a survey during the first class, so they are less influenced by their peers, then use their answer to determine the projects used in a flipped classroom. I learn best with templates and checklists, so:


Before class (lesson)

Require all students to watch a video, stream, or other presentation and/or complete a reading.

  • The reading can be a textbook or even the docs (Python docs are awesome so I try to introduce them early and often with this group).
  • For videos, make it short (if it is too long try and split the videos)

  • Make sure there is a formative assessment based on these lessons. I know one class I had used a weekly required, meaning graded, discussion board post and response (had to post code and review classmate) to assess so it doesn't have to be a quiz.


In class (application)

Structure these based on what students answered either by separating them into groups based on their goals (this can be some extra work coming up with separate project and unlikely with beginner programmers but has a great engagement payoff so keep it in mind for advance groups) or using projects which mimic what they will want to do. Some examples of possible projects:

  • Most students state they want to "break into web development, social media, or the cloud".

Since they're beginning students I would not recommend having them load up a JS framework, full Django, or a full ASP.Net website. The focus should be on introductory topics (with more advance students though...).

  • Move through steps like this with student's goal of having a personal website ready to deploy by the end of the year (your's of covering all major topics). Start them off with a template for creating the website so they can get right to coding (unless HTML is part of course):
    1. Build profile page using variables to store information
    2. Build social game using loops and conditionals
    3. Build survey to teach console based input/output then have other students take and store data in data structures, classes, &/or files
    4. Build quiz game from or complete and display basic analysis (averages, means, most seen, least seen, etc) of data structures/classes/files

Other ideas include:

"I want to be a data scientist", have them work on challenges from Project Euler or ones you've developed from them (many of the older ones have answers/code online but still great way to learn and easy to set goal, like finish first 200) or build projects around "biodata" or "sound" (something where it is easy to generate data which requires text process & mathematical analysis). I've used both of these when tutoring math majors and peers who are just learning quantitative research methods and found they work well.

"I want to get an internship", use github search or other open source projects focused on beginners to build challenges (trouble tickets) that students have to solve. Remind them that this is great for a resume and will likely be what they have to work on during 1st internship or job. For advance students you can actually have them solve bugs on github.


Final thoughts: Doing a project which builds on itself, gives students a chance to work on computational and algorithmic thinking as they are actually building something (completing design and engineering processes). Have students reflect on their own code or progress throughout the course (improving some code, changing a design based on new knowledge, or just state what they have learned helps the student understand what they've learned and lets you look for gaps). Repetition is what builds knowledge and skill so reflecting makes students look back at (repeat) old skills and then use (repeating again) their new skills.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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