How do we assess an individual’s fluency with computers? We’re gonna go a little deeper than ability to use Microsoft Word…
There’s a point, in knowledge and skill in the field of computer science, when programming languages mostly start to look and feel similar. “Learning a new language” is more like learning the peculiarities of a dialect of some language you already speak, than switching from English to Russian. When laypeople ask if you know a certain programming language, one which you do not already know, it occurs to you that answering in the negative would not be entirely correct. You can probably code passably in that language with only an afternoon on Stack Overflow.
This point is computer fluency. How can we assess individuals to determine their computer fluency?
The complexity of computer systems is enabled by being constructed of layers upon layers – user-interactive software executing in a user-mode interpreter, executing on an operating system, running on a hardware architecture implemented by processor microcode, which is all built on transistors turning on and off. Then there are network stacks, user interface stacks, operating system API stacks, hardware interface stacks… These all enable the overall computer system. Fluency in each layer and field is a precursor to “computer fluency”.
Too many variants of each layer and field exist to be enumerated, though. It’s unreasonable, and unnecessary, for one individual to be fluent or even aware of all of them. Well before an individual becomes acquainted with the breadth of technologies at any layer, one can form a deep understanding of the layer. That’s because most of these technologies implement the same functionality.
At what point is it possible to prove that an individual has a deep understanding of a layer? When they are capable of constructing, analyzing, and evaluating that layer, they demonstrate mastery over it.
This is demonstration of the higher levels of cognitive activity in Bloom’s Taxonomy. Computer science degrees, and the professional requirements for computer scientists/engineers, focus on skills applied at all layers of a computer system. Operating system courses are a grueling and excellent example of this, as are microprocessor courses. These courses typically include assessments via laboratory assignment, where students are graded on their ability to create things that meet a set of requirements. Often the requirements must be gleaned by analysis of adjacent, existing system layers. During the span of both OS and microprocessor classes, students typically demonstrate the ability to create multiple layers of computer system. This contrasts with networking and individual programming language courses, where one class demonstrating even the breadth of one layer is rare. Typically these courses are geared more towards providing an introduction to a topic, so students can build upon that in further courses. The courses are also typically encountered earlier-on.
To assess an individual’s computer fluency, we must require them to create and analyze a diverse set of computer system layers. Further, individuals must create and analyze systems that are not already familiar to them.
Some of the layers individuals must be assessed in, then:
- Analog circuit design and analysis
- Logic gate-level design and analysis
- Electronic communication design and analysis
- Computer architecture design and analysis
- Microprocessor-level programming and analysis
- Operating system-level programming and analysis
- Network design and analysis at the internetwork and transport layers
- Network design and analysis at the application layer
- Functional language programming and analysis
- Object-oriented language programming and analysis
- High-level programming language programming and analysis
- Distributed, diverse language and architecture, system design and analysis
That’s a very large set of knowledge required for full computer fluency. It’s daunting.
I assert that at least basic fluency with each layer is necessary and sufficient for understanding of all deterministic functioning of a computer.
Assessing ability at each of these layers requires a diverse set of exercises which involve constructing and analyzing the layers. Also critical is that assessment be performed using languages individuals are not already familiar with. This is not an assessment of ability in any one programming language, for instance… Computer fluency is language agnostic, by definition, and therefore the tests must be also.
Which layers am I missing? I’m sure there are a few. A knowledge of C, or a C-like language is part of operating system-level programming and analysis, or microprocessor-level programming and analysis. Assembly-languages are there at the microprocessor layer… I call those skills out because professionals often lament their absence in many modern computer science curricula. However, an assessment of ability at the OS and microprocessor layers must be programming language agnostic. Artificial intelligence concepts are missing here, as are mentions of data structures and algorithms, although the latter two would be critical for many of the layers. AI is a layer on top of the computer, and separate. The consciousness running on the underlying body.
Just some thoughts here – I would love to develop a set of tests which comprehensively demonstrate computer fluency. Tell me which other skills would have to be demonstrated to accomplish that.