Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am currently starting work on a personal project that me and a friend are very passionate about. We want to work on it together, but we are on very different programming levels:

I'm in my last semester of my education have been through 2 internships and I'm currently working as a student, programming, while he just finished his first year of uni and just got the basics down. The question is How can we work on this together?

He is just making the switch from Java to C# at school, and the project will be an ASP.NET project in C#. I could wait a semester so he can get more into the language and learn more programming concepts, but I feel that it would be a waste of time, and I might loose momentum.

So the question is what is the best way to work with a person on a different programming level than you? Pair programming, making a part of the system as an example that he can follow in making another part? How would you do it?

share|improve this question
1  
Do you work well in a team? –  user1249 Sep 5 '11 at 8:04
    
Yes I think I do, but then again so far I have usually been the one with the least experience. I am nervous about being the one with the most experience, but i guess it is normal that at one point you are put in this situation –  Pill Sep 5 '11 at 8:33
    
If you know each other well, then just sit down together and teach him as you go along. –  user1249 Sep 5 '11 at 8:44

5 Answers 5

up vote 5 down vote accepted

Pair programming is an option indeed. I think you may not need to pair program the whole time, but it would be useful in the beginning (to establish common concepts, ensure a common understanding of the goals and requirements, discuss the development practices to be used - such as SCM, TDD, unit testing, continuous integration etc. - , set up the work environment and the first prototype/skeleton implementation etc. etc.), then occasionally, whenever you feel the need.

Your should focus on the overall design and architecture, task division, and identifying small (sub)tasks for your friend. Then you should also follow up and review what he did, maybe together with him, to explain him how things can be improved.

Once you see that he can handle a certain kind of task, you can gradually broaden his responsibilities and assign more complex or different kinds of tasks to him. Make sure that he keeps getting the right level of challenge: not too boring but not too difficult either.

You will probably spend a lot of time discussing solutions and issues. Sometimes it may feel boring or tedious to you to need to repeatedly explain concepts which you already understand. However, try to take it as a challenge, a communication exercise, then you will learn a lot yourself too. As Jan Comenius told several hundred years ago, you can't fully understand a concept until you taught it to someone else :-)

share|improve this answer

One way is define responsibilities for each person. Responsibilities would include what the person has to deliver.

In a project like yours, I would suggest that you sit down together and identify your program components and areas that each component will take care of. You have different areas: GUI, logic, database processing, security, etc. Each person would pick a closely related set of tasks in the area he/she can do best.

Be warned that such a project will not be very smooth, but there is a great value in what you will learn.

share|improve this answer

If you are both on programming, I would avoid pair programming with a novice, and opt for working on the same code together (or letting him do something he's able to).

If your levels are really so different, then perhaps he won't be able to follow your code immediately.

I would let him think about the problem, then let him find a solution. I would then discuss it and showing him if there are better approaches, other things to consider, or if it's a solution to avoid and why.

Meanwhile, one of the first things I would teach him are the programming practices you are using, along with naming conventions, design patterns, etc.

If you can concentrate on two different aspects of the project though, maybe it's better to let him concentrate on another aspect, such as GUI implementation/design, database, etc.

share|improve this answer

how to work together? PATIENCE!
Expect him to make mistakes, and correct those without getting angry. Show him not only what he did wrong but how to do it right the next time and why.

share|improve this answer

You could set up your project using distributed version control, such as Github & TortoiseGit, or Bitbucket & TortoiseHg.

Being the senior developer, you would create the central repository, and each of you would have local clones to work from. Divide development responsibilities as needed, and schedule times for code review & merging to the central repository. You might start with more frequent reviews, and as your friend becomes more self-sufficient, adjust accordingly.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.