I am beginning studies that hopefully will lead to a long career as a remote sensing specialist. I am currently working with ArcGIS for some applications and learning ENVI for others. I have realized that it is imperative that I learn a programming language, and am stuck facing a choice between IDL and Python. I would love to hear which programming language the community recommends for the remote sensing of land surface processes.
IDL is a fantastic stand-alone programming language (you do not need ENVI). I particularity like it for very fast matrix processing on large arrays. @Aaron makes IDL sound much less flexible then it really is. The majority of IDL development came out of the Physics and Astronomy communities. There is robust support for mathematical and statistical programming. If bundled with ENVI, you have all the library calls (functions) available in ENVI including support for spatial vector objects. There are also a large number of functions and models developed by the user community. One advantage to learning IDL is that it will make you marketable in "analytic" remote sensing shops.
Also, do not forget that ERDAS has a scripting language (EML) that is quite good and easy to learn. EML is the backbone of the graphic modeler and gmd's are just packaged EML scripts that sit under the graphic modeler interface. The advantage of using EML directly is that you can use for/while loops and have access to more ERDAS functionality in a scripting language.
MATLAB is also very good for matrix processing and there are open source versions (e.g., Octave) that have exactly the same syntax with similar benchmarks. This is a highly flexible language with considerable power. It is one of the preferred language for applied mathematics and engineering.
The Python alternatives NumPy and SciPy are flexible but not as optimized as IDL and MATLAB. As such, you need to deal with addressing space and speed when working with large arrays. One huge advantage of Python are the additional libraries for performing a variety of analytical tasks. There are packages for remote sensing, nonparametric statistics, bindings to spatial classes (e.g. GDAL, LibLAS) to name just some of the added functionality available through packages.
This brings us to R. I am primarily a spatial statistician so, this is my everyday language. The number of available packages is staggering which, in turn, provides access to cutting edge cross-discipline statistical methodologies. However, I have to say that it is very cumbersome when dealing with large data problems. The spatial classes are getting much better and because of the raster package providing the ability to hold large data out of memory I am now able to implement some fairly complex statistical models utilizing large raster arrays. But still, R is slow when dealing with large memory problems. The BigMatrix package allows for writing and processing huge arrays from disk but the coding overhead is not insignificant There are also bindings to GDAL and GIS software (e.g., GRASS, SAGA) that allow spatial object processing to occur outside of R in a GIS specific software, which is how I interact with GIS software these days. This allows me to leverage functionality across multiple software without leaving R.
So, now that the software cheerleading is out of the way, my recommendation is "yes to all of the above options". Programming is a skill that, once learned, is easily applied to other languages. There are striking similarities between C++, R, IDL and Python. Aside from some coding idiocentricities, what one must learn are the available functions to implement a given model/task. Once this is done it is just a matter of syntax that implements common coding structures.
Sometimes there are things that just work better in a different software or language. I occasionally write code in FORTRAN or C++ because it is just the best choice for a given task. It is a matter of adaptability. You may want to start with Python because, as a scripting language, it can be applied to numerous tasks it also provides availability of packages for specialized analysis, has a number of free online resources and is somewhat easy to learn.
From a remote sensing perspective, the main benefit of IDL is that it extends the capability of ENVI similar to how the Python arcpy site-package extends the functionality of ArcGIS. If you will not have access to the ENVI platform, consider learning a different programming language. Additionally IDL is a commercial product whereas Python is open-source and has a huge support base.
From a practical perspective, Python, R (open-source) and MATLAB (commercial) are the most important languages for my day-to-day remote sensing based work. I use MATLAB for much of the digital image processing, Python for more GIS related tasks and R for graphics/analytical purposes.
Finally, if I had to focus all of my efforts on one language, I would choose to learn Python mainly because Python functionality is much more suited to GIS-related processing in addition to RS based functionality. In other words, Python is a jack-of-all-trades whereas IDL is not. Besides, NASA uses Python!
I strongly suggest learning basic computer science theory instead of focusing on one procedural language. Acquiring a foundation in CS theory would allow you to use programming languages interchangeably. On a day-to-day basis I use two to three languages to write code (Mostly Matlab, R, Python), and in the last month I've also written code in VB, BATCH, and EASE (PCI Focus).
This is not only important to be able to easily learn multiple languages, but to avoid making basic mistakes.
A few recommended topics are:
- data types, memory usage
- pattern matching
- procedural paradigm, modularity
Also, if you're having issues writing code take a step back and write pseudocode. Basically write step-by-step the logic behind your code and what you want it to accomplish.
If you're a student I recommend taking first and second years comp sci courses.
I think this is worth a separate answer: An absolutely great page for learning on how to use Python for Remote Sensing is this one, lecture notes being a great tutorial: http://www.gis.usu.edu/~chrisg/python/2009/
For me, a combination of Python and QuantumGIS solves all my Remote Sensing and GIS needs.
it really depends on packages you hope to use in remote sensing (image analysis). ArcGIS (ESRI) is not a remote sensing package. If you want to use open source packages I would agree that Python and R are great languages. I would also consider C++ and C, so you can dive deeper into some of the libraries (ie: GDAL). If you want to stick with commercial off the shelf (COTS) packages, then you will want to look more into the C languages (C, C++, and C#). Happy coding.