Main text is How Learning Works http://www.amazon.com/How-Learning-Works-Research-Based-Jossey-Bass/dp/0470484101/
Understanding by Design http://www.amazon.com/Understanding-Design-Expanded-Grant-Wiggins/dp/0131950843 is also useful
Mark Guzdial’s blog: http://computinged.wordpress.com/
Group 2 Round 1
- Introductions: see http://teaching.software-carpentry.org/category/biography/
 - Aims
    
- Learn what we actually know about learning and teaching
 - Apply that knowledge to Software Carpentry
 - Improve teaching (and learning) skills
 
 - First assignment
    
- Read first two chapters of HLW
 - Pick one small concept from http://svn.software-carpentry.org/swc/book/
 - Do a concept map for it
        
- http://teaching.software-carpentry.org/category/round-1-1/
 - If there are more than half a dozen bubbles or arrows, your topic is too big
 
 - Make up one example to illustrate the concept
 - Make up half a dozen variations on that example with a few blanks in each
        
- “Worked examples”, “cognitive load”
 
 - Explain how this concept relates to something a scientist might actually want to do
        
- http://software-carpentry.org/2012/10/25-questions/ is from http://teaching.software-carpentry.org/category/round-1-3/
            
- The “combined” posts in that category are all worth reading
 
 
 - http://software-carpentry.org/2012/10/25-questions/ is from http://teaching.software-carpentry.org/category/round-1-3/
            
 - Post result to blog
        
- Also report time taken
 
 - Comment on two other people’s posts
 
 
Our audience: http://software-carpentry.org/about/audience/
Graduation exercise: http://www.beasmartercookie.com/
- Post video of you teaching to youtube and get feedback from community
 - Musicians have been doing this for years
 - Will post examples and get feedback as part of “graduation” from this course
 
Notes
Hopefully you”ve all posted biographies by now
- Figure out what we know about learning and teaching
 - Apply these to Software Carpentry
 
We know a great deal about learning
- but fewer than 5% of teachers at universities are aware of it
 - the recommended book is the best summary of what we currently know
 - and the teaching practices this leads to
 
We cannot teach people to program in 2 days. We need to teach them how to think like programmers so that they can fill in the details.
- Our learners don’t have the conceptual framework they need
 - So they put the information in whatever framework they have
 - Book: http://www.amazon.com/How-Learning-Works-Research-Based-Jossey-Bass/dp/0470484101/
 
Task 1: Read the first 2 chapters of the book
Existing Software Carpentry (SWC) material is being placed in a book as a teaching guide
svn checkout http://svn.software-carpentry.org/swc/book
- Pick one small topic (e.g., “what is happening to the variable in a for loop”)
 - Make a “concept map” of the other ideas this topic depends on
 - Experts have richer set of connections among topics than novices
 - Can use pen & paper, drawing tool, etc.
 - If you need more than ~6 boxes your topic is too large
 - Part of instructional design is figuring out dependency chains so things go in order
 - When you say “we’ll get to this later” lose ~1/2 learners
 - Few lines of codes for demonstrating concept
 
Cognitive load
- There are things we need to learn
 - And then there is lots of other stuff that is confusing
 - This is accidental cognitive load that gets in the way of learning
 - for line in file: — makes people think that ‘line’ and ‘file’ are important key words
 - this is why Greg uses pet names for demonstrations in workshops
 - fastest way to learn is to show an example, then show them a couple of very similar examples with small gaps to fill in
 - This helps reinforce the pattern
 
Assignment
- Come up with concept (Task 2)
 - Come up with a concept map (Task 3)
 - Come up with example code ~6 lines (Task 4)
 - Write ~6 variations of the example with small gaps (Task 5)
 - Explain why the scientist should care (Task 6)
 - If they understand all 6 variations they understand the concept
 - These will be used in SWC workshops
 
We are going to communicate primarily through the blog
- Once you’ve decided on the concept, start your round 1 blog post
 - Then edit as you develop the map, examples, etc.
 - Develop pairwise interactions during this process, interacting with other folks in the group
 - First round participants will also be watching and potentially interacting
 
Should never go more than 10 minutes without having students do something on computers
Meeting online every 2 weeks
- We will try to meet the same time every other week
 
Ask questions early and often
- via mailing list
 - or on blog posts
 
Greg will post an initial blog post shortly
Subscribe to both SWC blog and teaching group blog
Having examples for teaching isn’t enough
- need to know why those examples
 
An Example of Worked Examples (originally written by Ethan White)
Original
def word_lengths(words):
    result = []
    for w in words:
        result.append(len(w))
    return result
Explain this function’s operation.
This function creates and returns a list containing the lengths of a series of strings. The list of strings is passed in as the argument words, and the local variable result is initialized to an empty list. The loop iterates over each string in the list. Each loop iteration determines the length of a single string using the function len() and then appends that length to the list result. The final result list is returned. An example of using it is:
>>> word_lengths(['hello', 'world']) [2, 2]
How would you test this function?
I would test this function using an empty list, a list containing an empty string, a list containing one word, and two longer lists (one with an empty string, and one without) as inputs:
>>> word_lengths([]) [] >>> word_lengths(['']) [0] >>> word_lengths(['hello']) [5] >>> word_lengths(['hello', 'world', 'goodbye']) [5, 5, 7] >>> word_lengths(['hello', 'world', 'goodbye', '']) [5, 5, 7, 0]
Q1: fill in the blanks so that this function does the same thing as the one above.
def word_lengths_2(words):
    result = []
    for w in range(___):
        result.append(___)
    return result
Q2: modify the first function to select certain words based on location. For example:
>>> get_words([1, 3], ['he', 'dog', 'cart', 'brass, 'pencil']) ['dog', 'brass']
def get_words(word_ids, words):
    result = []
    for w_id in word_ids:
        result.append(___)
    return result
Q3: combine ideas to return the lengths of only the words in specified positions. For example:
>>> get_word_lengths([1, 3], ['he', 'dog', 'cart', 'brass, 'pencil']) [3, 5]
def get_word_lengths(word_ids, words):
    result = []
    for ___ in word_ids:
        result.append(___)
    return result