Upfront design is the key to flexible and maintainable software. Peer reviewed, simplified, unoptimized design gives you a great base to start writing great code. It is akin to listening to a shakespeare play before writing one (as opposed to just winging it as you move along) .
E.g. simple statement like "if (string == "hello")" in C++ could mean that == is overloaded and if it accepts an object string, "hello" invokes the copy constructor for string object and passes it to the string object's == operator, which might do a char by char comparison, and then the unnamed object "hello" is destructed.
You generally don't care about this for business logic or if your website is getting one hit every few seconds, but if you are getting a million hits per second, you need to start optimizing the way you do things, you'd need to know which of L1/L2/L3 caches you'll miss, what'll be the real impact of your code. C, without the fluff, gives you lesser things to worry about.
C will be relevant because no other new language is trying to replace it.
So H1B's effect on long run wages would be better study. The causality of non-normalized reduction in fixed-wage is too chaotic to be attributed to H1b only. Note the year of study. It is 2009-2010, which was height of the depression.
2.Have a structure to it. E.g. Would start at 8 am on Saturday, finish on 8 am on Sunday, upload demos by 10 am, and do anything using X library in python.
Then just let the participants do whatever they want, don't unnecessarily linger or ask too many questions. Remember, people are there to enjoy themselves, and code whatever they think is a good project. Don't judge.