Home> Blog> Concept Map

Concept Map

This post originally appeared on the Software Carpentry website.

While re-designing the Software Carpentry course, I have realized that we rely over and over again on some underyling concepts that are hard to capture as lecture topics. I think these concepts are the heart of any useful definition of "computational thinking". The diagram below is a first attempt to capture what these concepts are and how they're related. (The list below the diagram summarizes the relationships in textual form for easier reading.) Suggestions for improvements would be very welcome...

A modelis implemented as adata structure
A modelmust account formissing or incomplete information
A data formatconforms to amodel
Instructionsfor a computer are abstracted as analgorithm
An algorithmoperates on amodel
Choice of algorithmdeterminesmachine performance
Datais abstracted as amodel
Dataalmost always hasmissing or incomplete information
An archivestoresdata
An archiveconforms to adata format
An archiveis parsed to createa data structure
An abstract machineis implemented bya library
A programis a kind ofdata
A programoperates ona data structure
A programconforms toa specification
A data structureis persisted to createan archive
Data structurechoice helps determinemachine performance
A specificationcan be defined bytesting
Testingchecksa program
Testingrequiresa specification
Toolsareprograms
Toolssupport use ofsoftware development techniques
Software development techniquessupport use oftools
Modularizationis used to structureprograms
Modularizationaidstesting
Modularizationis used to createa library
Hardwareis represented to programmers byan abstract machine
Hardwarearchitecture changesmachine performance
Machine performancecan be traded off againsthuman performance
A librarycan extendan abstract machine
Experienceis captured ina library
Human performanceis determined bysoftware development techniques
Human performancecan be traded off againstmachine performance
Human performancedepends onexperience