Ramblings on reading skills
Published: 2020-09-26 01:03:55

Over the past year I've had a number of conversations with both industry and academic folks about the importance of reading for future college graduates. Reading is very important for discerning key information related to job postings, but also in the course of completing everyday activities, such as following instructions. 

Reading is a huge part of a developer's career. Some areas where reading is very important: 
1. Reading to learn new technologies (new frameworks, new releases, new languages, etc)
2. Reading to understand the spec requirements
3. Reading the error message(s)
4. Reading a batch script, makefile, package dependency file
5. Reading the README
... and so forth

There is a tipping moment when an aspiring developer goes from seeing a block of text to having developed eagle eyes to see keywords in the text. Around this time, one becomes more accustomed to the navigation of skimming text quickly or reading in depth and knowing whether to speed up or speed down. I don't think it's a normal part of most CS undergraduate education to learn about reading as a way to communicate with other developers. Closest thing I learned in school was in PhD studies where I had cohorts from other fields like social science, psychology, anthropology, and so forth that focused a lot more on interpersonal communication etiquette and had formal ways to articulate the way the human mind picks up new information. The more I think about it, the more my thoughts start to align with Bloom's Taxonomy of learning or Dreyfus Model of skill acquisition.

So far I have only the beginnings of a crude framework for reading skills related to CS education. Note I'm thinking aloud on the spot here, these thoughts will not hold up under scrutiny.

From basic to more sophisticated: 

* Basic Reading: at the starting level, one learns to read information that's written down. Maybe it's reading the syllabus or homework description before asking questions.
* Reading more: at the next level one learns to read more than 1 source because 1 particular text may not be the right fit. To read beyond the prescribed short list. To dive deeper into a topic.
* Reading with discernment: reading critically and analytically. Did the author really mean ___? Maybe this part that doesn't make sense is a typo? Perhaps and error message of, "file not found" is telling me something about the filename as input.
* Reading with problem solving: in reading with intent, one can ascertain what is and isn't relevant and continue seeking for what is relevant. 

Hmm. Maybe these categories don't apply to the activity of programming. When one first start programming, everything looks like gibberish. Over time, one slowly notices the structures (much like Neo in The Matrix) and can follow the patterns. Example from a class on terminal commands:

Exercise 1: Try different commands... `ls; ls -l; pwd` and so forth

Exercise 2: Try stringing together different commands... `pwd && ls -l && echo "hello world!"`

Exercise 3: Create myscript.sh and put the commands in a script file. 

```shell
pwd
javac HelloWorld.java
ls -l
echo "hello world!"
```

This is where some students "got lost", which as a designer I knew immediately that comments and syntax highlighting would help separate the lines to show it's different commands.

```shell
#! /usr/bin/local/bash  
# first line is shebang line to define which shell version to use

# print working directory (pwd)
pwd   # shows path to current directory

# compile a Java file. 
# Won't work because we don't have this file HelloWorld.java
javac HelloWorld.java

# list contents of directory
ls -l  # -l is flag option to show in long form 

# print "hello world" to output
# works like System.out.println("hello world!");
echo "hello world!"
```

Change permissions for myscript.sh `chmod +x myscript.sh`

and run the script `./myscript.sh`

I think I lost the class again around here..  "Professor I copied and pasted `javac HelloWorld.java` and it had an error."  Hmm..