Wednesday, July 18, 2012

Final Project: Thank you; it was a pleasure!

An Authentic, Collaborative Community College Programming Learning Activity


Where this project came from

The culture of education


I have struggled with the tension among collaboration, assessment, and academic honesty in my computer programming classes.  Academic honesty is one of the dominant traits in the gene pool of education, to borrow Sir Ken Robinson's metaphorical description.  But what is called "cheating" inside school is called "collaboration" out  (Robinson, 10:17).  Changing this perspective involves "rethinking the basics," as Michael Wesch discusses in The Old Revolution.  A traditional educational paradigm of instruction and assessment is deeply ingrained in my current materials and outlook. 

The culture of software development


Collaboration is part of the culture of software engineering, the field of which computer programming is a part.  A large-scale piece of software cannot be built without a large team of software engineers and over a period of years. In addition, there is a culture of free and open source collaboration both in building, sharing, and discussing software on the Internet.

But software engineers have undergone a college education in which they learned their programming skills in traditional classes with individual assessment.  Most large-scale projects don't happen until junior or senior year.  At the community college level of education, students should be developing themselves individually so they are capable of contributing when they become more experienced and skilled.  There is therefore a tension between the need to develop individual skills and the need and desire to develop collaborative skills.

Internal pressures (from students) and external pressures (college and personal goals)


If we consider “digital native” (Prensky) to be a cultural description and not a generational one, I have felt internal pressures that challenge my traditional assessment methods from natives.  I prefer to think more in terms of the digital divide or digital inequality, as students of the same generation have widely varying levels of the native skill of functioning best when networked and learning best in a gaming or exploratory situation (Prensky). The natives know that collaboration occurs on the Internet.  The natives are accustomed to searching for and accessing and using information they find there.  Students want to relate their learning to themselves and to their perception of the real world, which includes Internet sharing and collaboration.  Complicating this is that programming is very difficult for many and the possibility of having questions answered exists on discussion boards and in code repositories on the 'net.  Both motivation to collaborate as in the perceived world and temptation to be academically dishonest (by Robinson's "inside school" notion of cheating) exist. 

Bestpractices to promote academic integrity in online education published by wcet suggest having "assignments and activities in which appropriate sharing and collaboration is essential to successful completion. Foster a community of integrity by choosing authentic learning tasks that require group cohesiveness and effort."

Employers are looking for programmers who have "soft skills."  They want programmers who know how to collaborate, who can clearly articulate their engineering ideas, and who can recognize when they don't know the answer to a problem and identify sources of information that will help them solve the problem.
These skills fit with many of the components of CCRI'sdefinition of an educated person.  I'm not interested in producing students to become cogs in the business machines of today (Robinson), (Obama), both a depressing and impractical goal.  I want and need to prepare students for their entire lives, which will necessarily include becoming life-long learners and divergent thinkers.  They will need critical thinking and communications skills.  I can't focus only on 2012 technologies that might be obsolete by 2015.  That is not how a person survives in my industry.
My project is therefore to develop an authentic and collaborative software development project for my more advanced programming classes.  This will satisfy my natives' desires to engage in what they perceive as authentic software development activity, our advisory board members' desires for students with both technical and communications skills, and my desire to help students become creative and divergent thinkers and life-long learners.

Authentic Activities in Online Education

There is reason to believe that students engaged in authentic activities or social pedagogies produce better work (Bruff).  Reeves, Herrington, and Oliver produced a list of ten design characteristics of authentic online activities from educational literature.  They are:


Authentic activities...
Description
1
have real-world relevance

Activities match as nearly as possible the real-world tasks of professionals in practice rather than decontextualised or classroom-based tasks.
2
are ill-defined, requiring students to define the tasks and sub-tasks needed to complete the activity

