I will be instructing a course at the local university titled Computer Science for Geospatial Technologies. This is an introductory course meant to introduce computer science concepts to geospatial technologies students (GIS & Remote Sensing). In the past I have introduced programming concepts, but I found this went over many of the students' heads.
Currently, I am planning to discuss computer hardware, spatial data types (i.e. shapefiles vs geodatabases), ESRI Geodatabase Model (the university works on an ESRI platform), basic database theory with ArcSDE Personal.
Could anyone recommend some other computer science related topics that practitioners of GIS and Remote Sensing should know before entering the workforce?
UPDATE: Last years curriculum included:
- Google Maps Javascript API/HTML/Google Earth/KML - 5 weeks
- Python Scripting - 6 weeks
- Database Theory/MS Access - 2 weeks
- VBA - 2 weeks
The response I received from students was that not enough time was spent on each topic. I am speaking to the university to offer a next level course in GIS Programming using Python.
Answer
In 15 years of answering GIS questions on listservers and, now, Web pages, I have noted some recurring issues that suggest a need for practitioners to learn certain specific computing concepts. None of these are deep; all these are well known; but all seem to be common deficiencies in the background or understanding of a significant minority (majority?) of GIS people. In many cases little actually needs to be learned apart from a definition or example. The point is to alert students to pitfalls that will arise and give them the principles or tools they need to address them when they come up, without necessarily becoming experts.
Links in the following list all go to questions on this site. The mere existence of these links provides evidence of the value of the concepts. By following the links, you can find examples of how knowing these concepts can solve problems, prevent them from happening, and help people be more proficient with GIS.
Computing systems
The components of a computer: open a box, take it apart, identify the pieces (CPU, RAM, disks, motherboard, network card, etc.) and explain their roles in the system. Demystify it and make it concrete for the students.
Understanding of how computing systems store data on external devices. Concepts of physical and logical formats. The distinction between ASCII (and similar encodings) and raw binary.
Details of the internal binary representation of numeric data, including IEEE single and double precision floats and signed and unsigned integers. Limitations of each. How to choose what data type to use for representing GIS attributes.
The distinction between external storage and RAM. (I know this is incredibly elementary, but there's a lot of confusion out there.)
Computer science
Asymptotic analysis of algorithms. Understanding, on a practical level, the differences between O(n), O(n log(n)), O(n^2), (and worse) timing. How to test how a black-box algorithm scales.
Principles of human-computer interaction. This is too broad, but some principles of form design and Web page design can go a long way.
Principles of computing languages: what to expect from a language, the difference between procedural and object orientation, what kinds of data structures and objects languages can support and refer to, the difference between compiled and interpreted languages (and the trade-offs among them).
Basic principles of data structure design. The interplay between structures used to represent data and the algorithms that use them. The uses of arrays, lists, and dictionaries.
The distinction between objects and references to them. (Many mistakes are made by people who do not recognize the difference between a variable name and its quoted string!)
What an operating system is, what services to expect from it, and how to interact with it.
What a network is, what services to expect from them, comparison of some architectures, and a sense of tradeoffs made between obtaining computing services locally versus remotely.
Graph-theoretic algorithms: many GIS analyses can be abstractly represented in terms of problems on graphs; being able to do this gives access to efficient algorithms. A nice example on our site is here involving a problem that initially seems to have nothing to do with graphs.
Recursion. A good example for GIS practitioners is the creation of a spatial index such as this algorithm for an adaptive point quadtree.
GIS data
Database systems
GIS
Typical algorithms for performing basic GIS procedures, including point-in-polygon and buffering. Why different algorithms might be desirable for one-off calculations compared to repeated calculations with the same data, or for static data compared to dynamic (real time) data.
How GIS data can be organized for searching and processing, such as quadtrees.
Evaluating tradeoffs between resolution/precision/speed in storing GIS data (especially raster data).
Miscellany
Debugging techniques: how to isolate, identify, and work around errors. How to describe and report apparent bugs and anomalies. How to ask good questions on the Web!
How to invert functions with root-finding algorithms. (Failure to appreciate this frequently leads to extremely inefficient algorithms or failure to solve a problem altogether.)
How to choose among black-box optimization programs (continuous vs. integer, convex vs. not, univariate vs. multivariate, linear vs. not, etc.). For more examples see an equipment location problem and a polygon packing problem.
How to navigate help systems. What to look for and what to reject as useless. (ESRI's online ArcGIS help provides splendid examples of the very good and the very bad.) This might even include some instruction in reading object diagrams.
Because this is off the top of my head, it surely is incomplete. If people find the list useful I'll work to improve it--or help me out and feel free to add to it if you have sufficient reputation. To keep this practical and focused, please address only concepts that will help people avoid problems that you have actually observed (in your own work or that of others).
No comments:
Post a Comment