Some tips for your Google Summer of Code Application


November 13 2017 in Programming | Tags: | Author: Christopher Rackauckas

Google Summer of Code (GSoC) is a highly prestigious and rewarding opportunity for both students and the mentoring institution. Lots of people want to participate in GSoC, yet institutions are limited in who they can take. This means that applications are competitive. How do you break out of the pack?

I wanted to write this blog post because I believe there is a big gap between what students believe is important in an application and what is actually important in an application. This will be a very frank and straight to the point (but purposely pessimistic) explanation of why some things matter, and why some things don’t. What I would like to do is help you (some student) re-orient your thinking about application processes. While this is written for GSoC, this thought process definitely applies to things like graduate school applications and external funding (fellowship and other award) applications.

I got into the graduate schools I wanted, got a bunch of fellowships, got some good postdoc offers, etc. so some would say I have done pretty well at this. Now that I have just reviewed many GSoC applications, I realized that many students don’t understand the “central rule” to applications. This is what I’d like to share.

The central idea that you should keep in mind while writing any application is pretty simple:

Remember that the PEOPLE who are reading your application are PEOPLE

Yes, there is a human being reading your application, and at times people are selfish and sucky. We all have our own lives and have our own interests, and our interests matter to us. This idea is stupidly simple, but when you think it all the way through you begin to understand what matters and what does not matter in an application. You have to remember that you are writing to the reviewer, and you need to satisfy the reviewer’s tastes. And what are some ways that this matters?

Top of the list: showing you will finish

In GSoC, the institutions are dinged if projects do not succeed. In graduate schools, someone who doesn’t produce is wasted space/money. In a run-of-the-mill job, someone who doesn’t finish projects is a sunk cost. This has nothing to do with “how smart” the student is or “how cool” the project was, it’s a simple “is there output?”. So, covering my own ass, the first thing that I care about while reading applications is: is this person at least going to get something done?

This means that the very first thing I check for in each GSoC application is indicators that you routinely finish things. I don’t care about big school projects which were life or death to you: of course you finished those. But on a day to day basis, is it just part of who you are to get things done? Some indicators I found for GSoC were:

  1. What previous PRs and commits to relevant packages have you done? Have you worked to take PRs to completion, or just let them sit after being reviewed?
  2. Do you stay active on the message boards and chatrooms? Or do you sometimes disappear?
  3. Do you have other commitments?
  4. Your personal projects which highlighted in your application and on your Github: do these look reasonably complete? Do I see documentation and CI testing?

Yes, the very most important thing to me is that I will get something out of the project and that the project will not be a problem to me. Slightly selfish? Sure, but we all are. Remember: I am a human too, with my own career and wanting to push this forward for my own reasons!

What I highlighted above are what I think are good indicators that a person can complete a project. If you have PRs and well-documented/tested personal projects, I think to myself “at the end of the day, even if this student isn’t able to completely handle the full project, I could at least expect this student to contribute some killer docs and tests, and leave a trail of PRs that would make this easier for the next person”. The fact that you have showed me that you can guarantee some amount of success puts you on the top.

But, the next thing I care about (and not far behind) is:

Very important detail: showing you can work independently

Again, I am a human. I have a career, I do sleep sometimes (some people think I never do, but I have to every once in awhile), I have stuff I need to get done otherwise I lose my money and I can’t eat. I do care about you, but I can’t do your project for you. So the next thing which is very high on my priority list is: how much can you work by yourself?

I’m not saying that you have to be completely independent (I wouldn’t expect it… I mean, you’re a student looking for mentorship!), but you need to demonstrate that it will be more beneficial to me to have you around than it would be for me to do it myself. What I want to see is:

  1. When we discuss ideas, do you open up Github issues and summarize roadmaps, or do you wait for me do it?
  2. For “easy” beginning parts of the project, do you take a stab at it? Do you make a prototype and ask for feedback (and use this to clarify the goals for the application)? Or do you wait for me to present you with some challenge?
  3. Do you have personal projects? Or is everything for school?
  4. Do you look for and ask for resources on specific topics?

If you do not demonstrate some form of independence, you have a high chance of being a time sink. While I would love to help everyone learn, I don’t think I (or any academic!) has any time to “throw away”. If you demonstrate that I can just lead you to the right books and answer a few questions, and you’ll come back with at least elementary knowledge of the subject, I think that spending my time to “show you the ropes” is worthwhile. If I would have to tutor you, I feel my time is better spent elsewhere. Show me that I don’t have to tutor you.

Still pretty important: making sure that someone else cares about the project

In any case that you are looking for funding, you have to make sure that somebody else cares about the project. I don’t just mean this at a superficial level, I mean that you need to make sure that someone on that board reading your application will go out of their way to make sure you get funded.

