views:

626

answers:

12

In a previous question about homework on stackoverflow I made the following statement:

I think it's extremely important for students to learn that real-world programmers work together, learn from each other, support each other, and share their knowledge and insights. It's this type of networking that inspires and excites us.

This was down-voted, and I'm guessing someone thought I was being facetious, which I was not. In my long career as a programmer, I've always been in an environment where sharing (sometimes called "leveraging" or "reuse") and mentoring were encouraged, and people were rewarded for doing these well.

Is this a typical experience, or am I just very lucky (and maybe naive)? Are you rewarded more for teamwork or solo accomplishments?

+10  A: 

I think your original answer might have been down voted because the original question was

Can and how does one ask about homework on StackOverflow, and what guidelines should members use when responding to homework questions?

And your answer (while insightful) did not directly relate to the question.

To answer the current question, yes -- real programmers network and share.

Here's how I have learned to network and share in my career:

  • Get to know various recruiters personally (if you're a contract programmer, make sure you're going out to lunch with recruiters on a regular basis)
  • Complete your profile on LinkedIn, and make sure your profile is up to date and you have recommendations from others (and give recommendations to others)
  • Go to various conferences to see what other programmers are doing. Examples? Microsoft PDC, Facebook developer's conference, Microsoft MIX, jQuery development conference,
  • Go to local dev events, like local user's groups.
  • Stay in touch with past co-workers. LinkedIn is a good start, but when was the last time you called up somebody you worked with 5 years ago and just took them out to lunch to chat?
Dan Esparza
+3  A: 

Surely SO itself is an example of networking and sharing - as is open-source. So yes, it happens a lot of the time on the net to start with. In my experience it happens at work as well, with mentoring, code reviews, tech talks etc.

Jon Skeet
I envy you for your situation.
Paul
+2  A: 

In a modern IT department, "networking" or "collaborating" is fundamental.

Some fields where this applies:

  • teamwork: teamwork is just necessary to accomplish great objectives (like rewriting from scratch a big corporate system)
  • collaborative tools: source control systems, bug tracking applications, IMs, etc. are just examples of collaborative tools that boost productivity on large scale projects.
  • internal mentoring/training: an appropriate training and mentoring process is vital for a modern company, and gives value to all the employees.
friol
+3  A: 

I consider networking, communicating and working with other developers to be very important for personal and professional growth.

Human-human interaction is much more conductive to problem solving than human-computer interaction, and sometimes you can find a solution just by describing your problem to another person.

Eran Galperin
+1  A: 

In my experience, sharing knowledge and mentoring has been very common in every-day work. I've been the most junior developer in some teams and the most senior in others, and I've always got to learn a lot from the most experienced guys, as well as guiding others who had less experience than me (and yes, you can learn from them too). I don't know about material rewards and as far as I know there wasn't any kind of policy on "networking", but I'd say most people I've worked with are naturally open and willing to collaborate with each other.

Juan Pablo Califano
+2  A: 

Doesn't the existence of this site show beyond a doubt that programmers do share knowledge quite extensively? :)

jalf
A: 

I'm sure that there are many who don't, but I wouldn't want to work with any of them. I think it is critical to your success to both learn from and teach others. Learning from others is critical; teaching is less so but arguably more effective as you will really have to know your stuff.

tvanfosson
A: 

Yes, but, it is not for you, It is for me, practically.

plan9assembler
A: 

I find networking to be invaluable, and not just code networking. I run a business, so it's vital for me to talk to people in a wide variety of roles. More developers could benefit from taking advantage of external networking options, even if only to try to pick up a bit of extra cash.

On the other side, networking allows me to keep in touch with some really clever people, which means that I've got to learn some great stuff because these people are really at the top of their game. Done properly, networking is a huge benefit to you, so I can only encourage it.

Pete OHanlon
+1  A: 

At my current job, I work with 2 of the most talented programmers I've ever worked with. I call them talented because they REALLY get things done and churned out, and I can easily read their code. It's high quality and produced quickly.

However, these 2 guys don't share with anyone, really. It's not a malicious thing, they just don't have the desire to mentor others. I've done (and do) everything I can to get their lazy asses :) to teach me some things, and it's like pulling teeth.

One guy is very talented, but when you ask him to explain some code (not from a technical perspective, but from a business logic perspective), he says really insulting things like "so, do you understand what is happening here? Probably not..." He doesn't MEAN to be a complete egotistical bastard, but he is. I call him on it all the time and we just both laugh, because he knows it is true.

Those guys don't share.

Now, I'm personally not even a senior developer in my current job, but in my last one where we were using VB6, there wasn't much I didn't know about the language and common techniques to solve problems. Back then I mentored and shared every chance I got.

So, from my anecdotal perspective, 33% share and 66% don't. YMMV.

Matt Dawdy
+4  A: 

Here is what I have learned about coding and teams and collaboration were I work.

1.) The code and the design is freely available from other projects or can be obtained.
2.) People don't have "TIME" to explain why they did what they did.
a.) The exception being if your involved in a code review.
3.) Things are very competitive (In all the wrong ways like rankings).
4.) If you ask too many questions of the "Gurus" You are considered to be a poor problem solver and a drag on the team.
5.) Code reuse across projects happens. But only if the people who started the project knew to do this. Sometimes there are people who share the wealth of what there doing on projects with other people that were working on like projects. This happens randomly or through word of mouth.
6.) Sometimes other peoples work is crap. It takes experience to know not to use their stuff.

Here is the thing, my first project was like drinking from a fire hose. Learning process, design, corporate culture, how to deal with personality conflicts, coding techniques and style, and poor resource management. These were all demanded to be already known out of the gate. Training is a joke, and mentoring, though given lip service, just doesn't happen. Also, there are people who will take your ignorance and use it as a weapon to back stab you with management to make themselves look like the arbitrators of all things Software Engineering (and it works too). Another example is if your team was green and the one guy who wasn't is bombarded with questions, then his/her productivity will drop (and/or he will be burnt out and resentful) consequently claming him/her up and damaging your reputation.

Solutions:

Try not to work for a company who has this as a culture (unavoidable in my case for personnel reasons). Have a very thick skin. Seek out a friendly face (usually the people who work nights by choice). I would suggest you find out who this might be and it should be someone not on your team. A caveat to this would be don't ask him/her the wrong questions. The wrong questions being questions you could easily look up. Also, do not ask him/her too many questions. Pick the questions well to show that your intelligent and diligent and that you just need guidance. I can not emphasize enough, who you ask is extremely important. Also, there could people on your team who are in your shoes (or have been). Enlist your peers that are in the same situation and collectively you could learn together if all of you are prepared (good way to network). The key to the preparation is diligence and studying. Even if you have to work many hours on your dime. If you don't know something, you better study like its a final in college. Because guess what, it is like finals every day your first couple of years if you are typical of most coders I have met when they first start out.

Paul
A: 

I would love to be in such a encouraging and sharing environment. Usually I try to share, or encourage others to share what best practices, tricks, experiences they have. But they always look at me like I am some kind of monster, for being open and honest.

crosenblum