A while ago during my second time in a university pursuing a German master I made an observation how everyone was obsessed with team work.
The courses had various practical exercises where for the most part students were asked to work in teams while allowing individual practice only occasionally and seemingly as an exception. The teachers were exposing us to various techniques, pushing us into teams of different sizes, randomly setting up teams and rotating memberships during a project.
Following these studies I could confirm this observation on the job market. Everyone was into team work. One could read these requirements in just about any opening, worded like ability to work in a team, possessing the team spirit, being a team player, you name it.
I can clearly see the reasoning behind. Most software projects in the world are accomplished by teams, so team players are in demand. Nobody wants an asocial geek who can't play by the established rules, follow procedures and standards, who would do things their own special way and not be able to exercise social communication with other team members and customers. That's all understandable and I wholeheartedly agree with this notion.
Having said that I believe that this obsession with team orientation is plain wrong.
In fact, premature exposure of computer science students to team work can do more harm than good. It can be evil standing on their path of developing into individual professionals.
This experience was very different from my first studies and working experience in Russia. Although studies were more strictly defined in their scope and contents, the students were given more freedom and room to play. We had team work as well but rather as an exception. Most tasks were individual. We were allowed to choose whatever means we deemed fit to complete the task. Programming language, framework, algorithm, do your best to perform your task. Students were presenting really a vast variety of creative and surprising solutions. That was very good.
Later I could see the same approach in my work practice. Enough freedom to perform individually at your best interacting with the team as needed. Results? Highly interesting and challenging work with great outcomes. Rapid learning and fast professional development.
Working in German teams unraveled a very different picture.
Students were all into team work. They endlessly discussed each little thing like methods names and their argument lists, database fields and position of every UI control. At every opportunity they would do a meeting to discuss on some aspect of the project, pull a dashboard with markers and colorful sticky notes and create a real performance. Add here playing out user sessions and presentations and you get what you made.
Hey, it's team work right there, you are going to say. Day at the kindergarten, will I respond.
The two most important skills the students were taught included all kinds of team activities along with the presentation art. You could clearly see that's exactly what they were focused on during projects while real work to be done was seen as some secondary activity.
They naturally transferred their "skills" to the productive environment. Where there was real work to be done, the former students didn't quite do well. They couldn't stop but discuss every little thingie, take a coffee break at regular intervals to chill out and discuss the next step. It looked strange and wrong. It was also not productive.
If I were to communicate my perception of that organization I would rather describe them as Borg drones. This comes from the Star Trek movie. The Borg was a race of assimilated specimen that were enriched with implants and technology to produce cybernetic organisms. They had their personalities suspended at their assimilation and then performed as part of the collective with their thoughts interconnected among all of them and largely defined and guided by the matrix.
That was more or less the impression I got from my colleagues assimilated into the "team collective". You couldn't make them work as individuals, analyze options, take decisions and stay focused on the path to complete the project. You couldn't break the idea of "let's do it", "let's complete it" to them. They absolutely needed discussion, common agreement and approval by the superiors even there where they as supposed professionals were more qualified to take technical decisions.
That is exactly what premature initiation into the "team work" religion does. It destroys their ability to perform individually. IT industry is very much different from many others in that it is very practical. There is a problem at hand and it needs to be solved. In a precise manner. It's not paper that will tolerate typos. It's not human who you can talk out of some complications. It is a computer who will perform your program exactly as you wrote it. You need to be able to find a solution, code it, test it, debug it and then deliver working code. To master those skills a programmer needs a lot of practice. A lot of individual practice when there is nobody standing by to solve a problem or explain a mystery. A programmer has to be able to deal with problems and unforeseen difficulties on their own, find and analyze information, try things out, experiment, take a guess, make an assumption and test the theory. Spend sleepless nights hacking things until he gets them right. All those steps until he gets to be able to complete things from the beginning to the end, alone, with as little outside help as possible. He has to understand ins and outs. He has to see the big picture. He has to try, fail, recover and continue on the road. He has to gather experience. He has to form opinion about things. He has to grow.
Pushing students into teams automatically adds a backup. Stall at something, let's ask a fellow. He doesn't know let's ask another one. Or maybe the teacher. They wouldn't now try on their own because there is a shortcut available, as though Google was not enough already.
When they get involved into working environment they do the same. They get colleagues who have more experience so they keep talking to them. They would only try to resolve an issue on their own as the last resort, because there is a simpler way and hey, we're all in a team, right?
Wrong. I don't see such "team players" as valuable contributors. It's not fun to work with them. Frankly I wouldn't want to work with them. I would never hire them. I don't need a colleague who cannot perform as an individual, answer questions and solve problems on their own, backing me up at every step. I need someone who has their own experience to bring and put to use. I need someone who can tell me where I do mistakes. Someone who would speak their opinion and stand by it. Not a formless mass who would talk out of any challenge and simply adjust to the "team opinion".
I think that universities should not try to teach their students "team work". It is dangerous. It is also futile. You can't teach "team work" to anyone. Being able to work together with others, to listen and learn from them, to respect their opinion and let them guide you when needed, this is all part of social communication abilities of a particular individual. How well they have their social skills developed and how can they improve them further, is probably beyond your possibility to influence. People grow in various environments, face different situations, develop and acquire their social skills individually, in their own special way. Even when at university, students communicate, meet, help each others, organize parties and get drunk. It's how they develop their social skills which would make part of their "team work" abilities as well. Let them do it on their own.
What you need to do is to help students learn and develop professionally and mentally during their sober times. Give them individual tasks. Provide them with a challenge with no luxury of outside help. Make them do all the hard work of failing and learning from their mistakes. Let them unveil their full potential while trying to resolve a complication. Let them summon all resources they have to succeed and through doing this to believe in themselves and grow.
Do not try to help them providing them with the team support. They should see all hard work that is awaiting them and either accept and master it or ultimately fail and understand it's not their way. Let them understand it and choose another profession. No need to produce as many graduates as you can. It will only make it difficult for prospective employers to sort out real programmers out of the mass of CS graduates with a degree.
Abandon this team work. It is useless. Everyone who has participated in such teams knows that there are often one or two individuals who take over the group and lead the play while others simply adjust to their passive role and let themselves to be led. Being passive and experience your opinion silenced is the last thing you want to teach your students. They should learn to be respected as individuals who possess knowledge and experience. They absolutely need to reach that stage before getting into working environment so that they can resist and continue to be themselves without losing their active behavior model and trust in themselves.
When they enter working environment they will find their way to the team work. They will get smart colleagues and they will learn from them, developer further and acquire field knowledge. The organization will be different for each team at any other company. Regardless of whether you taught them team work or not, they will have to learn and adapt. So you won't be helping them much really with your artificial "team work" assignments. They will still have this part of the road to pass.
Look at it this way. University is probably their last chance to unveil their potential, learn to be active and believe in their abilities. It is an environment which you control. You don't have any deadlines, angry customers or failing projects. It is an environment which you can form as you see fit. Make it benefit your students the most so that they develop into individual independent professionals. When they get exposed to working environment, then may get to work on some boring corporate stuff where they neither start nor finish things and have limited options to influence the work. They may get buried under the piles of processes and bureaucracy and never be recognized and respected for their abilities. They need to stay strong and survive that pressure until they find their right place and their right team.
What happens if you fail in that mission, can pretty much be seen out there. I have known people who could not program a thing from the beginning to the end even if they had a CS degree. I have also seen a number of topics on my favorite StackOverflow site from people who complained about the same problem and asked the community for help getting out. They declared having working experience of five to ten years and at the same time a complete lack of ability to program and complete any kind of project alone, from the beginning to the end, because they never had a chance to do it. They were realizing it was wrong and needed guidance to develop those active developer skills. This is clearly the result of them playing a passive role since university days all through their professional career. This has to be prevented. I didn't bookmarked those questions then, but should I stumble upon them again I will post the links here.
P.S. When I first got into this "team work" philosophy I really liked it and embraced it at its full. It is only years later when I realized it did more harm than it did good. Addressing all university folks who come across this writing, please accept a feedback from one of your former students and let go of your "team work" teaching strategy. It will only benefit your students in the long run.