In GSoC, this is very apparent because in order to get a spot, you need a mentor. You can have a great project which everyone agrees is a great idea, but if you don’t have anyone step forward to mentor it, then you’re out of luck. This is also why people often suggest with graduate school applications that you pick a professor you would be willing to work with, get in contact with the professor, and establish a rapport with that person. If you get one person who really wants you to get accepted, your chances increase tremendously.

So, when choosing a project, you should pick a project you are interested in, but don’t develop the idea all off on your own and upload it on the last day. Discuss it with possible mentors. Sometimes people will give you input in what they would like to see so that they are interested in your project. You will likely have to concede in some directions, but it’s okay: when you’re new to a field it’s hard to know what’s actually interesting anyways!

So I would highly suggest making sure someone is committed to mentoring you before you submit your application. If you cannot find someone, post on the message boards and try to find out how you can modify your idea to get someone interested. Sometimes it’s not even that difficult: “statistical modeling with method xxx” can be changed to “statistical modeling with method xxx in econometric applications”, and suddenly new people may find your project interesting and worth their time to mentor. The only way to find out is to ask.

Still important: showing that you know things

Notice that, to this point, I have actually not cared a single bit about what you wrote down about your project. This is actually the case with most applications. For NSF’s Graduate Research Fellowship Program (GRFP), most of the reviewers I talked to noted that first and foremost they are funding students and not projects. Similarly, a common practice in Silicon Valley right now is for bigger businesses (Google, Facebook) to buy smaller companies mostly to acquire the talent. When trying to find new people for a project, the very top priority is the people.

Along those same lines, when I am done looking at who you are and what you have done, I read your description of the project to find out about you. That’s right: I am not too concerned about the project! Google gives you time after the acceptances to modify the applications a little bit, so details can be fixed there. But what I can’t fix, at least in a short timeframe, is your understanding of technical details. You don’t need to know everything, but if you can’t demonstrate that you had the ability to read up on the topic, ask questions, and have some semblance of understanding what you’re talking about. Otherwise, I might be wasting my time, and again, I don’t want to waste my time.

The main things I look for in a project description along these lines is:

  1. Did you write specifics, or could you have gotten this off of Wikipedia?
  2. Does what you’re proposing actually make sense given the infrastructure and practices of the language/discipline? Or are you copy/pasting ideas from other languages/disciplines/fields in ways that may not make sense if thought through more completely?
  3. For anything mathematical: were all of your terms clearly defined? For anything that requires a proof, do you point to good resources or give a quick memo on how it’s proven? Or are you copying formulas?
  4. Is there any originality in the descriptions? Is it modified to this specific project? Do you give examples that I will care about (or that you would care about, given your interests that I saw earlier), or are they very generic?

If you don’t have specifics, I am going to assume that you paraphrased some book or website’s description of the subject without understanding it. You might think you’ve gotten away with it, but it’s painfully obvious when this happens. For me, I know what the first few paragraphs of Wikipedia generally say on numerical differential equations, I know the examples they give, and I know the same for the top few books in the field. No matter what you write down, if you’re new to the field then I am pretty sure I could guess the source you used even if you didn’t cite it. You’re not going to pull a fast one on me. You can expect the same for every piece of background in your application: someone who is reading your application knows that background better than you.

So what I care about is, how did you modify what has already been said? As an admin to Julia’s Google Summer of Code, I would expect to see algorithms and problems reformulated in ways that can easily lead to results and performant code. Some cool things about Julia are its type system (and its associated performance), built-in parallelism, and scientific computing libraries. If some approach was done in some other language, you better present a good argument that this setup actually applies to Julia as well. If an algorithm in a description is usually considered “bad” but is clearly parallelizable, mention “but maybe this could be parallelized by doing something like xxxxx, in which case previous analyses don’t really apply”. And if the description of your overarching problem has an interlude into some subproblem that could be handled separately, mention how to do this.

A good example of this last point is that many numerical mathematical problems boil down to nonlinear solving or numerical linear algebra (actually, the first is just numerical linear algebra as well). So, pretty much no matter what topic you’re reading/writing about, you’ll probably see some F(x)=0 problem show up. The book/website, being a self-contained piece of mathematical knowledge, will probably mention Newton’s method and proceed to have a small derivation of what Newton’s method looks like in this context. Most people would just copy this down. But you know what would make me really happy? “This nonlinear problem can be solved with NLsolve.jl’s Newton solver. There are standard improvements that are done in the field (cite), but a first approach can ignore these details”. With just that one statement, you have showed me that:

  1. You know what you’re talking about, so you’re not just copying what has been said before.
  2. You know how to skip unnecessary details to make sure stuff gets done.
  3. You actually know something about the language you’re going to be using (you found a package which is a solution).
  4. You understand the problem well enough that you can identify alternative tools and methodologies.

Just like this, everything you read and write should be interpreted in the lens of your project and how you’re going to get it done.

Somewhat important: showing that you actually care about the organization and the project

