I would like to develop my GIS programming skills, where do I start? People say learn C++ or Python but where can I learn this in a geographic context? Tutorials or anything would be very helpful, as would any information on languages/programmes to use.
UPDATE: unfortunately upper links are dead but similar topic can be found in one research article Identifying Skill Requirements for GIS Positions: A Content Analysis of Job Advertisements
I like Chris Garrard's Python for Geoprocessing course materials. http://www.gis.usu.edu/~chrisg/python/2009/ Personally, I find programmatic manipulation of OGR/GDAL to be indispensable.
With respect to finding the best fit for you, consider the software or geostack you wish to be most expert in (like ArcGIS, QGIS, PostGIS-GeoServer-OpenLayers), and then choose programming language(s) that best supports your choice. That'll be discoverable by checking out the language of the associated API or other customization tutorials. A great deal of online programming learning resources exist, and a websearch of your preferred software package + language + "tutorial" will get you rolling.
Don't start with C++ and GIS without learning software development first. It's just too much.
Python is a good place to start regardless of what GIS platform you go with later. There are a lot of books, websites and training materials available and a lot of colleges use python as an introduction before going on to the heavy duty programming languages, like c++ and java.
I was able to learn Python by sitting down with a copy of Learning Python by Lutz & Ascher (O'Reilly Press). My office uses ESRI products, so to get the connection with ArcGIS, I created several models using ESRI's Model Builder and exported them to Python. Then it was just a matter of looking at the exported python scripts, digging through the book and using ESRI's on-line help system for the geoprocessing topics to get a better idea on how python and ArcGIS work together.
There are very few colleges/universities which offer programming courses related to GIS. I would recommend the Elmhurst College GIS Certificate Program which has two (2) of these courses as part of their GIS Cert. Program, both programming related:
- ISG 100 GIS Programming with ArcObjects
ISG 200 Implementing Geodatabases
The entire program is online and they have a dedicated GIS Server. They teach Python mainly.
Programming in GIS is one of the skill sets listed in The Geospatial Technology Competency Model (GTCM), which has just come out and includes some additional skillsets that may be the ultimate reference source for this: http://www.careeronestop.org/competencymodel/blockModel.aspx?tier_id=4&block_id=708&GEO=Y
The answer depends very much on the system you are using and what OS it runs on. I'm primarily programming Manifold on Windows or web-based apps with Manifold on the backend, so I can choose from any .NET language. C# is my personal choice because most examples and tutorials you will find on the web will be in C# (at least for .NET).
Since you are just starting out, Manifold may not be a bad choice. You can get it for under $300 and develop using the free 'Express' versions of Visual Studio.
If you can be a bit more specific we can probably help you more.
Work your way through ArcMap learning the basics of spatial objects handling. When you are comfortable with an operation try to establish the process with ModelBuilder. Model builder is the equivalent of lego in the ESRI world. It makes it possible for you to generate python code. This code will be simplified but it will work.
WingIDE is a tool which makes it easy to handle python scripts, as well as providing you with a predictable environment to try out your scripts. Open the model builder script in the IDE of your choice and play around with it.
As programming languages goes Python is a low hanging fruit. It will take you from the simple level and up :-)
I'm surprised PyQGIS Developer Cookbook is not there yet. I find it indispensable for matching my old GIS skills and my new Python skills, especially without having access to ArcGIS now. If you are more ArcGIS-oriented, then there's much more resources for you.
Unless you already have strong background in some other language (C# for ArcGIS, C++ for opensource GIS), start with Python and learn other languages later. Most GIS-related functions should have similar syntax and usage in Python and those languages, so learning them with previous knowledge of Python shouldn't be that hard.