views:

368

answers:

5

I'm trying to teach myself how to use modern Persistence patterns (OR/M, Repository, etc) and development practices (TDD, etc). Because the best way (for me) to learn is by doing, I'd like to build some sort of demo application for myself. The problem is, I've got no idea what sort of application to build. I'd like to blog about my experience, so I'd like to build something of some worth to the community, but at the same time I want to avoid things that others are actively doing (web commerce, forums) or have been done to death (blog engines). Does anybody have any suggestions for a good pet project I could work on and maybe blog about my experiences with?

+1  A: 

Of course you could spend 6 monthes to choose an open source project and start little by little to be accepted and understands how the contribution system works.

But the best way is still to start your own project, with your own standards, that will probably be a faillure. You need to try, fail, and learn from mistakes to improve, using what you want to practice on.

Like a french writer said :

"A seated genious will always go less far away than a walking dumbass".

e-satis
I agree - I'll need to fail a few times before I succeed. Though I still don't have any ideas for what to fail at... Thanks though! =)
Erik Forbes
+3  A: 

I would say an excellent way is to start with the sample project for a core framework you want to learn or build your application around. Using Spring as an example, they have a great 'pet store' web application that you can download that shows how to use many different parts of the framework in the recommended way. From there, you can expand on it: check it into source control, get automated builds going, add your own unit tests or test-first additions, swap in your own ORM layer, try different view layers, etc.

Once you have everything working as you want, then you can branch off more easily and even create your own app from the ground up using what you've learned.

I find starting with a good base ('good' being important, as you want to learn the best practices and not just base your work on something hacked together by a random internet user) and building out really helps, as opposed to just starting with a blank project which can be overwhelming especially if trying to learn a bunch of new things at once.

Pete
+1  A: 

How about a website where people can ask tech oriented questions, and get responses from the collective expert community on the internets?

I think the most important aspect of a pet project is the fact that it HAS to be something that you care about and will use yourself. If you use it, and it is helpful to you, then others will find the same. If you are working on something because someone suggested it, then it becomes like work.

To play with TDD, I ended up creating a command line argument parser. I write a lot of console apps, and it was something that could benefit from, was interested in, and was fun for me. There are already others out there, but that wasn't really the point for me. I too intended to blog about it, but my other pet project for playing with patterns and architecture was a "done to death" blog platform... and blogging about writing a blogging platform using a blogging platform you are creating... well, that's hard.

In the end, neither of my projects brought much to the community at this point, but I've noticed the rewards in how I attack problems. Find something that you can benefit from, and worry about the benefits to others later. Be a little selfish.

NerdFury
You mean, like StackOverflow? =P
Erik Forbes
+7  A: 

There are innumerable community-service organizations with little or no web presence.

Pick a service organization -- any one -- Literacy Volunteers, Food Pantries, Home Furnishings Donations, Alcoholics Anonymous -- anything. The grass-roots community organizations benefit the most from involvement; they often need a more dynamic web presence but can't afford it.

Look at their current web site. Build them something better. Donate it to them.

S.Lott
Now this is a great idea, and something I hadn't considered before. Thank you. =)
Erik Forbes
That's a great idea.
David Robbins
+1  A: 

This is a very good question. I feel that this must be the feeling of many developers. Many a times we are restricted by the applications that we are developing at work. There may not be the opportunity to implement every greatest and latest thing.

I have the similar feelings. What I do is, I persuade my team to learn new things and share knowledge about the new technologies. I have started building my own some kind of project. It has very less real time use, but I can play with it.

For instance I am using EntLib at DAL, but tomorrow when I manage to learn LINQ, I will replace EntLib with LINQ. Probably LINQ to Entities. Then I exposed these DAL method using plain WCF. Then I learnt how to implement WebHttpBinding and exposed my WCF service using JSON. I have plan to now learn MS MVC and jQuery and do some ASP.Net/AJAX stuff in there.

Basically you should target the problem one at a time in small chunks. If you have time and zeal then first solution suggested here seems to be the best.

Good luck!!!

Pradeep
Thanks =) Good advice there at the end - that's the biggest problem I have, my personal projects tend to be far too ambitious, especially when I'm just trying to learn something new.
Erik Forbes