Now we’re getting to the tie-breakers. At this point, no matter what you’re applying for, those previous details have already led to a general ranking. Those who are independent thinkers who have demonstrated some ability to understand the project and complete projects are at the top, and at the bottom are people who will be a time sink.

Then there’s the middle. Given that I already have taken a good look at what your abilities are, the one thing left that you can show me is that you care. Do you actually care about this at all? For GSoC, are you on the chatrooms and message boards helping people learn Julia while evangelizing it yourself, or is this just your summer project (learning Julia is pretty hip right now)? Are you doing school or personal projects which will need your GSoC project in some way, or is this some random application that may be over here because you think there’s a higher chance of acceptance?

What I want out of GSoC is to have a student who learns about a subject, completes a project, and over the years continues to build upon what he/she has done as a regular contributor to the org. I would prefer to find a new colleague over just a summer student. If you are engaged and just show that you care, not only do you show that you have a better chance of wanting to succeed, but you also show that you have a better chance of sticking around, making you a good investment. Again, I am a human too, and I want to make sure I am investing my own time wisely.

Essentially no importance: showing past achievements without a reason

Now at the very bottom of the list is… everything else. Everything else in your application I personally do not care that much about. That’s right: if it did not fit into the narrative of demonstrating that you complete things, are independent, are knowledgeable, or are “dedicated to the cause”, then I don’t care about it.

Sadly, this seems to be what most students focus on. Sure, run everything through grammar/spell check, but the lack of typos and better sentence structure won’t make you a different person. Please don’t put your school or your GPA at the top of the application. Most likely, I don’t know your school or how it ranks, nor do I care. GPA is an indicator that “you know things”, but there’s a large chance that your schoolwork is mostly unrelated to the project and thus it’s not an indicator that you know stuff that I care about. If your previous work experience wasn’t used to build a narrative about how you complete projects, then it’s just a big piece of filler that I won’t remember. And that leads me to my last section:

The people reading your application have to discuss your application with other people

For some jobs or university applications, people sit in a room and discuss. For GSoC, it’s remotely done through email and other means. But in the vast majority of applications, after reading is the discussion.

There’s a time gap in there, and that is a very important fact. Remember all of those work experience details that I said I didn’t care much about? Remember how I didn’t really care about what college you’re at? Well, by the time we actually start discussing applications, there’s a good chance I don’t even remember these things. I have the title of your application right nearby, and it is supposed to jog my memory about your entire application. I’ll dig back in there for details occasionally, but the vast majority of the discussion is about what I remember about you.

And do you know what sticks? Details! In the discussion, you may even become “the xxxxx guy/girl/person”. You’re “that guy”. “Yeah, the guy/girl/person who did a bunch of PRs too xxxxx, he’s at the top of my list”. “The guy/girl/person who botched the explanation of xxxxx? Did you catch that?”. Something about you will stick, and it’s best you make sure it’s your previous engagement with the project and your ability to complete it. The more I can easily recall about you, the more I will discuss you and, most likely, the more I will be rooting for you. If you have not shown me a reason to care about your project, I will probably forget about it.

This means you should try to work with me (and other mentors of course!) as much as possible before you submit your application. Ask questions, discuss possible projects, and let me notice you around in the chatrooms/message boards. When I see your application, I will see your name and it will build a big stack of memories. When discussion time comes, I will know who you are, and you will have separated yourself from the pack. Everyone else is a name on a paper in an application, but you are someone that I hope wrote a good application.

Conclusion

I walked you through some details, but you can come up with your own ideas from the general principle: always remember there’s a person who is reading your application, and they most likely care quite a bit about what you’re applying to. You have to show that it’s in their best interests for them to take you in. Everything in your application should be geared towards that goal, and anything that isn’t useful for achieving that goal simply isn’t useful. Again, this is somewhat overly pessimistic, but I have found that it’s a good thing to keep in mind.

I hope this post guides you to a successful application in your future.

One thought on “Some tips for your Google Summer of Code Application

  1. Your blog has nothing to do with JuliaGSOC!
    It is what every student, everywhere, should not just know, but should be.
    In my very limited experience, I think that generally primary school teachers actually place a significant amount of importance on these issues. It seems that as we climb higher in the educational ladder, we end up focusing so much more on the trees than the forest.
    I know that grinding through massive amounts of material is, historically, a treasured part of the college experience.
    But, as an educator, what do you think of this idea: school year is divided into 3 trimesters; students devote each trimester to a deep dive into one “area”; after 3 years, every student has 9 areas where he/she is an authentic force, and is ready to graduate. For those who wish, a fourth year could be devoted to (actually post-graduate) work in their choice from the 9?
    Just a modest proposal!
    Cordially,
    David C.


Write a Reply or Comment

Your email address will not be published. Required fields are marked *


*

This site uses Akismet to reduce spam. Learn how your comment data is processed.