Drumbeat/p2pu/courses/readingcode

From MozillaWiki
< Drumbeat‎ | p2pu‎ | courses
Jump to: navigation, search

Course Description

In the Open Web world, we are often working with other peoples' code. This code might be a small standalone Python module or Ruby gem, or it might be a massive open source project. With small or new projects, the code itself might be the only documentation; with large open source projects like Drupal or Django, too often it seems as if we draw a black box around the "core" code and label it "magic". When we have a question or a bug, many times we Google for an answer rather than going to the primary source.

The Reading Code course will remind us that there is no magic-- only logic. We will dive into the mini universes of open source projects and learn techniques for getting oriented, debugging, and simply getting comfortable reading code.

Who are You and Can you lead this course in September

Jessy Cowan-Sharp. I can lead this course this September.

Major Project

The major project for the course will involve writing a series of documentation pieces to either add to, extend or improve documentation for the various projects we cover in the course.

We may decide to collaboratively write documentation for some of the smaller projects, and/or have people document different sections for the bigger projects.

Format and Structure

Each week we will plan to cover one open source project. During the week, participants will read the code sections on their own, and there will be an ongoing chat room, (possibly with people signing up to be present during specific hours) to support discussions and questions.

We will try to cover a variety of project types and languages,and for each project and/or language, specific tools for reading, debugging or understanding the "stack" will be introduced

During the weekly in-virtual-person meetings, a different person will lead each session and together we will go over the section of code assigned for that week, discussing our understanding of what is happening, techniques employed, and areas we found difficult to understand. At the end of the in-virtual-person session, the next week's subject matter will be introduced.

Initial list of proposed projects (balancing languages, familiar/popular frameworks, newness (older and cruftier or well developed vs new code... (will be culled down at some point))

  • drupal or wordpress (php)
  • django (or tornado) (python)
  • jquery/protovis/raphael (javascript/javascript viz)
  • nodejs (javascript)
  • mongodb? (c++) or one of the mongodb language drivers (ruby/python)
  • Rails
  • Erlang? Haskel?
  • firefox s3:// extension (ec2/s3)

Language/framework inspection and debugging tools

  • print statements
  • firebug/chrome developer tools (javascript)
  • strace
  • server log files
  • ... more here (add your suggestions!)

What you Should Know

  • Basic programming constructs (for, while, if statements, etc.)
  • Additional experience with math and/or logic wil surely be helpful.

What you can Expect to Learn

  • Code Reading comprehension
  • Exposure to different languages
  • Ability to orient and understand what is happening in the middle of a big project
  • Debugging tools for different environments and languages


What you Might Learn if you Work Hard

  • You might end up submitting a patch if you come across bugs or have ideas for enhancements

Thing we won't Cover

  • Writing code
  • We won't cover Installation and configuration of these tools, although it will probably be helpful to have them installed (to tweak/explore/break them!), and there will be indirect/informal support via the chat room for doing this.

What Will I build?

You won't necessarily build anything for this course although you will be "building" documentation

Courseware

  • No courseware other than the code we read