We are working on a collaboratory for Product based Learning. The participants in this collaboratory, actually build software products at every stage of learning. We decided to do this since many of the schools do not teach programming in the context of building something useful. A developer needs to learn more than just coding. By making them build products that others can use, we increase their visibility to real life issues as developers.
Almost every writng on How People Learn talks about Learning by doing as the most effective learning strategy.
- Having a specific problem to solve provides a context for learning.
- Alternative (and more elegant ways) to solve the problems show the power of different styles of programming.
- Product based learning also involves people. This allows them to remember what they learn since they are actually applying.
- Having something you built being used by others provides a greater incentive to make it better. It teaches something that they can never learn in simulated situations.
Our collaboratory is not about content. There is enough content on the web for people to use. What we plan to provide are some ideas for building products, identify skills required to build them, provide mentoring. A learner of the academy will start with a simple individual project and progress to team centric efforts. Here are some ideas on how they can progress from simple projects to more complex ones.
There are several good web component frameworks. Google’s Gadgets, Microsoft’s Live components, Yahoo’s widgets are just a few. When you write components for any of these platforms, you also learn a lot about developing web applications. You can learn from some of the cool components that already exist.
Mashups are the easiest way to glue together something cool. But building mashups also teach developers how to reuse webservice and build on top of services already built by others. The instant gratification of producing workable, usable applications by simply layering on top of services will be one of the most rewarding aspects of learning.
Building some real-world web services (lightweight services)
In this stage, developers move from being consumers of services to providers of service. They will learn how to design services, how to test them and build a few sample mashups that others can learn and use.
There is one common thread across all these products – reusability. At each stage of learning, when the developer will learn how to leverage other components and how to build their own reusable components. This is the skill we need as applications becoming composition of services.