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.

For learning a new language or framework , is it better to learn by working with someone else on an existing project or creating a new one myself?

I had experience on working on a open-source rails project for four months. The project was nicely written, and it has lot of good examples for me to learn, but I didn't get too much of rails in the end. At the end, I was still confused by many rails/MVC concepts.

On the other hand, after that rails project, I myself started creating a ASP.net MVC from scratch. I ended up successfully building a fully functioning MVC web site and used a lot of ASP.net MVC features. I had a way better idea of MVC and ASP.net MVC's mechanisms after this project, but meanwhile, I might have employed many bad solutions without even realizing it.

So which way do you think is better for learning? What are the pros and cons for each approach?

share|improve this question
add comment

6 Answers

up vote 7 down vote accepted

I'd say do both. I think you just got the order wrong.

First start from scratch and then see how other people do the same. I think the reason you didn't grasp too much of Rails/MVC was because you didn't have a good foundation to absorb whatever gems were there.

After you've got the fundamental knowledge, you can definitely catalyze the learning process by building on other people's experiences.

share|improve this answer
add comment

I think working with someone else to start off with is a good idea - this allows you to get to grips with the basics (and hopefully any bad habits are quickly corrected), but also keeps you motivated to carry on.

One of the biggest problems I have when starting a project from scratch is running into a problem I have no idea how to solve, which results in hours spent Googling. Although this is a good learning technique (finding your own answers to problems), being able to talk the problem through with someone who's probably run into the problem before is far less frustrating.

share|improve this answer
add comment

Depends on the language and the framework you know about !

I'd say the language somebody should know are C++ and Python. Learning a framework like Qt or Rails is I think more important than to learn LUA.

share|improve this answer
add comment

I think you should combine both, but in the right measure. Working with someone experienced (but be sure that he is, first) will prevent you misusing your tools, reinventing the wheels, nurturing bad practices etc.

On the other hand, you should be given a part of the job to complete on your own. Talking about web applications, this means whole vertical portion of a website: create db tables, create models, controllers and the views for one functionality.

However, most beginners don't have such opportunity - to balance between being tutored and working on their own - so most of the time they should just try to get the most from the circumstances.

share|improve this answer
add comment

I always learn better if I have someone else who's worked with the tech before. The key to is involve yourself and not let them do all the work. If I work through the problems and use the other guy as a resource to understand language/lib idioms, paradigm, and general gotchas I always pick it up faster.

share|improve this answer
add comment

I think working from scratch you will learn more about the complete framework quicker as an existing project built by someone else will have done a lot of the initially app framework development already. You can also do cut and paste development on an existing system. The disadvantage from building from scratch is you will make a lot more mistakes, but as long as you learn from them...

share|improve this answer
add comment

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.