In Indian classical music, we have Jugalbandi, where two lead musicians or vocalist engage in a playful competition. Lets say there is jugalbandi between a Flutist and a Percussionist (say using Tabla as the instrument). Compositions rendered by the flutist will be heard by the percussionist who will replay the same notes, but now on Tabla and vice-versa is also possible.You can find additional information on [this wikipedia page] (http://en.wikipedia.org/wiki/Jugalbandi).
In a similar way, we perform Code Jugalbandi to see how solution to a problem looks different using different instruments. There would be multiple such rounds during the Jugalbandi, where the Jugalbandists would change instruments to give the audience a feel of solution rendition using different instruments.
Our hope is that a Code Jugalbandi session -
- Would give people confidence that being polyglot can be within their reach.
- It can also become a source of inspiration to try out a new stuff, be it languages or frameworks or anything etc...
- Promote learning by comparison and contrast - a natural way for human mind to grasp new things.
- Also, people from one camp can peek at the other camp and tell themselves - "ah look! its similar! or it does that better!" etc..
After proposing the idea of CodeJugalbandi - http://www.jroller.com/DhavalDalal/entry/code_jugalbandi, it was time for me to test the idea out. Having discussed it in our Functional Programming discussion group (Aslam Khan, Ryan Lemmer and Jaydeep Kulkarni), they all thought it was a novel idea and we should give it a try.
@ryanLemmer and @softwareartisan went ahead with CodeJugalbandi's materialization. Ryan brought in the idea of Melodies to
do multiple code jugalbandi rounds. Like in real musical Jugalbandi there are the two roles - the creator (and player) and the listener (and player), Ryan suggested that we give creative names to the jugalbandists who participate.
So to put things in perspective, the creator of the melody is called Bramha and the other(s) who listen to the melody and play accordingly is/are called Krishna.
Code Jugalbandi Notes, Sketches, etc
Structure of a Demonstration
- Intro to musical Jugalbandi, play this video (I know the resolution of the video is not that great, but I found (based on search results I got) it to be the most apt video to convey idea in less than 2 minutes to a large audience) and let it speak for itself.The audience is smart enough to relate Musical Jugalbandi to Code Jugalbandi.
- Introduce the opp person (this assumes you have 2 people, but if you have more scale it accordingly).
- Make it clear to the audience to not focus on syntax and its okay not to follow through syntax, but really capture the essence of things beyond syntax.
- Each Jugalbandi round is a melody. Aim for about max 15 mins per melody.
- During the melody, limit the code lines visible at any given time to a max of 10, so that it reduces the cognitive load.
During a melody
- Say you are the Bramha of a melody, and when playing (showing - demo) your melody, you can do loud thinking and/or soliloquies as you code along.
- Once Bramha is done creating, Krishna replays the same melody differently and again thinks aloud while demoing it.
- After both Bramha and Krishna are done, they converse reflecting upon the approach, pro and cons of each. This natural conversational style, like the fire-side chats will be very reinforcing and involve the audience.
- At the end of a jugalbandi round - both bow down to the audience to indicate completion of the current round.
Repeat the above for multiple melodies.
Additionally for a Workshop...
- Exercises help participants reify the concepts and thus involve them completely. Follow each melody by an exercise for the audience.
- Ask each participant to find a new fellow jugalbandist per melody and perform a code jugalbandi between them. This, in our view will maximize learning.
There are many jugalbandis that can be materialized, for example, our current focus is on:
- Exploring Programming Paradigms
- Functional Programming
but not limited to it, Here are a few others that we intend to explore:
- Exploring Concurrency
- Exploring FRP
- Design Patterns
MV* frameworks - AngularJS, KnockoutJS, EmberJS, Backbone etc... You could use it to enable learning of frameworks (or anything else) by comparison and contrast - a natural way for human mind to grasp new things. Participants can see can see how each one solves the same thing differently.
So just be creative in applying this Code Jugalbandi style to suit your context. Use Code Jugalbandi as a source of inspiration or a gentle nudge for people to try out a new stuff :-)
If you feel you have liked the idea and want to contribute, we encourage pull requests. Alternatively, if you have your own repo somewhere, please send us the link and we will link to your repo from this main page.