39

The problem, in my view, is a misplaced assumption that students should never see one another's code and that seeing it would somehow or other "pollute" the student's mind in some way or make grading invalid. A clear solution, provided that you can give up that assumption, is to have the students work in pairs in the tutorial, giving help and advice to one ...


37

This is really a separate approach from my first answer, which has received some push-back. It's worth noting that many of these loners are simply students who are substantially ahead of the curve. One way to really want to engage such students in pair programming is to pair them with each other. This will create something of a Dream Team. Give them the ...


32

Rubber Duck Debugging. A few years ago we bought a bunch of cheap rubber ducks. Students with questions have two options. They can either ask their neighbor or explain to the duck what they're trying to do. If the duck didn't help, then they can ask me. I've moved to a different school since then and haven't bought any ducks. I really need to buy some ...


19

I suggest 2 possibilities: Talk to them. Explain that at some point, they won't be able to rely on just being able to code well. For AI theory, at some point the algorithms are dependent on so many parameters, making it impossible to write working code without knowing what each parameter does. (A simple example for this is neural networks. The simple ones ...


19

Smaller Chunks: Students should be working in smaller chunks of code. They need to write as small a chunk as possible (one function or even one line of code), then compile, run, and test that. This process should be introduced as early as possible and enforced as much as possible- for the sake of the sanity of everybody involved. Students should not be ...


13

It sounds like these students may be perfectly suited to a wide range of roles in a professional environment, just not the most glamorous or 'obvious' jobs. Ultimately, everyone finds their level and a good team often has a mix. Given that these students are close enough to employment they should already have started thinking about what sort of jobs they are ...


12

Just like any field, the theoretical aspects of it can be inaccessible and a bit dry, I would say especially to kids this age. AI, automata, and computational theory are often college masters level courses, indicating that not only do you need some years of background in the mechanics in order to appreciate the theory, but you just need to be older and more ...


11

I might push back against the core idea here, and this gets to the idea of the central mission of the course of study. Within my course, teamwork is not a primary goal upon which I will assess my students. This is not to say that I don't value it. I think that there is great value in paired programming, but I approach this only as a salesman, not as a ...


10

Don't try to handle them. Give them exceedingly hard problem that you think cannot be solved without understanding the theory. When they come back to you, unable to solve the problem, then explain how theory can make it easy to solve. On the other hand, if they come back, able to solve it without having to understand the theory then you would've learned ...


8

Performance is definitely a good angle, in addition to some of the great answers here discussing e.g. regular expressions as a way to deal with automata. It's a way of relating the more practical programming to the theory. For example, you could start by presenting the pseudo-code for a naive approach to solving something the assignment problem (you can do ...


8

Does a good car mechanic have the ability and talent to forge a good wrench? Does a good doctor have the ability to build an X-ray machine? Computer coding is like any other discipline. There are objects you are going to need for a project that make use of an advanced theory (such as sorting theory) and you are going to know right off that you could spend ...


8

