So the Google Summer of Code 2009 is about to get started. So interested students better start thinking about projects they would like to do. We will try to get GStreamer accepted as a project also this year, so I been spending some time going over our ideas list and student guidelines from last year, removing stuff no longer relevant and trying to improve the text and information in the existing ones.
I have also been pondering what works well and what works less well. One thing is clear to me now, which I didn’t see as clearly last year, is that you should not sign up as a student for a summer of code project to do a loosely defined project, unless you have your own clear vision for it. The GStreamer project, and I think this is true for most participating projects, can provide you with great technical mentors, who can answer almost any coding related question you might have, but we can not provide you with a ‘vision’ for how an application should look or what it should do. So if you do not have what you personally feel is a great vision and idea for an application, one that you are able to work on without getting a lot of high level feedback, then you should instead try to do a project which is more clearly defined and specified. In GStreamer terms good examples of the latter is writing new encoders and decoders or muxer and demuxers, or any plugin providing support a well known existing technology. Cause by that you usually have clear specs for what needs to be done and can get maximum utility out of your mentor as the kind of questions you would have would be quite clear and concrete.
And doing this sort of project is also often highly appreciated. I know a lot of people who have been very happy because they have been able to utilize Thiagos Quicktime/mpeg4 muxer, which he wrote as part of last years summer of code.
That said, I do not want to discourage people from doing more ‘vision’ based projects, but I am sure that on the GStreamer ideas list and on many other projects list you will find what are essentially quite loosely defined ideas. Those can be great projects, but just because someone has posted such a loose idea, do not assume the project or person in question has got a clear idea about the details. So if you want to take on such a project (or propose one of your own conjuration) make sure you have a clear inner image of the application you what to write. If you get accepted and your first question to your mentor or the mentoring organisation ends up being ‘so how should I do this?’ then there is a big chance your project will fail.
Another thing worth mentioning is that all projects listed on such ideas pages are not the be all and end all of possible projects, if you have a great idea of your own then propose that through the Google Summer of Code application page. As long as your idea seems viable and you come of looking like someone able to pull it off, then most of the larger projects at least should be able to provide you with a mentor for that project. Just be sure before you submit your application to read over it and think to yourself ‘if I read this would I understand what he/she hopes to do and do I get the feeling this person has the skills to pull it off’.
The skills part is important, cause even if the Summer of Code do provide you with a mentor this mentor can not take you from nothing to glory (most bigger organisations have done the Summer of Code enough times now to realize this and thus not accept applications which do not fill them with confidence). Instead the mentor can help you hone your skills and be someone you can bounce ideas off, but you have to do a lot of the legwork yourself. A Summer of Code project is more like doing a thesis than being taught something in a class. You are mostly on your own, but you have someone to check in with from time to time to verify that your general ideas are sound and that you are on the right track and get answers to specific questions.
Anyway I keep people posted on when/if GStreamer gets accepted and let you know where you can post your participation applications.