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
Digital Natives, Digital Immigrants, Marc Prensky
Best Practices to Promote Academic Integrity in Online Education
CCRI's Definition of an Educated Person
Best Practices to Promote Academic Integrity in Online Education
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!
ReplyDeleteThe 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.
ReplyDeleteI 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.