Problems inherent in the activities are ill-defined and open to multiple interpretations rather than easily solved by the application of existing algorithms. Learners must identify their own unique tasks and sub-tasks in order to complete the major task.
3
comprise complex tasks to be investigated by students over a sustained period of time
Activities are completed in days, weeks and months rather than minutes or hours. They require significant investment of time and intellectual resources.
4
provide the opportunity for students to examine the task from different perspectives, using a variety of resources
The task affords learners the opportunity to examine the problem form a variety of theoretical and practical perspectives, rather than allowing a single perspective that learners must imitate to be successful The use of a variety of resources rather than a limited number of preselected references requires students to detect relevant from irrelevant information.
5
provide the opportunity to collaborate
Collaboration is integral to the task, both within the course and the real world, rather than achievable by an individual learner.
6
provide the opportunity to reflect
Activities need to enable learners to make choices and reflect on their learning both individually and socially.
7
can be integrated and applied across different subject areas and lead beyond domain-specific outcomes
Activities encourage interdisciplinary perspectives and enable diverse roles and expertise rather than a single well-defined field or domain.
8
are seamlessly integrated with assessment
Assessment of activities is seamlessly integrated with the major task in a manner that reflects real world assessment, rather than separate artificial assessment removed from the nature of the task.
9
create polished products valuable in their own right rather than as preparation for something else
Activities culminate in the creation of a whole product rather than an exercise or sub-step in preparation for something else.
10
allow competing solutions and diversity of outcome
Activities allow a range and diversity of outcomes open to multiple solutions of an original nature, rather than a single correct response obtained by the application of rules and procedures.

This summer I performed my first experiment in providing an authentic activity to my students in my most basic programming class.  From the criteria above, this activity was highly scaffolded.  The following table includes my remarks on how closely my activity matches Reeves et al.'s criteria:


Authentic activities...
Description
COMI 1150 Activity
1
have real-world relevance
Activities match as nearly as possible the real-world tasks of professionals in practice rather than decontextualised or classroom-based tasks.
Clarifying software specifications is a real-world task.  However, I haven't taught my students a specification system such as Use Cases, which are widely used in industry.  I feel it would be too much.  (Maybe I'm wrong?)
2
are ill-defined, requiring students to define the tasks and sub-tasks needed to complete the activity
Problems inherent in the activities are ill-defined and open to multiple interpretations rather than easily solved by the application of existing algorithms. Learners must identify their own unique tasks and sub-tasks in order to complete the major task.
Because this is such a small-scale task, it's really not ill-defined.  The problems they're solving are ill-defined, but the problem of clarifying specifications is not.
3
comprise complex tasks to be investigated by students over a sustained period of time
Activities are completed in days, weeks and months rather than minutes or hours. They require significant investment of time and intellectual resources.
The process takes place over days and might require some research.  It definitely requires conversation with some give-and-take.  I don't know that I'd consider it a "significant" investment of either time or intellectual resources.
4
provide the opportunity for students to examine the task from different perspectives, using a variety of resources
The task affords learners the opportunity to examine the problem form a variety of theoretical and practical perspectives, rather than allowing a single perspective that learners must imitate to be successful. The use of a variety of resources rather than a limited number of preselected references requires students to detect relevant from irrelevant information.
There is a small degree of this in the assignment.  Software is naturally ill-defined, and therefore any specification is going to require students to imagine a range of execution scenarios that will push the limits of their understanding of the software they're building.  But in a very low-level programming class this is limited to small and relatively simple problems that are not real-world programming problems.
5
provide the opportunity to collaborate
Collaboration is integral to the task, both within the course and the real world, rather than achievable by an individual learner.
In this case, the task is small and can be achieved by an individual learner (although not all individuals in any given class).  It requires collaboration.
6
provide the opportunity to reflect
Activities need to enable learners to make choices and reflect on their learning both individually and socially.
The discussion of the specifications allows for reflection on students' choices and their classmates' choices.
7
can be integrated and applied across different subject areas and lead beyond domain-specific outcomes
Activities encourage interdisciplinary perspectives and enable diverse roles and expertise rather than a single well-defined field or domain.
The diversity in this activity is limited, because students are beginner programmers and offering them diverse domains in which to build software is distracting and requires a great deal of cognitive overhead.
8
are seamlessly integrated with assessment
Assessment of activities is seamlessly integrated with the major task in a manner that reflects real world assessment, rather than separate artificial assessment removed from the nature of the task.
Real-world assessment would involve an actual client using software.  This software is completely removed from real-world assessment.
9
create polished products valuable in their own right rather than as preparation for something else
Activities culminate in the creation of a whole product rather than an exercise or sub-step in preparation for something else.
One of my students suggested in the course evaluation that they build software they could use.  This is rather difficult when they're writing one-page programs at the most introductory level, but clearly indicates that this criteria is not met.
10
allow competing solutions and diversity of outcome
Activities allow a range and diversity of outcomes open to multiple solutions of an original nature, rather than a single correct response obtained by the application of rules and procedures.
There is actually more than one interpretation of specifications, and it's reasonable to assume that a well-informed software engineering team will guide the client in building the specs.  In this sense, it is not a well-defined problem, and I allow different teams to "convince" me (as client) to allow them to approach the problem in different ways.

