Threshold concepts (TC) discussed in papers like Eckerdal et al. (2007) and others. The existence and the use for threshold concepts in Computer Science Education are open for debate.
Though in programming you often feel that after struggling with understanding a construction you suddenly get an insight of how things work and you see things in another light and suddenly you just get a flow and can solve your tasks better than before. This could for example be understanding some part of Object oriented programming better.
Sourva (2010) and others extend this thoughts and introduces a liminal space that you as a learner occupies, perhaps unknowing, while trying to overcome a threshold. In this interesting article he also introduces Fundamental ideas (FI) that runs threadlike across and beyond a discipline. Examples here according to Sourva (2010) is state and abstraction that at least when it comes to state it is perhaps not a threshold in the same sense as his examples of threshold concepts like program dynamics, information hiding and object interaction. I can’t really see the distinction between the fundamental ideas and the threshold. For quoting Sourva (2010) he says about program dynamics that
“A crucial distinction between the existence of a programs code and its existence as a dynamic execution-time entity within a computer. Code is tangible and its existence is really easy to perceive. The existence of the latter aspect of a program, which I call program dynamics, is much less so.”
This becomes quite obscure to me because as he describes program dynamics it is really dependant on abstractions and the concept of the programs state. I would think that there are thresholds that you have to pass and after you passed them there is no turning back, you can’t unlearn them. It is like when Neo in Matrix takes the red pill, there is for him and for a programmer no turning back once you understood OOP. I the article Sourva (2010) also discuss what he calls transliminal concepts as smaller TC’s for example concerning the big program dynamics TC there would be function calls, recursion, instantiation, loops as transliminal concepts parts that are more concrete and less generic than a TC.
I think that for a teacher to have as a goal to guide the students to pass these thresholds is great but also to think that they are to my belief probably TC’s are very different for each individual. I would guess that many students would say OOP is a TC but I would also suspect that they will mean different things with that answer. I would also argue that there are TC’s that you can do without like pointers. To quote the frequent programmers c++ question “Do you mean the object or the pointer”. When teaching Java I try to do that initially without any talk of pointers I say that they are referring to the same object, only the command line nerd have problems understanding that. In real life there is a rat in the house there are not more than one rat because all members of the family looks at the rat. The cloning that is what is weird in comparison to real life.
What I do think hinders students to move through a TC is when those transliminal concepts laying out there on the road to the threshold or beyond is illogical as those I pointed out in on Illogical stuff. Then you really confuse a student and it is better to guide the student around those transliminal traps that can lead you totally wrong.
To take an example when understanding objects and iterating trough them. Using an iterator pattern and a foreach construction like this is easy to understand and not as techie as using a classic forloop.
1 ArrayList<Shoe> shoes = new ArrayList<Shoe>(); 2 for (Shoe shoe : shoes) { 3 shoe.setSize(8); 4 } 5 6 ArrayList<String> strings = new ArrayList<String>();; 7 for (String s: strings){ 8 s = "Change all"; 9 }
It is very understandable that the shoes are collected one after each other and placed in the variable shoe. After that the size is changed for all shoes to 8. What becomes confusing is if you have an ArrayList of String were in the example above the value of the Strings in the array is not changed, The same holds for Integer, Double etc.
This is more or less obvious if you have understood that String, Integer are Immutable objects, but to understand this as a novice programmer is not an easy task. This is again an example of a concept in Java that is really hard to get around since String’s are used extensively in many examples you get across on the net. So moving from Java to languages that don’t have this problem could be an idea but at the same time since Java-like languages are an Industry standard.
References
Jonas Boustedt , Anna Eckerdal , Robert McCartney , Jan Erik Moström , Mark Ratcliffe , Kate Sanders , Carol Zander, Threshold concepts in computer science: do they exist and are they useful?, ACM SIGCSE Bulletin, v.39 n.1, March 2007 [
Juha Sorva, Reflections on threshold concepts in computer programming and beyond, Proceedings of the 10th Koli Calling International Conference on Computing Education Research, p.21-30, October 28-31, 2010, Koli, Finland