Hot answers tagged

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 ...


22

How to give assignments that require heavy computational resources? Don't. Most computionally intensive problems can be stripped down to something that's just as instructive but runnable on any normal computer. In particular, for inexact algorithms, you can generally trade off accuracy against computational cost, and often actually get still quite good ...


19

I have a couple of orthogonal suggestions. First, and you may have done this yourself, before you give any assignment you should create a reference implementation yourself and test it in the student's environment. If you did this, then just let it be a warning to others. This is true, actually, for any assignment, not just one that might run up agains ...


15

Giving students credits for a cloud service like AWS might be useful in this case. Amazon's pricing is reasonable for a cloud instance: GPU Instances - Current Generation p2.xlarge vCPUs: 4 ECUs: 12 Memory (GiB): 61 Storage (GB): EBS Only Price: $0.9 per Hour The cheapest instance (t2.nano) is priced at $0.0058 per Hour,...


13

You seem to already realize that this is a subtle question. When I taught Mathematics early in my career, I also forbade students to work together. Later on, teaching Computer Science, I found myself at the opposite pole. I normally forced students to work together on nearly every task. In some ways I changed, but it was more that the subjects are different. ...


11

In "Assessing Individual Contributions to Group Software Projects" (WCCCE '03), William Gardner discusses a number of strategies for adjusting team programming project grades for individual performance and ends by recommending a "share-out" approach: The essence of share-out is that each student is conceptually given a pot of points, and must allocate ...


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

For context, I teach high school students as part of a 4-year high school computer science major. My students do, during their 4th year, a full-year project for a client who has a need. (The clients do not pay for this, they provide a client experience for our budding developers.) At the end, we have a big event with presentations, outside judges, and a ...


10

In my experience, good introductory programming courses meet three overarching goals: Empower students to create simple programs outside of the scope of the class by giving them the technical skills and the practice to begin being independent. This includes teaching the basics of one usable language. Inspire students to continue learning and using their ...


9

Unfortunately, GUI programming is sufficiently different from algorithmic programming that if you start with it students can get the wrong idea about what a program should look like. For example, when I write an algorithmic program, using good OO techniques, a method of five lines is starting to be too long. The granularity of a good OO program can be very ...


8

As a student I would find this assignment uninteresting and a waste of my skills. I would feel the professor is just trying to be lazy and not having to properly grade assignments. If they really should know HTML and CSS by now, don't treat them like babies. Just ask them to build a complex responsive page that works as their resume and/or portfolio. They ...


8

You have set a difficult task. The reason is that there are two dimensions here, not one. The first is that larger projects are usually built by teams and not by individuals. Certainly if you are interested in preparing for employment, then teamwork is essential. The second dimension, independent of the first is that larger projects are normally built to the ...


7

Having experienced this cliff myself, I'd give several pointers: Start by independently solving smaller problems. The Euler problems are great for this. Set specific goals for what the program must do. Then you know what needs to be done, exactly. Much like requirements in the "real world". Break the overall project into chunks, considering the ...


7

I look at it as two separate tasks. Learning: The goal here is to learn new things and practice what you've learned. For my classes, these are mostly small lab style assignments. I want them to work with their neighbors. I switch seats every two weeks or so that they have new neighbors to work with. I've gotten pretty good at explaining concepts, but ...


7

Programming contests are useful for some students in some contexts, but they're harmful to other students in other contexts. Contests are useful for students who already self-identify as programmers, are motivated by competition, and enjoy the high-stress environment of a competition. But like you said, the skills acquired by participating in programming ...


6

While I think that all of your observations are correct, there are other considerations. I'm not a big believer in these contests, nor in the kinds of problems that students are asked to solve in them. However, the issue of student enthusiasm for programming (as a part of CS) is also very important. IF you have a bunch of students who need external ...


5

Step 1: Think big The most important part is not to think "this is too big". All big projects are, well, big. You need to find something you'd like to do. Sometimes just looking around, and thinking: "I'll make a system that imitates <insert real life thing here>" works great. Just make sure not to think too big. You'll know if it is too big in the ...


5

To a certain degree, it comes down to experience. But if you don't have experience, I feel you can get a lot of mileage of just trying to do the simplest thing possible to see what'll happen and googling your questions as you go. At some point, you'll run into an obstacle you didn't anticipate and realize you need to pivot and adjust or even entirely re-...


5

I am currently a co-leader of a programming/FIRST club at my high school, and for us the key has been project based learning. We are always working on something. It might not be relevant to our upcoming competition, but we always contextualize lessons in terms of what we're working on. That way everyone stays interested in the current project and sees the ...


5

I think @Ben I.'s suggestions are great, but let me present a completely different take. Don't prepare them for science fairs, prepare them for industry. Introduce them to git/open source/collaboration by creating an "open source" project on github, involving whatever languages you're using. Open issues and have students assemble into teams and work ...


5

Since you said that it is a "high poverty school," I assume that some students may have some financial/material needs... So, you could suggest the development of an app that allows the students to anonymously post things that they are in need of (a pair os shoes, one math book, food, ...) and let other more fortunate students (also anonymously) provide what ...


5

The first step is for the students to design their own projects. I give them a timeframe, and make clear that they will be held accountable (within reason) for finishing the project. I don't just accept the project proposals blindly - there is a negotiation here. There's an odd twist to this step, actually: I often have to persuade the students to lower ...


5

Bigger isn't better. My guess is that it's more accurate to say that novices have trouble working on projects that are useful and interesting in real life, which is not necessarily the same thing as larger projects. In fact, a common trap that I've seen self-learners fall into is taking on projects that are too large! This leads to burnout, stagnation, and ...


5

1. Perseverance and determination This was, without a doubt, the key to my success as a self-learner. You need to see obstacles as a challenge, not as a threat. With each project, prove that you can achieve something beyond what you've achieved before. Almost any project is doable if you are flexible about the details. (For example, going 2D instead of 3D.)...


5

As you suggest, it is a subtle question. Twenty-five years ago, the answer was simple: Plan. But too many software projects crashed and burned because of over-planning and sticking to the plan after it was obvious to all that it was the wrong plan. More recently, the initial failure of the signup system for the Affordable Care Act was likely caused by this ...


5

The ideas in your question are far too difficult, for a one hour introduction. Yesterday I had a look at Haskell and learnt some. I have over 30 years programming experience (20 years professional). Have experience with functional programming. Yet it took me several hours, and did not get far enough to be able to do your suggestions. Mathematics You say ...


5

The advantages of using VCS from a content-creation point of view are already written about in depth, so I'm providing only arguments for why this is advantageous to you - regardless of how well they utilise it for their own workflow. Lost work If all students are committing their work to a repository you have access to, you will never need to worry about ...


5

Summary Node.js has an unusually complex ecosystem which you don't get in some other languages. Your students spending time to intelligently pick the best libraries is great, but you might need to stop them from being bogged down. If time is really a problem, simply take away the choice, but keep in mind that you take away a powerful (and necessary) ...


5

As an instructor, this is certainly a sticky problem. There are two questions at play here: What can I help you to understand during our time together? How do I know that you actually know it? There is an understandable impulse to work only on the first question. After all, what is the purpose of education if not to help the students progress as fast ...


4

I also like group programming projects (usually pairs, so some of the mutual grading ideas, which I like, don't apply). What I do is have an early phase of the project be a co-authored "plan" document that crucially, includes specific tasks for each member. I make the assumption that they can divide the work equitably or that they can re-negotiate later. ...


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