Draft TOC for a practical introduction to computing for Geosciences (most of it is probably applicable to other non-Computer Science fields)
The course should be agnostic towards specific platforms or products - Presented techniques should always cover the three main OSs (Win, Mac, Linux), and program code should be given in multiple languages (e.g. Python, R, JavaScript)
π marks sections that can easily be skipped or moved to advanced courses
For more general info & license, see Meta
- Hardware components
- Installing applications
- Users & permissions (?) π
- Networking terminology: Server, Client, Firewall, ...
- Directory structure
- Filenames, Extensions, File types
- Absolute / relative paths
- Filename strategies, Project structure
- Archives (Zip, RAR, ...)
- Invoking the command line / Terminal / Console / Shell
- Navigating the file system
- Running programs, Program arguments
- Input and output
- Working remotely (SSH) π
- Binary representation
- Integers, Hexadecimal
- Floating point π
- Characters: ASCII, Unicode
- Data structures: Record/Struct, Table, Graph, Tree, Database π
- Binary vs. Text-based data formats
- CSV
- JSON, GeoJSON
- XML
- SHP
- GeoPackage
- XLS
- RDF
- Text editor (and other low-level tools)
- Data conversion & "wrangling"
- Standards & Network protocols π
- Fundamentals of programming (Turing completeness)
- Numbers & Math expressions, Strings
- Memory (variables, arrays)
- Booleans, Conditions
- Loops
- Functions
- Data structures (OOP?)
- Bugs & Debugging
- APIs, Libraries and Dependencies
- Containerization
- Scripting applications
- Git / Sourcetree
- Github / Gitlab / ...
- Building and Deploying
- Copyright fundamentals
- Open Source, Open Data, Creative Commons
- Models: all are wrong, some are useful
- Falsehoods programmers believe in
- Algorithms, Decisions (e.g. Boeing, VW)
- "AI"
- Competent "Googling"
- Q&A Platforms
- Programming Notebooks π
- GISes
- Commandline tools
- Databases
- Web-based tools & technology
-
This is not a curriculum! Obviously, each section could be expanded to a course on its own or more, but the goal of this is to collect a set of minimum requirements to allow other courses to start at a higher level and/or be more inclusive to students with less previous knowledge!
-
This is not normative! Use it as a checklist for your own courses of what may be required, or use it to see how the teaching of those fundamentals could be distributed across a set of courses. But by all means adapt it to what is needed in your specific context.
-
This is not a list of prerequisites! Although it could be argued that most of this should be taught in schools, the fact is that we cannot expect students to have acquired any of these skills before coming to university (at least not where I live). By defining any of these skills as prerequisite knowledge without investing resources in teaching them, you will only reinforce inequalities, and pile more extracurricular workload on students who are not priviledged to have learnt thos skills privately, wihtout even giving them credit. So don't.
Β© 2020 Florian Ledermann