(You didn't say what ages your students are, so this answer is necessarily a little nonspecific. There is also an article here that you may find helpful.) First and foremost: don't expect total victory in this regard. Your students ask you because it is frustrating to be stuck, and it is perfectly natural to try to find the quickest path out of ...


7

One approach that seems to work relatively well with a course I helped TA was to have students work on several homework assignments that put the theory they were learning to practical use. For example... Have students implement their own regular expressions engine and make a simplified version of grep at the end of your unit on finite automata. (Depending ...


7

As thesecretmaster once intoned, "Just from my experience as a student, computer out == doing whatever you want." Kids won't learn from you if they won't give you their attention. And a quick glance into a restaurant, with faces aglow from phone screens, is enough to demonstrate that prioritizing attention to a person instead of a screen is hard for ...


7

Ask them to switch their screens off. They don't like it if you do it too often or for too long but it's surprisingly effective, saves you having to repeat yourself unnecessarily and forces you to try to make your instructions clear and concise. If you can't see their screens you can always tell by the glare from their screens on their faces who hasn't ...


6

I let the kids cut and paste code but with the following caveats: They must cite the source (be it a classmate, another student or a site like StackOverflow) There has to be enough of their project that is their own code to show mastery of whatever the assignment's all about At times, I encourage them to use others code (and libraries) to enhance their ...


5

I semi jokingly tell my students at the beginning of the year they can play any game they want on the computers, as long as they write it first. It at least gets a laugh. For me it takes two things. One, I need to be able to see their screens. Given, this is probably much easier with school provided devices. When I moved into the classroom I'm in all of ...


5

As I am not a teacher, I can't tell you any experiences, so I'll just give my thoughs on how I would deal with such a situation. I know this is not exactly what you asked for, but I hope it can be at least partially helpful. I think the situation consists of two perspectives: First of all, how you feel; secondly, how you think the students should feel and ...


5

There is another sort of rabbit hole, one that your best students can fall in to. I once had a situation in which students were programming with a certain library that provided a simulation - a virtual world. They had certain exercises designed to teach specific thought processes; think recursion, or design patterns, but it could be lots of things. Some of ...


5

I love to make jokes and allusions. Here are some examples of ways I handle my increasing age difference from my students: Explaining the reference When describing how assembly language programmers compete to shave instructions off an operation (such as calculating absolute value), I tell students about the old game show Name That Tune and sometimes even ...


5

It sounds like the students were not really ready for these assignments in the first place. If students are coming with runtime errors (instead of logic errors), then they are not testing their code well as they write. Helping students debug their code is a band-aid on the larger problem that the students do not know how to organize and test their code. My ...


5

You need to start early You can not expect them to just one day, stand up in front of the class. You need to prepare them for it. Encourage mistakes Encourage students to take risks. Give permission to make mistakes, but not just permission, make it a goal. At the start of term, when I set out the class rules. I have a few don'ts. I also have some dos: ...


5

I have experience managing a lab for student-use. We utilized Deep Freeze. I was not responsible for configuring it, but based on what you say you would like to have in terms of OS management, I believe it would check those boxes. We could set specific times for booting up and shutting down. Additionally, we could restore a non-corrupt image each day if ...


5

What you have described is about half of what is known as a flipped classroom. This concept has been explored in other questions here and at the Academia forum. The idea is that instead of lecturing, face to face time is filled with activities that can only be done face to face and the students are given "assignments" to read or explore video and other ...


4

Point of view from someone like them I'm someone who's similar to the students you're describing, so I'd like to share my views on this topic. I'm slightly older, so I have more experience bruteforcing problems that could be solved more quickly with a faster algorithm. Through my years of education, I got very bored with learning things that I thought ...


4

I think it is fine, as long as it isn't an essential part. It saves time, and the students can learn from professionals, and can learn new ways of doing something that they never would have thought of. Also, it helps you become a more efficient coder, and if you borrow someone else's functions that is more efficient it makes the rest of your program faster, ...


4

In my class, the only rules I set are that kids may not give code to each other, either directly or indirectly. I also set a "rule of thumb" that if student A needs help from student B on a portion of a lab, student B must have finished that portion, and may look at student A's (relevant) work, but that A may not look at B's work. Part of the logic here is ...


4

From what I have seen, students who sit with a laptop (and this should be the same for your case, because the point is about having their own computer, and you can't see the screen) very rarely listen to the instructor. They might be working on their own projects, but some might be playing games, browsing websites and doing other non-related things. This ...


4

Wish I had a good answer, but I can sympathize with your Scratch example. What I started doing was just giving up on the first day we did Scratch. I would show them the drawing tools before we did any coding. Spent about 5 minutes showing how to make sprites and backgrounds and then gave them the rest of the period to play, with the understanding that was ...


4

I give 11 lab assignments in CS 1, and I assign partners for the first four or five so that students get to know each other, and then I let them choose their partners, or choose to work alone. I try to discourage them from working alone, but some students just don't want to deal with people, and I feel bad forcing them. (I also give six projects, worth ...


Only top voted, non community-wiki answers of a minimum length are eligible