#summary Melange 2014 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
      * Be clear about whether or not you think your code is ready for integration.
        * It's okay to push commits that say "FOR REVIEW ONLY" when you're asking for an opinion.
      * 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=20140502T1630&p1=0&p2=505&p3=2255 Tuesdays at 4:30 p.m. UTC]. 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.