This video offers a brief overview of the summer class.

This Project

In providing authentic activity for more advanced classes, I will have to address the following:
·         Create an assignment and determine how much to scaffold the project.
·         Determine the collaborative roles.
·         Create a rubric for both the final product and the process.
·         Determine the technology to be used and create instructional materials for the project.

Project/Scaffolding

Creating and scaffolding the assignment


The course that I'm completely redesigning for the fall is a JavaScript programming class.  I have blocked out my semester and determined that I can ask my students to collaborate on four one-week projects. These will be:
  • A simple website/CSS redesign that will involve no programming, just XHTML and CSS. 
  • A Facebook-like page without the server-side database support, therefore more of a temporary journal than a social media site (the interface will model Facebook's). 
  • A page of moveable widgets similar to protopage.com. 
  • Something with AJAX (the combination of technologies that makes Web 2.0 possible).  (Possibly a redesign of the Facebook page with some server-side support so the content doesn't go away when the page is reloaded.)
Each of these projects can be broken into components fairly easily, so students will be able to work autonomously but will need to collaborate to bring their components together into one working program.

Where this project can be more authentic than the summer assignment is in:
  • #2 These projects will be much more ill-defined and open ended.  They will be given real-world criteria (e.g. design for usability, design for accessibility) but they will not be told what the final project must look like.
  • #3 These are complete projects that are more complex than simply determining specifications.
  • #4 I will have to determine what sources on the Internet the students may access in working on these projects.  Students in this class like to look to Internet resources, often borrowing code they don't understand and can't modify. 
  • #9 The programs being created are mini versions of real-world software that could be used in their own right or enhanced by the students in the future.
  • #10 There is a great deal of diversity of outcome possible here.  I'm looking forward to seeing what the students come up with when faced with these more open-ended problems.

Collaborative Roles


For collaborative roles, I will break the project into pieces that each student will be responsible for.  Some initial collaboration will be necessary in determining how the pieces will interact (it is software, and because chunks of code have behavior, we do need to think about interactions between pieces of code).  Each student will then write his or her assigned piece (determined partly by me and partly through their collaboration).  Following that, I think a way to break up the rest of the collaboration is to make each student responsible for a rubric component (meeting functional specs, meeting design specs, communication through documentation, and program syntax).  Therefore if a student is assigned the communication portion, for example, the student would be responsible for checking the documentation in the entire program against the rubric (professional programming standards of documentation) and then either rewriting the docs where they do not meet standards or asking contributors to enhance their docs in well-specified ways.  I think I would make the rubric components worth less on the final product, and give each student maybe 20% of the grade based on how well the final product meets their component.  This is not an unreasonable way to break up software engineering tasks, as there are sometimes teams responsible for quality assurance (testing), specifications, and code. 

Rubric


I'm going to build the rubric using four sources.  The first is the rubric that I used for the less advanced class.  The discussion board portion of that rubric was built from several online discussion board rubric sources (University of Wisconsin - Stout) (Educational Technologies at the University of Missouri).

The second is the list of guidelines I wrote for the students initially and the follow-up guidelines I created from looking at successful interactions after the first week of activity.
The third is a collaboration I set up among my professional programming friends using a Facebook group.  I gave them one of my in-class assignments and asked them to collaborate, giving the same instructions I give my students.  I will pull some guidelines from what those software engineers did to offer guidelines in working toward authentic software engineering interactions.
Finally, I will use a discourse analysis paper called Critical Thinking, Cognitive Presence, and Computer Conferencing in Distance Education by Garrison, Anderson, and Archer.  I'm going to use Garrison et. al.'s criteria for critical thinking discourse to inform my rubric.

Technology


The course will use the Blackboard Learning Management System that we use for our courses at CCRI.  There is a text for the course.  In addition I will build quizzes and individual programming assignments in Blackboard.  Instructional materials will include videos created in Camtasia.  I am very familiar with both the Blackboard and Camtasia technologies.

The technological choice that I have that is new to this class will be the method of collaboration.  In the summer course my students collaborated in the Blackboard discussion board, with one group collaborating in the wiki.  The wiki was a superior tool for the students -- the discussion board was a superior tool for viewing the process of collaboration. 
Another good option in Blackboard is file sharing.  In order to create a JavaScript program, students will be creating multiple files that they can share back and forth using the file sharing, while discussing the files they've created and uploaded in the discussion board.  The issue here would be what is the most recent version of a file, and what changes does it contain?
An option that is open to me and that I'm exploring is to use the online open source version control system called GitHub.  I have never used GitHub before, but it was suggested to our department by our advisory board as a way that students could gain "real world" experience and demonstrate their skills to potential employers.
GitHub is not easy to learn to use.  I have thus far done the following:
  • To simulate collaboration:
    • Created two separate GitHub accounts.
    • Created a code repository in one account and uploaded code there.
    • Followed account #1 (with repo) from account #2
    • "Cloned" the project from account #1 to account #2, made changes, and "pushed" it back to account #1.
    • Accepted the "push" in account #1, which integrates the code written by both accounts.
  • Requested an educator account which gives me 50 free private repositories for my students.
I've set up the page for the assignment in Blackboard and created my first GitHub instructional video for my students.

What I've left to do is the following:
  • Write the actual assignment.
  • Learn the differences between the educator account and the other accounts I created.
  • Create the other instructional videos I've blocked out.
  • After carefully considering my references, write the new rubric.

Conclusion and Reflection

If I had not been challenged by this course to try a new technology, I would have implemented this project using the tools in Blackboard.  Using Blackboard tools would diminish the project in several of the authentic dimensions identified by Reeves, Herrington, and Oliver, in addition to diminishment from the perspective of those of my students who know that authentic software development occurs on the Internet.  Although distance learning courses use digital technology by nature, this particular digital technology (GitHub) is of a class of software tools not available in Blackboard (revision control systems) and that are used extensively by software engineers to manage the complexity of software development by a team of programmers.  A revision control system is the right tool for collaborative development of software because it is designed to help a team of developers manage versions of files that they are all editing.  This tool therefore enhances the course by offering the best possible tool for the students' task and also an authentic tool for that task; one that will be recognized by potential employers and that will allow students to share their work with potential employers.  Its use might also open the door for students to enter an authentic community of software developers on the web through the open source projects in GitHub.
Although I am intimidated by the learning and hard work I have before me, I'm convinced that the decision to use this tool and to provide this collaborative activity to my students is the right one.  Thank you for this opportunity to grow.

A post-script, if I may: I now feel obligated to discuss the cultural values reflected in popular video games in my Game Programming class.  There's no question that it is my responsibility to do so.  Thank you for introducing me to the language and tools I will need.  It will take further study and practice, but I am determined to do it, and very optimistic that my students will be receptive to the challenge of overthrowing the violent and misogynistic culture of gaming.
Post post-script.  I made three videos about making videos.  The first is How to Jing, and the second is CamStudio and MovieMaker.  The third is about editing in Camtasia, a full-featured product by TechSmith that is not free.

References







2 comments:

  1. Love the way you were able to think through all of this teaching work, Maggie. I will be interested to hear how things so when you implement this! I am so glad that the class gave you an opportunity to do so, and I certainly learned a lot from reading your posts, observing your use of the blog (how do you get the charts in there? And the pretty lines setting apart your sections above), and from the great videos you posted. SO glad you came to "play" with us this summer!

    ReplyDelete
  2. The class was enormously fun! I did learn a lot, and am finally finished creating (but not captioning) the github tutorial videos. I'm also going to write a text guide. I definitely wouldn't have pushed myself to do this if it weren't for this class, and I'm really excited about it. (You know how exciting it is to do something new that you know is right!!) I'm also going to (for the Spring; too much going on this Fall) revise the Game Programming class and somehow include the content/social value of video games. I'm going to let that sit in the back of my mind and hopefully will have a creative brainstorm on it.

    I did actually copy and paste this post from Word, as I wrote it as I was writing the presentation, and that's where the lines come from. I'm not sure if you can do this here in blogger, but generally if you want a line you use open bracket hr slash close bracket. (For horizontal rule.) There is probably some embedded CSS (cascading style sheet) that got imported with the MS Word. You can use CSS to do amazingly pretty things with your web pages (even make drop-down menus). CSS is for adding style to your form.

    Thanks again for a really wonderful course. I'm looking forward to the next one.

    ReplyDelete