Collaborative Software For Pair Programming?
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?"
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
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 ;-))
Everything I write is lies, read between the lines.
Your e-mail address indicates you hold a position at UPenn. While I understand you trying to facilitate their collaboration by providing the right tools, shouldn't they be developing/discovering these tools themselves? I mean at U of MN, we each Unix accounts where we could create directories and set permissions on them. I would create a directory under the directory for that class and grant permissions to my partner and then we would both work on that directory through telnet/ssh/sftp/whatever and keep communicating. Most of the time, we would sit side by side in the lab brainstorming and talking about the project.
... well, probably more important to my career as a developer than learning Java.
:)
I suggest this because it's
If collaborating while writing code isn't natural to them, you should be pushing it. I'm not sure what server resources you have at your disposal. What if they have a lot of files? What if you need different permissions for each pair? I would say set up a SVN server but for each pair? And there goes complexity although I found TortoiseSVN to be very simple. It's great experience for them to work with a source control system though.
So what you should do is write a guide (or better yet, have an grad student write a guide) telling them how to share directories between each other and only each other.
If these are going to be one file projects (likely) and you don't care if everyone can see/modify everyone else's project (unlikely) why not make a Wiki with ground rules? Just put your code up on you and your partner's page and the whole history is right there.
Your other option is to go to a higher level course or your department and ask for a solution. You're in a computer science department and you're looking for a particular solution that isn't out there. Everything is too complex: cvs, git, svn, etc. So write up some basic requirements and give it to a class of grad students or someone looking for a research program. I'm thinking like a dumbed down interface to git is all that is needed to be developed. You know, like some really simple java application that points to your local directory and then server and then updates, commits or a few other basic commands? And open source it when you're done coding it
My work here is dung.
How about gobby... http://gobby.0x539.de/trac/ ?
Cue The Sun...
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.
If you are working on Mac OS X, then SubEThaEdit is a great choice for collaborative coding. As for other options, check this wikipedia page: http://en.wikipedia.org/wiki/Collaborative_real-time_editor
SubEthaEdit (Hydra once upon a time) allows live collaborative editing. not sure of the security or other implications/issues. I tried it once or twice. Was a decent editor otherwise ... no real big frills.
Que Deus te de em dobro o que me desejas
[May God give you double that which you wish for me]
. . . 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.
Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
Don't hold your brighter students back because you want the class to learn together! You have to accommodate all minds, not just the slower ones. I went through this, and quite simply I didn't learn anything but how to pretend to be interested.
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.
IMHO, writing software, in Java or any language, is a creative effort. There are many fields of creative endeavor - artists, musicians, developers, etc. Pair programming is just plain stupid and nuts IMO. Do you ever hear of pair painting (canvas not houses), pair sculpture, pair composing, pair solo singing - no you don't. I had hoped this pair programming nonsense had faded into oblivion - I guess not, but let's try to push it over the cliff and into the abyss of poor ideas.
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.
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.
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
- Spryguy
There are three kinds of people in this world: those that can count and those that can't
If you want a folder based sharing solution for Mac or Windows...Microsoft's Live Mesh works fairly nice. I use it for my small company and share all sorts of files with my co-worker.
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
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.
Eclipse offers realtime collaborative editing via XMPP and the Eclipse Communication Framework:
http://www.infoq.com/news/2008/06/eclipse-ganymede-ecf
Set up a Jabber server and away you go.
I have not tried this, so I can't speak to its quality.
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.
XML is like violence. If it doesn't solve the problem, use more.
You're teaching Java and need pair programming...
Sounds like you need netbeans... http://collab.netbeans.org/http://collab.netbeans.org
I think it sounds tedious, but you did ask...
These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
SubEthaEdit does collaborative coding on Mac, if I recall correctly.
http://www.codingmonkeys.de/subethaedit/
Computer Science is all about trying to find the right wrench to bang in the right screw. -T.Cumbo?
Multi-user screen: http://aperiodic.net/screen/multiuser Gobby (multi-user text editor): http://gobby.0x539.de/trac/
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.
I haven't used it but Collabed looks interesting. Of course most kids would probably end up doing it with im and the occasional email, but it still looks interesting.
Quack, quack.
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/
I'm not sure what the secret to success is, but the secret to failure lies in trying to please everyone -Bill Cosby
My guess is that, no matter how neat of a collaborative program you introduce to your students, they're going to give up on it after a couple of minutes, and decide to just meet in the lab on Thursday, at like 5 or something. A good deal of your students live on campus, and the rest of them are there most of the time anyway. Meeting in person is the quick-and-easy solution.
. . . 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.
Nothing beats screen. One student starts programming within a scren session; the other student joins that screen session (screen -x) and now they're both in the same environment at the same time, and both are in control.
Summa summarum.