Category Archives: Education

How to read specifications.

How to read the HTML5 and other Specifications…

Early on, Dean Arden declared that one important goal of courses like computer architecture is to enable people to understand specifications.  I’ve tried to weave using specifications, either written by professors like me into assignments, or, more rarely, for required references included in assignments.

The HTML5 spec quote is so cute, I must directly quote it:

1.7.1 How to read this specification

This specification should be read like all other specifications. First, it should be read cover-to-cover, multiple times. Then, it should be read backwards at least once. Then it should be read by picking random sections from the contents list and following all the cross-references.

Advertisements

TA-ship

Here I’ll draft a collection of instructions or guidelines for CS TAs, useful for profs too.

  1. Provide enough information for students to account for every point of credit lost on assignments that did not receive 100% credit.
  2. Never dictate or tell students specific code for which the intention of the assignment is for the student to figure out that code him or herself.
  3. place holder…

Challenges:

  1. Set up and enforce a policy so that after a student gets help the student must code or continue coding his/her own solution without looking at certain material such as code or design sketches (in more advanced) that a helper showed to explain how to solve the problem.

Challenge aspects:  When a solution is worked out by a group, especially when it is based on or refactors code that is printed in the textbook, seems unreasonable to the student to refrain from electronically copying a solution file after it is finished by someone else.

Research paper on laptops in class and the authors’ FAQ

Laptops hinder classroom learning for both users and nearby peers

Faria Sana, Tina Weston, and Melody Wiseheart*

FAQ    http://www.yorku.ca/ncepeda/laptopFAQ.html

Full paper    https://www.sciencedirect.com/science/article/pii/S0360131512002254

General Abstract: Laptops are commonly found in university classrooms. Thus, students will inevitably use laptop applications, such as games and social networking, during class time. To investigate whether multitasking on a laptop impedes in-class learning, we conducted two experiments in a simulated university lecture setting. We found that students who multitasked on a laptop during a lecture scored lower on a test compared to students who did not multitask, and students who were in direct view of a multitasking peer scored lower on a test compared to students who were not in view of a multitasking peer. The results suggest that multitasking on a laptop is a distraction to both users and fellow students and can be detrimental to learning of classroom materials.
*formerly Nicholas J Cepeda


									

Writing and asking the purpose of program code.

Example from a lab early in a Data Structures course:

//Lab Followup: Write a comment after EVERY LINE YOU WRITE OR CHANGE
//that demonstrates that you understand the purpose of that line
//in terms of the problem goal.  
//Bad example:  i = i + 1;  //Add 1 to i or Increment i
//Good: The count of dog bites is updated when we are bitten by a dog.

TA-ship

Here I’ll draft a collection of instructions or guidelines for CS TAs, useful for profs too.

  1. Provide enough information for students to account for every point of credit lost on assignments that did not receive 100% credit.
  2. Never dictate or tell students specific code for which the intention of the assignment is for the student to figure out that code him or herself.
  3. Set specific deadlines for when grading of an assignment must be completed.

Challenges:

  1. Set up and enforce a policy so that after a student gets help the student must code or continue coding his/her own solution without looking at certain material such as code or design sketches (in more advanced) that a helper showed to explain how to solve the problem.
    • Challenge aspects:  When a solution is worked out by a group, especially when it is based on or refactors code that is printed in the textbook, seems unreasonable to the student to refrain from electronically copying a solution file after it is finished by someone else.
  2. place holder…

Lightweight Java Visualizer Tool

Lightweight Java Visualizer Tool

Cool tool for teaching data structures…

Computer Science Learning Bottlenecks

During a workshop I was asked to identify a learning bottleneck.  Here’s my first:

Students have difficulty visualizing that a pointer variable and the variable it points to are (usually) different variables, realizing the values in one can be changed independently of the other, and choosing the correct variable to access or assign when figuring how to program the variety of tasks that they need to learn about.

Added a second added later:

When asked to report or draw conclusions from structures, students confuse static structure (such as structure of code, and relationships between classes or other types) and dynamic structure (such as quantities and references between instantiated objects, contents of an activation stack, and history of activations).

And later:

Juha Sorva’s proposed threshold concepts for programming, beginning with the dynamics of program execution, seem on the mark.  Distinguishing between a variable storing a pointer and a variable storing a  non-pointer makes sense only after the concept of variable and its role in dynamics is understood.

Debugging: Meta-cognition and explicit teaching of strategies

The 2007 SIGCSE paper “Debugging: The Good, the Bad, and the Quirky – a Qualitative Analysis of Novices’ Strategies” by Murphy, Lewandowski, McCauley, Simen, Thomas and Zander lists debugging strategies and reports a study of 21 students to observe and categorize their debugging behavior.  To quote from the authors’ conclusion:

Many unproductive activities appeared to stem from insufficient meta-cognition. Some students did not recognize when they were stuck, thus they did not know to try a different approach. Those who stubbornly traced in their heads often did not realize they were suffering from cognitive overload and might be more productive if they tracked on paper or via print statements. Others were blind to alternative bug sources. Debugging instruction should incorporate these meta-cognitive factors, perhaps taking the form of self-questions: “What else could I try?’, “Is this too much to keep track of in my head?”, and “What are other possible sources of the bug?”

Explicit teaching of processes for students to reflect on their own learning and disciplinary experiences is suggested, as it is from a lot of other research literature. We add here that we should experiment with exposing students to research literature itself such as the above cited paper.

  • Students will relate to experiences of people just like themselves in current and immediately anticipated situations.  The students in the study were taking a CS2 course.
  • Particular components of debugging, as itself a component of programming, are identified:

    “Debugging is difficult for novice programmers. Similar to new drivers who must learn to steer, accelerate, brake, etc. all at once, novice debuggers must apply many new skills simultaneously. They must understand the operation of the intended program and the execution of the actual (buggy) program; have general programming expertise and an understanding of the programming  language; comprehend the application domain; and have knowledge of bugs and debugging methods [2]. Unfortunately, most novices’ knowledge of these skills is fragile at best [12], causing many to find debugging difficult and frustrating.”

  • Particular practices and tools are introduced: “Gain domain knowledge, Isolating the problem. Tracing, including: Mental, Print & Debugger, Pattern matching, Consider alternatives, Testing, Environmental, Understanding code, Work around problem, Using resources, Just in Case, Using Tools, Tinkering”
  • More importantly, results and examples of critical evaluation are demonstrated.
  • Such material will foster respect and interest in attitudes and interests of academic research.

Computer Science Education Journals

 

Transactions on Computing Education http://toce.acm.org/index.html, formerly Journal on Educational Resources in Computing http://jeric.acm.org/

Computer Science Education http://www.tandfonline.com/loi/ncse20

Abstractions feel concrete

Things that people say are abstract such as mathematics feel to me, having training and inclinations towards that subject, very concrete, particular and real.  They are not things for which the rules and nature are not clearly understandable, like justice and freedom. Perhaps the ability to deal with abstract things is the ability to think about them in the same way as concrete things.  Of course, this way of dealing with things may be much more successful in areas such as programming and mathematics than it is in areas like ethics and esthetics.

The following paper probes the trouble with seeking correlations between programming ability and “abstraction” ability. It classifies various meanings of abstraction and reports research into correlating measurements of kinds of abstraction ability with performance in computer science courses: “Abstraction Ability as an Indicator of Success for Learning Computing Science?” by  Bennedsen and Caspersen in ICER’08, September 6–7, 2008, Sydney, Australia( http://www.daimi.au.dk/~mec/publications/conference/32–icer2008.pdf )