Collaborative Software For Pair Programming? 302
DavidMatuszek writes "I will be teaching Java again this Fall. Students work in pairs, but unfortunately (after the first hour) typically not physically together. I would like to find collaborative software that is (1) dead simple to use, because that's not what the course is about, and (2) free. Google Docs would do, but students will be sharing code — plain text — not RTF or HTML or Word files. Is there such software for plain text?"
Use subversion either hosted or your own server (Score:5, Informative)
I would recommend to use Subversion. You could setup your own server but there is also hosted solutions available. I searched Google for "hosted source control" and I found this link :
http://weblogs.asp.net/fmarguerie/archive/2005/04/27/Hosted-source-control.aspx [asp.net]
The bonus would be to teach your student how to use version control and how to work together on the same files. Subversion (and older CVS) integrate into Eclipse and most other development environment. There is also standalone clients available if your students use a simpler editor like vi or notepad ;-))
Re: (Score:3, Informative)
Mercurial would be better for this because both students would have their own repository and no central server would be required.
Re:Use subversion either hosted or your own server (Score:4, Informative)
Seconded.
Well, actually, Git would probably be better, but that's a matter of opinion. But even with a central server, Git is faster and simpler than SVN for most things.
Re:Use subversion either hosted or your own server (Score:4, Informative)
Well, svn is also quite complex. Compare a git merge with an svn merge.
I suppose I should say, easier to use, once you know how. The learning curve might be sharper. On the other hand, it's much easier to set up a Git server than an SVN server -- ssh access is all you need.
Why not just use a Wiki? (Score:2)
That's about as dead simple to use as it gets.
Re:Use subversion either hosted or your own server (Score:5, Insightful)
Um, he's doesn't appear to be talking about a repository, but rather, software to enable pair-programming, only with the pair not sitting next to each other (or in the same room). Say, some software like SubEthaEdit on MacOS X, where two people can simultaneously edit the same document, along with say, Skype or some other voice/video service where the two people can view/interact with each other.
At least that's what I gathered from reading TFS.
Re: (Score:2)
I read more of a VNC type of approach.
Maybe TEAMVIEWER works with windows and I believe mac. I am using to get access to family machines at "remote locations" without driving there.
Re: (Score:3, Insightful)
Re: (Score:3, Informative)
Re:Use subversion either hosted or your own server (Score:5, Insightful)
I vote for the central server. And for having it in the hands of the teacher.
That way he can far better check whether one student does all the work while the other is doing the homework for another class for both of them. Yes, it's also a way to share the burden, but not the way it's meant to be. The server could be made tamper proof and if something's suspicious he could always check the versions and see what was done by what student. Even if they're smart enough to hand both logins to one person and that person fakes doing work as his partner, the IP addresses would give it away if they cheated.
Re: (Score:3, Interesting)
Even if they're smart enough to hand both logins to one person and that person fakes doing work as his partner, the IP addresses would give it away if they cheated.
If the students used Remote Desktop, nobody would know. I'm posting this during my lunch break at work, but you wouldn't know it from the IP address...
Re:Use subversion either hosted or your own server (Score:5, Insightful)
Re:Use subversion either hosted or your own server (Score:4, Funny)
I would recommend to use Subversion
I agree. But don't forget to do the thing the students will care most about: shave your beard [upenn.edu].
You look like Richard Stallman.
Re: (Score:3, Informative)
Re:Use subversion either hosted or your own server (Score:4, Funny)
And that's just the women.
Re: (Score:3, Funny)
The bearded ones disguised as men.
Re: (Score:2)
But don't forget to do the thing the students will care most about: shave your beard.
I beg to differ [microsoft.co.il]
Re:Use subversion either hosted or your own server (Score:4, Funny)
That would be very limiting, because you can't write a successful programming language without facial hair [alenz.org]
Re: (Score:2)
Do the checkouts / checkins from the flash drive in the lab at the beginning / end of class. That way the students can hack code at home on anything from Win98 / Notepad to Vim on their Mac. They wouldn't even need internet at home.
Because you could do all
Re: (Score:2, Insightful)
Re: (Score:3, Interesting)
> I think that you're answering a different question than what the
> submitter asked.
Well, I could be, sorry if I am.
Subversion allow you to enter comment for every change you make and these comments won't go in the source code.
For the voice/text chat part, we usually just use messenger or something similar.
Also, I think this would be a great opportunity for the students to learn how to use a real-life tool instead of something they are less likely to reuse in the future.
But as you said, maybe this is
Re: (Score:2)
That's not paired programming, though. This guy needs some kind of shared VNC + microphone setup.
github (Score:2)
github is good in that they can host their code for free (as long as you don't mind that students can see each others code) or there is paid hosting if they need to keep it private. You could also run your own git server.
Re: (Score:2)
Yeah any revision control system should be fine. Give them accounts on one of your machines. There should be a computer lab in the CS dept. When the students need to work together they should go there and grab two stations next to each other and work from there once they ssh into your box. Other times they can just work from where ever and just email, call, or text each other.
Re: (Score:2, Insightful)
Complicated Solutions Exist, So Dumb Them Down (Score:2, Interesting)
Re: (Score:2)
my last crop of interns from the local university thought CVS was something that came with eclipse
At least they didn't think it was a drug store.
Pastebin? (Score:2)
How about gobby? (Score:5, Informative)
Re: (Score:3, Insightful)
Hmm. It seems they've made great strides since I last played with the thing. I really hope Sobby is easier to set up than it used to be. Last time I tried to get anybody to use this with me, they objected to its difficulty in use and poor user interface. I'll need to look into this again. (I don't remember it having syntax highlighting; I'm really glad it does now.)
Also, watch for Google Wave later this year. (Somebody's bound to write a plugin for syntax highlighting.)
Etherpad (Score:5, Interesting)
Re: (Score:2)
Re: (Score:2)
I second this suggestion. I've used etherpad quite successfully for real-time collaboration for between 2-4 people. Pair programming is even one of the suggested use cases on the website.
Re:Etherpad (Score:4, Informative)
Uck! Marketroid speak! It's not exactly new, there was a multicast-based text editor as part of the MICE suite, and there were some very nice "whiteboard" programs out there which allowed you to use OLE linking to share data between two applications real-time.
The first certainly was around in the early 1990s, the second was around in the mid 90s.
EtherPad may be "new" in that it uses HTTP as the underlying protocol, but collaborative editors are ANCIENT. The biggest problem they've faced is that so few people have used them that they have never really maintained critical mass.
Re: (Score:2)
That was inflammatory. It happens to be the product I use for pair programming you insensitive clod.
etherpad (Score:2)
Please (Score:3, Insightful)
Please don't make them work in pairs, it's a horrible way to learn programming. I'm assuming you have enough computers, why not?
Sure--learning to work on a program with others is a necessary skill, but you should already know the basics first.
Re: (Score:3, Insightful)
Re: (Score:2, Informative)
SubEThaEdit or some other choices... (Score:5, Informative)
Could try (Score:2)
Re: (Score:2)
SubEtha? (Score:3, Informative)
Plaintext? (Score:2)
but students will be sharing code - plain text - not RTF or HTML or Word files
I'm with you on Word files being binary, but RTF and HTML are both plain text.
Re: (Score:2)
I'd consider RTF to be RatherObscureText, rather than PlainText, and HTML is more ModeratelyobscureText. Both can be contrasted with TeX, which is AlmostPlainButBloodyAnnoyingText.
discussion forum (Score:2)
even good ole discussion forums where everyone quotes eachother and modifies, creates new threads for other topics, etc would work just fine. Subversion would make that easier and the google docs suggestion or open office can do this too.
My first assignment for your students would be .. (Score:4, Interesting)
. . . to do some research, and choose for themselves whatever suits their needs best.
If they make a good choice, they will be all smiles. If they make a bad choice, they will have learned something that they will encounter again in their careers.
Re: (Score:2)
Anyone who has taught a class on a tight schedule knows that scope creep is as bad in the syllabus as it is for project design. So you want the students to evaluate and choose a collaboration tool in or
Re: (Score:3, Insightful)
. . . to do some research, and choose for themselves whatever suits their needs best.
Chances are the students don't have the necessary permissions to install new software packages on the school's computers, so this would be a non-starter.
Good grief (Score:2, Insightful)
Re: (Score:3, Interesting)
Not that it's what this is about, as someone else has already pointed out, but getting the brighter students teaching the slower ones benefits both groups. Being able to communicate things which are obvious to you to people for whom they aren't obvious is a valuable skill.
Re:Good grief (Score:4, Insightful)
That's all fine and good if you both are hired at a company, for instance, and have to work as coworkers. If, on the other hand, you're paying good money, you shouldn't have to cater to other peoples' needs in a learning environment.
On the other hand, if you're paying good money, you might want an opportunity to develop a skill which will help you when you eventually are hired at a company and have to work as somebody's coworker.
Gnu screen (Score:4, Insightful)
If the course is about Java, why do you expect them to do pair programming? (I assume you mean Pair Programming, not just cooperating to solve the tasks. If you mean the latter, it's just a matter of revision control using SVN or whatever, which they should do anyway.)
Anyway, one free tool that comes to mind is screen(1) (aka Gnu Screen) in multiuser mode. That makes two or more users share a bunch of Unix terminals in real time.
Re: (Score:2)
While the course may not be about working in teams and having the students learn to collaborate. You should teach them that anyway. It is a valuable skill in Real Life (c) [tm]. Now you should have them do it their own way but give them guidelines on what they should consider. Use a versioning system sure. Emails IM to make sure they are not stomping on each foot. Or do it the Old way (GASP) write out what they will do each of their responsibility make a project plan and who will do what and when. Ma
Re: (Score:3, Informative)
Re: (Score:3, Informative)
I think that screen is very easy to use.
ssh :multiuser on :acladd user (repeat for every user you want to have access)
screen -S "blah"
ctrl + a
Took just a couple minutes of googling to find a howto the first time I did it.
Just Plain Stupid (Score:2, Insightful)
Re: (Score:3, Interesting)
Actually yes. Modern music is almost always collaborative. Sculpture is often done with more than one person. And modern theater is pretty much gotten to the point where you frequently have multiple collaborators (not to mention musical theater which has been paired pretty much since its inception).
I find that some people are not compatible with paired programming, but when it works it can be amazing. My old boss and I would write code for entire days without getting up once. Not particularly healthy, but r
Re: (Score:3, Funny)
pair solo singing
I believe this is called a duet.
Re: (Score:2)
Do you ever hear of pair painting (canvas not houses), pair sculpture, pair composing, pair solo singing - no you don't
Pair composing is extremely common.
I remember learning programming in the late 70s (7 or 8th grade probably) by sitting with a friend next to a computer and working together on programs. Both BASIC and 6502 assembler on the Apple II. This wasn't part of any training course or intentional teaching scheme; it was simply a necessity since there were two neophyte programmers and one computer. I think it's a good experience and an effective teaching aid. I also think it's completely useless and counterprod
Re: (Score:3, Informative)
Actually, there are tons of good examples where pairs resulted in fantastic creative endeavors. Go see a Rogers and Hammerstein musical, or a Gilbert and Sullivan operetta. Or watch "The Matrix" or "The Big Lebowski" while sitting in an Eames lounge chair.
Except that pairs almost always divvy the work between them in a very delineated way:
With Rodgers composing the music and Hammerstein adding the lyrics... [wikipedia.org]
Gilbert, who wrote the words... Sullivan composed the music... [wikipedia.org]
Partnerships between two people with very similar opinions and skillsets (the Coen brothers, for instance) are extremely rare.
Bespin or Cola (Score:2, Informative)
https://bespin.mozilla.com/ - is a pretty slick in-browser code editor, that, if I'm not mistaken allows shared editing like Google Docs.
There is also an Eclipse plugin called Cola that allows simultaneous editing, but I'm not sure how stable it is, I've only seen a video demo.
And whichever method you choose, source control should be mandatory, ideally distributed (git or mercurial), though SVN is better than nothing.
VNC (Score:2)
One bonus is that they don't have to set up much software, just a VNC client and a VOIP client. Setting up the VNC servers is easy too, you only need to get a host installed with a
Just cancel pair programming (Score:5, Insightful)
Cancel the pair programming. All that happens is one student in the pair writes all the code. They might swap back and forth, or more likely one will end up doing it all.
Re: (Score:2)
One of my profs used to say:
"Most students say that they learn the most in this course from the lab exercises."
"Actually, I think that they learn the most from their lab partners."
Re: (Score:2)
But what do the students say?
Re: (Score:3, Insightful)
Re: (Score:3, Insightful)
Re: (Score:2, Insightful)
It's true. Unless you end up pairing two students who think they can program better than their counterpart.
Then you get 2 students handing in seperate Code, both amazing in their own right, saying that they wrote it themselves and had no help from their partners, insisting they get a better grade in the class.
And then the consequences of the pair of students with NO programming experience, and are having trouble learning, and end up handing you a page that is well documented but not at all functional.
Re: (Score:2)
It's true. Unless you end up pairing two students who think they can program better than their counterpart.
Then you get 2 students handing in seperate Code, both amazing in their own right, saying that they wrote it themselves and had no help from their partners, insisting they get a better grade in the class.
And then the consequences of the pair of students with NO programming experience, and are having trouble learning, and end up handing you a page that is well documented but not at all functional.
So you switch the pairs after the first assignment, or better yet use a combination of survey and quiz to figure out who's at what level and assign the pairs based on that. And give quizzes/exams based in the material, so that the weaker student still needs to learn it. One professor let us pick our final partners based on a survey, and it seemed to work out well for all the teams involved. And sometimes there is awesome karma: I had a friend who got a D in a course when his team wouldn't put his name on th
Re: (Score:3, Interesting)
I am SO glad that this stupid idea did not exist when I started learning programming.
If it had, I probably would have quit the class.
I just happen to learn better alone, just me and the machine.
I don't want to have to win a debate with another person before trying something, I just want to try it...now.
...BTW...now that I know what I'm doing, I work VERY well as a member of a team.
Re: (Score:3, Informative)
Back in the day, when I was about 15 and starting out trying to write demos (as in demoscene - we managed to replicate a few effects we'd seen back in the 90s from other big groups - after going "Wtf, how does that work?"), a friend and I started coding together.
The actual CODING is a one man job, sure; but when you're trying to solve a problem, having 2 minds work on the ALGORITHM gets you better results, quicker IMHO.
Sure, you'll possibly end up with the same algorit
Re: (Score:3, Insightful)
If they are supposed to learn how to do this, then I would say yes.
Most likely one student will just not learn anything.
Re:Just cancel pair programming (Score:4, Insightful)
You assume the hardworking student will just let that happen... that's not my experience (i had 4 years of compsci study where every programming course was done in pairs. This was in the late 80's). When one of the pair was slacking, the other one tended to either do the same (and both failed the exercise), or just do everything himself and complain to the assistents about it, generally leaving the other with an F.
Uh, no. You really think the hardworking student is going to allow himself to get an F? You forget that our teachers have been exposing kids to this collaborative stuff since 1st grade now, hell, including peer teaching, in which the teacher explains something to the class, and then the smart kids explain it to their not-so-smart friends. They won't complain to their TA, they'll just roll their eyes and do all the work, like they're used to.
Speaking from personal experience, teachers love pair programming because it halves the amount of homework they have to grade, and because if you have limited seats in a computer lab, you can squeeze more people in.
That said, I actually do like doing pair programming.
But pair programming is only useful when both people already know how to program (you're not towing an anchor), but you're doing something complicated enough you're worried about bugs. In my neural nets class, the math was so hairy that Bob Boyer and I really had to go over each line of code in order to make sure it was correct. I don't think either of us would have been able to do it on our own (or at least, not without a lot of pain). Our work's been used in various open source spam filters and referenced in patent applications, so it's pretty cool. =)
Re: (Score:2)
the math was so hairy that Bob Boyer and I really had to go over each line of code in order to make sure it was correct. I don't think either of us would have been able to do it on our own
Is there a reason you couldn't work out the algorithm and design first, and then code different parts independently, and just review the other's work? As long as it matched the design and algorithm you developed, you should be good. And reviewing will be easier since you're familiar with the design, and you can unit test parts of the code separately. I do completely agree with your statment about the hardworking student just doing all the work. He wants to get an F just to screw with the other lazy pers
Some tools I use... (Score:4, Insightful)
Etherpad for real-time text file collaboration
Yuugu for sharing desktops
Ventrilo for voice communication
Whatever source control solution you wish (TFS, Subversion, Perforce) for non-real-time collaboration with text documents (programs)
Yahoo IM or the chat/IM client of your choice for casual low-bandwith and non-time-critical conversations and sharing of information, links, etc
Email for everything else
Microsoft Live Mesh isn't bad (Score:2, Informative)
Eclipse DocShare (Cola) (Score:4, Informative)
I initially read the question as being about real time remote collaboration.
If that's the case, there's Eclipse's DocShare plugin: http://wiki.eclipse.org/DocShare_Plugin [eclipse.org]
I haven't tried it, and I don't know how mature it is. But I watched a video presentation on it a while ago and it looked very promising.
Re: (Score:3, Informative)
There are a couple of presentations, perhaps including the one you allude to, as well as other answers to this question all right where you'd expect them to be: pair programming [wikipedia.org].
EtherPad (Score:2)
Realtime, web-based collaborative text editor. If you don't especially care about the data being hosted out there amongst the tubes, free. (I suspect that the people suggesting SVN et al don't quite understand what pair programming is...)
http://etherpad.com/ [etherpad.com]
Google Wave? (Score:2)
I know that it's not out yet, but isn't this a perfect example of what Google Wave is for?
Eclipse + ECF + XMPP (Jabber) (Score:3, Informative)
http://www.infoq.com/news/2008/06/eclipse-ganymede-ecf [infoq.com]
Set up a Jabber server and away you go.
I have not tried this, so I can't speak to its quality.
Skydrive (Score:2)
Google Code (Score:2)
My professor went through many solutions (including our CS department's own subversion repositories) and eventually just settled on Google Code. It's easy enough to set up and use with a 30 minute primer on subversion (how to import, check out, commit, resolve conflicts).
The biggest drawback / concern was that you cannot make code hosted on Google Code private. However in our case we were working with 6-7 person groups on a major project so stealing code was not an issue since each team's implementation w
'pair programming' overrated... (Score:3, Informative)
At least it is overrated outside of an educational lab.
At least when I was in college, pair programming required two people looking at the screen and no more than one typing at a given time. You could use GNU screen, vnc, whatever for this, but realistically speaking, it is inefficient and by and large isn't feasible in the real business world after the days of .com ended.
At the other end of the spectrum, if you operate in a vacuum, there are definite high penalties of problems being caught later than they should and requiring more rework then they should to acheive the goal.
I personally go with a revision control system which emails me the patches the other person does, encourage frequent checkins, and review every change. I don't have to sit through them typing and reworking their snippets of code as they catch their own mistakes in their own logic flow, and yet I review the changes shortly after they make them and can offer feedback within the hour. It takes me much less time to review the diff than it does for them to create and 99% of the benefit is still acheived. It's a very happy medium. Most any sane revision control system will let you set up checkin hooks to email changes to appropriate distribution lists.
Well nobody else said it... (Score:3, Informative)
You're teaching Java and need pair programming...
Sounds like you need netbeans... http://collab.netbeans.org/ [netbeans.org]http://collab.netbeans.org
I think it sounds tedious, but you did ask...
Remote Pair Programming Using SSH Screen Vim and S (Score:2)
SubEthaEdit allows collaboration... (Score:3, Informative)
SubEthaEdit does collaborative coding on Mac, if I recall correctly.
http://www.codingmonkeys.de/subethaedit/ [codingmonkeys.de]
Bespin (Score:2)
Take a look at the Bespin [mozilla.com] editor. It's a relatively new Mozilla Labs project, a browser-based editor with a cooperative multiplayer mode, sort of. The video on the front page demonstrates how several people can edit the same file at the same time. Bespin uses the canvas HTML element extensively, so you'll need a decent browser to use it.
There's no official release yet, but the 0.1 version looks quite promising.
CJ
multiuser screen (Score:2)
Use your favorite text editor (like vi or emacs) and share a terminal using GNU screen in multi-user [aperiodic.net] mode.
GNU/Screen + Emacs (Score:2)
GNU/Screen lets you share terminal between several clients.
Emacs lets you share edited buffer between several clients.
Pick your VOIP of choice, or let them use IRC.
And Mercurial or some other distributed version control for when they're working apart.
No, they're not dead, dead, dead simple, but easy enough if you give them step by step instructions.
Netbeans, GNU Screen, and Gobby (Score:2)
GNU Screen [gnu.org] is, of course, always an option if you can use a command line text editor like vim or emacs.
Gobby [0x539.de] is pretty decent, although it's a bit more limited as an IDE.
I've always
lmgtfy (Score:2, Informative)
Don't make the pair programming compulsory (Score:2)
It's worth noting that some people are just not compatible with pair programming.
I literally cannot work with someone else watching my screen. I can't write code, I can't write text, it completely blocks me. If I were forced to do pair programming, the other person would end up writing all the code.
Re: (Score:3, Funny)
Me, I hate watching someone else program, it's like watching your dog take a shit. But it's a good experience for one term -- some people will find that they hate it, but some will find that they can live with it, and some will find that it works very well for them. Education works well when it bumps you out of your comfort zone from time to time.
Collabed? (Score:3, Informative)
Bespin? (Score:4, Informative)
There was some talk a while ago about this. I gave it a shot back then and it was a CPU-hog. With the latest strides in JavaScript (both browsers & the technology), it might be worth another look:
https://bespin.mozilla.com/ [mozilla.com]
screen(1) (Score:3, Informative)
Summa summarum.
Re: (Score:2)
Re: (Score:2)
Use rsync, find and cron. If a file has been changed in the last X minutes move it.
TADA!