How to handle team member who is unable/unwilling to collaborate
I am always willing to learn something exciting whenever I do any coursework
Great.
However, this adventurous mind of mine is risky and can often put my grades in jeopardy.
Less great. I am concerned that you are setting up a false dichotomy. Being ambitious in coursework does not have to involve risk of poor grades. It is part of being a mature student and researcher to learn how to reach for the stars in such a way that not attaining your full expectations does not result in complete failure but in work which is itself still valuable. (This is admittedly an "advanced lesson": I have known people who have made it to the tenure-track without learning it...sometimes with grave consequences.)
It sounds like you are getting an assignment -- let's say a coding assignment since I see you are a computer science student -- and planning something much more ambitious than is actually asked of you, even to the degree that the chance that you will not be able to pull it off gives you a bit of a thrill. But you don't need to work in this way. With planning -- and applying some insight early on; it's not all grunt work -- you can design a project in which you first complete what is asked of you and then move on to the more ambitious aspects that you are (happily) more interested in. Coding work in particular is best done incrementally. If you work on code over a long period of time, it is much more useful for everyone if some of the code that you write can be used (and tested, responded to...) right away than if you write things in a way so that you have nothing that works until the very end.
So far this advice is just for your own work. In collaborative work I think you should be clear about (i) what you are definitely going to do -- i.e., what your collaborators can count on you doing -- and (ii) what you would like to aim for in your remaining time (which if you are talented and hardworking, you will almost certainly have). Also, if you are actually more talented/quicker/have more time to put in, then it is reasonable to use at least some of your leftover time to try to help your collaborators with their projects. That will certainly go a long way to getting your collaborators on your side and avoiding bitterness.
In general, when you are working with other people you should stop every so often and really try to view things from their perspective. This sounds almost condescending, but it is not meant to be and it is really a skill: some people are good at putting themselves in others' shoes and others just can't let go of their own perspective; the former are much more valuable team players. One tip here: would your classmates describe themselves as wanting "an easy way out"? Or do they have goals which are just different from yours in some way? Moreover, do they see your flirtation with failure that, in your own words, can often put your grades in jeopardy and think, "Gosh, I wonder whether whoknows is going to come through with what we agreed he would do or come back proud of the fact that he bit off more than he could chew?"
I think you are doing things the wrong way. Although university is a place to learn new things, it is also a place to learn how to allocate proper resources for solving particular problems within certain timeframes. This is a valuable lesson for all careers (inside academia or in industry). In that sense, your co-students are right (which makes you wrong). If a certain assignment requires 10 hours of work to deliver almost perfect results, allocating another 10 hours for a mere 1% improvement is (in most of the cases) a waste of time. Time is not free. You think it is (you are in university after all) but it is not. This extra 10 hours, may be spent better elsewhere in another assignment, in a preparation for an exam and so-on. This will follow you in you future life. If you work in a company that needs something done in a month, it is enough / encouraged to deliver "almost perfect" results within a month than perfect results in three months. After all, aiming for 100% perfection is a dead-end. All things may be improved one way or another and someone must learn where to stop and move-on to greater problems.
So, I think it is you that needs to change his mindset. You must always find the best way to be productive and deliver requested results but with minimum effort. Do not get me wrong. I do not mean slacking or doing the minimum to pass courses. I mean doing the best to conserve effort and still deliver almost perfect results. You can always strive for absolute perfection but only in your free time (not in expense of your co-students time). If you still do not want to do that, then take assignments on your own. We cannot change other people. Only ourselves.
Some tips from personal experience:
- Ambition is good, and as a student, the consequences of failure at this point in your life are lower than they will ever be again for as long as you live. Take risks if you can learn from them: the most important thing is to really think hard about why a project failed or succeeded.
- If you have a drive to stretch the limits of your capabilities, take advantage of them now while you have a chance. Even though I have a fantastic employer, I wish every day that I could go back to high school and college so I could work on whatever projects strike my fancy.
- Be conservative when you hold someone else's livelihood in your hands. If what the other students want is so much smaller than what you want, deliver the "easy" version fast. Change the challenge from creating something big to creating something small, but quickly. It's important to learn the limits of how quickly you can do things. Programmers are notorious for pushing deadlines.
- It's one thing to have a personal failure, it's quite another to be responsible for the failure of an entire team. You want to be the guy who gets stuff done, the guy who everyone wants on their project, not the guy who only dreams and never ships.
- Force yourself to make solid commitments and then deliver on them. Cut out a portion of the project and take responsibility for it. Then you can handle that part as you please, so long as you get it done when you're supposed to and it is what you promised. This isn't optional when you have an employer, so it's a good idea to get used to it.
All of that said, the difference between a good developer and a great one is not their ability to write software, but their ability to manage time. Great developers are able to consistently deliver quality products in the established time-frames. Perhaps when you face a group that wants to "play it safe," you can use it as an opportunity to show that you have both programming skill as well as the pragmatism to manage your time effectively.