Student Developer Community

The goal is to build a developers community of students doing or have done software academic projects during their studies. The community consists of volunteers with specific expertise who are willing to contribute their time in educating and directing small semester-wide academic projects, and volunteer students who actually do the project as part of their graduate or undergrad studies.

My Project Guide is intended for graduate and under-grad students in computer science who are doing or want to do software research projects. The web site provides comprehensive background and assistance for doing such projects. It also connects the students with prospective mentors and experts in the project area.

The web site serves two main purposes: (1) help a student successfully produce high quality software research project, and (2) help the faculty advisor or mentor get the maximum potential of the project students in their research.

Why is it useful?

The computer science undergrad or graduate program in many countries such as USA and India require or encourage a final year project or research project.

Lots of experts have ideas on new projects or small extensions to some existing projects. However, they do not have enough time or resources to invest in completing the project. On the other hand, a number of undergrad and graduate students have no idea of what projects are interesting and doable. Combining these two sets of people can reap many advantages.

Existing systems: and provide online resources for opensource projects. However, there is no community of experts guiding newcomers on projects. Existing student developers community is targeted towards specific platform or tools, such as MIT-Microsoft’s iCampus for .NET, Sun’s for Java, etc. Because of the commercial interest, the community gets limited and not very attractive to students. Google Summer of Code is an attempt in the right direction. Gurukul: My Project Guide is another attempt of connecting student developer community with open source projects and mentors.

We will have an online directory where one can lookup for past projects. The directory provides prototypes of completed projects. These prototypes can then be licensed to startup companies that want to further productize the idea. The licensing revenue is shared among the students who did the project and the volunteers who provided the guidance and ideas. The goal is to build a community of volunteers.

What does the community do?

Information sharing:
Tutorial on common things such as how to use make, configure, CVS, gdb, etc.
Domain specific sections that give more details on programming in specific domains, e.g., how to do audio-video programming, how to build telephony applications.
Online repository of all past projects including source code and documentation.

Expert guidance:
Mentors communicate with project students on specific topics and guide them through the project. Mentors don’t write code or document; the students do.
Mentors help in creating shorter milestones, and keep a tab on the progress.

Who are mentors?:
Mentors are not professional experts but just people who have worked on a specific topic. It is a volunteer work. To become a mentor, either you have to be a professor, get recommended by a professor, or can prove that you have worked (as a programmer) on that specific topic for which you want to be a mentor. Usually we will have one-to-many relationship between a mentor and students. We don’t want to cause confusion by having multiple mentors in the same project topic. However, students can ask the community for advice on other things beyond the knowledge of their mentor.

Social network:
The community allows evaluating/rating the quality of previous projects by those who are using the previous projects. The mentors and students provide constructive feedback to each other. Multiple students doing similar project can communicate and share ideas and work load.
A student, who has successfully done a project, can then become an expert on future projects related to that topic.

Style guidelines:
The community will honor different programming styles. However, there will be some common guidelines that must be followed: e.g., javadoc/doxygen style documentation for APIs, video of demo-able software showing how to run the demo, common ways of compiling using make tools or visual studio for C/C++, common style of one page executive summary of the project.
The goal is to build small pieces or tools to do small and single thing at a time, instead of building a massive system that does everything. However, multiple projects can later be combined to build umbrella projects.

Portability and platform/tool independence will be encouraged. Thus, although students can do Windows-specific GUI applications, we will highly recommend projects using Qt, Wx, Python, Java or other portable toolkit. Similarly, HTML or PDF documents will be preferred over Microsoft word, ‘.mpg’ video format will be preferred over ‘.wmv’, and so on.

Open source and open standards:
All the projects will be open source and (L)GPLed. Use of open standards will be encouraged instead of using proprietary technologies. Thus, a project on building a GTalk client based on XMPP is preferred over Skype client.

Intellectual property:
The intellectual property (patent) related to a project, if owned by the mentor or student, must be disclosed, before the start of the project. A detailed write-up of the project idea with conception date will be published on the website before starting the project, so that no further patent applications be filed related to that project. If the mentor or the student violates the terms, their names will be removed (without removing the actual project), and a note will be made on the project site. Any project that is reported to have infringed on any existing or earlier patent, will contain an explicit note indicating the same. We also encourage publishing the idea on other sites such as on site or your personal web page to establish the work as prior art.

Practical projects:
The goal is to do projects that can be used in real-life and are practically useful.

We will provide server infrastructure such as DNS, file storage, media storage, gateway, etc., for doing networking project experiments. For example, if a student needs a SIP server but doesn’t know where to host it, we can host it on our site, and reuse it in future projects. We may be able to use the PlanetLab infrastructure.

More to come
While finishing my PhD I started on and have been working on and off since then, on summarizing my experience as graduate student doing and mentoring research projects. The documents contain specific domain information on doing good quality software research projects in Internet real-time multimedia systems. I plan to finish the documents and put it as an online book. This will help IRT-style projects.