Nathan’s computer science course looks great: it has a clean layout and adopts design conventions that make it easy to navigate and understand the various elements of the site. The format is essentially an online textbook organized into chapters. The relatively long paragraphs and chapters and the lack of images make the resource feel like they’re aimed at a scholastically inclined adult audience. Put another way, the appeal of the resource is in the conceptual content, not in its visual richness. The text tends to use precise (if basic) computer science language, which may better prepare the learner to interface with other explanations and documentation, but at the expense of a steeper learning curve that might discourage truly novice learners.
The resource best leverages the affordances of web technology in the interactive Python shells dispersed frequently throughout each chapter. These allow the user to review and manipulate pre-filled code, execute it, and observe the results. Thus learners can apply what they have just learned in the preceding text explanation. Often, these are accompanied by an exercise, where the learner can upload a solution in the form of a .py file. The resource automatically evaluates the submission, reporting the expected result, the actual result, and basic error reporting in the event of a discrepancy. This experience is quite a faithful simulation of a standard development workflow, in the sense that the user is required to deal with modular text files and learns to test and revise code. Again, this assumes a certain facility on the part of the learner to know their way around a computer, as well as some basic familiarity of the mathematics required to generate a solution (e.g. geometry). These are realistic expectations of anyone who will be practicing computer science, but it does add to the sense that the resource is aimed at adults, or at least adolescents.
Instructionally, the resource is very thoroughly structured, with an expanding cyclical pattern of learn a concept by reading, explore a concept by manipulating code, apply a set of concepts by generating a code solution. The learning experience might be enriched with other activities that are less concrete or easily assessed, but that help the learner practice the cognitive skills that are relevant to computer science. For example, it might prompt the learner to review a code sample and make a prediction, then execute the code, and evaluate the accuracy of their prediction. They might record their analysis of why or why not the code performed the way they had expected. Likewise, learners might be asked to debug flawed code, or improve an inefficient algorithm. It’s also important to note that this resource seems to teach concepts of computer science germane to coding, which is a narrow subset of the broader domain of computational thinking. While coding is a very practical and ubiquitous application of computational thinking, it might be helpful to depart from the practice of coding periodically and require the learner to apply the concepts of computational thinking to another domain. This might prove especially valuable to new learners who don’t identify themselves as coders or computer people.