Where Do You Put Your Curly Brackets?
Where Do You Put Your Curly Brackets?
So, I heard that your 3081W professor just told you about your first team assignment. If you are like me, I bet you are very happy that, for this assignment, you will be working on a team. Don't get me wrong, you should be happy. Working on a team is a very useful and valuable experience. At the same time, if you are at all like my classmates and me, your assumptions about the benefits of working on a team are likely quite different than the real benefits. In fact, if you are not careful, your assumptions might cause you some unnecessary challenges. But, if you can learn from my experience, you might avoid those challenges, and instead realize more of the actual benefits of a team assignment.
Perhaps you have some of the same assumptions that I did about my first team assignment. For example, you might be looking forward to having somebody with whom to share the work, to discuss problems, and to find the solutions. These assumptions are correct, as long as your classmate and you work well together. But many of my other assumptions were wrong. I thought the assignment would be easier with a second person. I heard similar comments from my classmates. "With two people, we will be able to work twice as fast," right? "Our professor gave us plenty of time to complete the assignment. Because I have a partner, I can wait to start this assignment until closer to the due date." And "I can relax a bit with this assignment. Because my partner will do half the work, I can work half as hard as I do in my other classes."
Let's start with some common mistaken assumptions--what I'll call "mis-assumptions"--about working on a team. Perhaps the biggest "mis-assumption" you could make is that having a project partner will mean you will have less work. Mathematically, you might think that two people will mean that each will have to do only half the work. In reality, however, two people usually cause an assignment to become more complicated. Sharing your tasks with another person is not quite as easy as you might think.
For starters, there's scheduling and coordination. Before, when the descriptions of your homework warned, "You are to work on this assignment on your own," your only concern was your own schedule. You could cram in your work on the assignment whenever and wherever it fit. You could squeeze some work in between classes. Even during another class, if you had to (and your professor didn't catch you), you could sneak in some work. Or, you could pull an "all-nighter" before the due date.
Your ability to be flexible with your own schedule does not work so well with a team project. Time management becomes much more challenging with two or more schedules. For example, on a team, both your partner and you will need to adjust your schedules in order to meet and coordinate your work on the assignment. Your partner is not going to be there working with you whenever you feel like it and happen to have the time. Your partner has a schedule, just like you. She is likely taking different classes and has other homework to do. My recommendation is that both of you sit down with your calendars and schedule regular meetings as soon as possible, at least twice a week. If your teammate and you do not coordinate your schedules and your work, you might easily miss the team assignment's due date.
Which brings me to the second and somewhat related mis-assumption: You cannot just divide up the tasks of the assignment, work on your own, and quickly put the pieces together at the end. There are multiple issues to coordinate. When you work alone, you plan your own work; you design it; and you solve it all by yourself. On your own, you can use whatever style you prefer. You make your own decisions, without dissent or compromise. When you are on a team, however, your partner likely has his own approach to solving problems that varies from yours. Likewise, your professor has already instructed you that our team's submission must "stick to one style." You will be amazed at how much time it takes to agree on little details.
How about something simple like curly brackets, and where you put your program annotations? You will be really lucky if your partner and you handle annotations in the same way and style, and even the location of those pesky little curly brackets. If each of you does this differently, well, too bad. If you are like most programmers, you have your own preferences and style, which is just different enough from everyone else's style. If you think that you have a couple very good arguments on why the curly brackets should go exactly where you put them, I'll bet your partner has a couple reasons her approach is better.
In addition to curly brackets, there will be countless other issues. Will you store your data in the safe "vector" like you prefer, or will you use your partner's preference, the super-fast "malloc"? Will you use the long meaningful variable names that you prefer, or will you use short ones that your partner likes because they are faster to type? This is just a small sample of the many details with which you will be dealing.
It is unbelievable how much time it takes just to coordinate these seemingly insignificant details, without even considering the time two people can take to argue which way is better. If you insist on your own approach, on trying to convince your partner that your way is best, in the end you might be left with no time to complete the assignment. Dealing with one or both persons' stubbornness can end up taking more time than the assignment itself. It really is not worth it. My recommendation here is to be flexible and learn to compromise. When both of you feel like you have given into 60-75% of the other's preferences, you probably have reached a fair compromise.
My final example of a "mis-assumption" is that your partner and you can split the work absolutely equally between two of you. Sometimes, division of work may cause offenses and complaints. Was the division fair? Who worked more? Who did the most difficult parts? Who deserves the credit? Although it might be hard, don't get too caught up in this. Somebody will work more; somebody will get the most difficult parts done; and somebody will come up with greater ideas. And, very often, each member of the team will feel like his or her accomplishment was the most important part of the project. Related to this, people generally take pride in their accomplishments after completing a big assignment--and you should feel proud of your hard work! With teamwork, however, you need to be careful about focusing on your individual accomplishments, as opposed to the overall accomplishments of the team.
When working on a team, I recommend that you place your individual pride far behind your team pride. Both team members need to remember that you are working towards a common goal: to complete your assignment as well as possible. If you try to do too much, to show you are better or cooler than your partner, then you will be missing important lessons about how to work on a team. If your plan is to get away with the least amount of work possible, not only will you miss the teamwork lessons, but also you won't learn the material from the class.
Now that I have shot down all the "mis-assumptions" about working on a team, what's left to look forward to? If working on a team is not easier, why do it?
First, you will learn how to cooperate and compromise. You do not want to lose your friend because of stubbornness about variable names or curly brackets, do you? This is a fantastic lesson that will help you in your future career. After graduation, most likely you will not be in charge of setting your employer's programming style. Instead, at least until your future promotion, you will have to comply with somebody else's style requirements for a while. So, this project will be good practice for you. You don't want to lose your job because you cannot follow your boss's style requirements, right?
Second, and perhaps more important, you will learn new ideas and approaches to solving problems. You will learn to look at things from a different perspective and see the valid argument, even if it contradicts your own approach. Your partner and you will have a chance to combine your knowledge and skills and learn from each other. You might learn something interesting from your partner's style, while sharing something valuable about your own approach. Experiencing another person's approach helps keep your ideas fresh and flexible.
Finally, you will learn the satisfaction of being part of and completing a team project. You will begin to learn the importance of coordinating and managing time over the course of a team project. Learning to be disciplined with your schedule now will pay you back during your future career. You might even see that, with a disciplined and well-coordinated team, you can accomplish more difficult and larger tasks, with a better result, than you would be able to do on your own.
Teamwork is challenging, but at the same time help to gain a lot of valuable knowledge and develop important skills. Do not avoid it, master it! During your interviews for a job or internship you will be asked a lot of questions about your teamwork style and experience. Employers are interested not only in whether you are smart, but also whether you are able to work as a member of a team, to contribute to the common goals and be an important part of the company. Skills in working with other people will help you to do your best at work. Having this opportunity now, during your education, will be an invaluable experience that you can apply to your future career.