#summary Melange 2013 Summer Student Orientation Topics
#labels Importance-Useful,Phase-Guidelines,Contents-Complete

  * *Code Drafting*
    * In previous years we’d said “just follow the form of the code around you and you’ll be fine”
      * We now recognize a lot of bad patterns in our old code and we are working to eliminate them
    * Look at the code around yours and learn from its expression, but don’t necessarily follow it without thinking through the choices available to you
    * git branches are for making mistakes and trying out things. As long as it’s not on the master branch, go ahead and do whatever you like.
    * Plan on including running tests as active demonstrations that your code works.
  * *Code Review*
    * Receiving end
      * Who’s been reading the code review discussions on melange-soc-commits@?
        * You all should be.
      * Make sure you’ve read the [PythonStyleGuide Style Guide] and that your code conforms to it
      * Ask for review when you're satisfied with your own work
      * Having your work critiqued can be stressful but it shouldn't diminish your long-term quality of life
      * Be prepared to answer questions about why you made design and implementation decisions
    * Giving end
      * Please jump onto any code reviews. Ask questions about what doesn’t seem clear.
        * Because Melange is a project that has contributors of all skill levels continuously joining and leaving, it is important that all Melange code be easily approachable by everyone.
  * *Productivity*
    * Don’t go dark.
      * It’s the single biggest indicator of students succeeding or failing.
      * There’s a capability dynamic about which I want everyone to be very clear:
        * The mentors have a lot more knowledge, but very little time (because we all have other things that we’re doing)
        * The students have a lot more time (because Summer Of Code is a forty-hours-per-week full-time commitment) but very little knowledge.
        * It’s not symmetric. It’s not supposed to be.
        * The students’ job is to produce as much as possible. The mentors’ job is to refine that production.
        * Just like an airplane wing cannot provide lift unless the aircraft is moving forward through the air, so our mentors cannot provide guidance without student work driving the conversation forward.
  * *Mailing lists*
    * Everyone should be subscribed to, and reading every message on, every list: melange-soc, melange-soc-dev, melange-soc-issues, melange-soc-commits, and melange-soc-build. The traffic is reasonably light.
  * *Meetings*
    * Our current meeting time is weekly on [http://www.timeanddate.com/worldclock/converted.html?iso=20130611T10&p1=224&p2=0 Tuesdays at 10 a.m. America/San Francisco]. If that time doesn’t work for you, let us know and we’ll move it.
    * Our current meeting technology is Google Hangouts. Try to have a working camera, microphone, and speakers/earphones.
    * Make arrangements to maintain some persistent textual interaction with your mentor - chat, IRC, a daily email thread, or something like that.
  * *Evaluation*
    * The only chisled-in-stone rule here is that your work at both midterm and final will be judged in terms of what has been included in the Melange master branch, not what might be half-completed and buggy and still-in-progress elsewhere.