The last five years I have been working with VBA and ArcObjects for developing a specific application within ArcGIS. That project that began around 2008-2009 carried out with VBA and ArcObjects which is not supported by ESRI anymore. So, I need to migrate in a new programming language and I am not sure which is the best for my case: Python, VB.NET, C# or Java? My aim is to develop specific planning applications within ArcGIS platform. What is the most easiest to learn taking into account that I have experience with VBA and ArcObjects? Which is the most powerful for developing complex GIS applications? Which has the best support? May I have your opinions please?
-
4Learn all of them :)– Nathan WCommented Jun 13, 2013 at 11:42
-
2VB.Net is probably the quickest path from VBA. C# is probably better supported in the .Net world, simply because it's more popular, therefore more people are experienced with it. All four have the "power" you need. I, personally, would go with C# or Java.– Russell at ISCCommented Jun 13, 2013 at 13:15
-
3Beginning ArcGIS for Desktop Development using .NET This book uses C# and ArcObjects, lots of example code and how-to... A great replacement for the old Learning ArcObjects (VBA) book– Jason MillerCommented Jun 13, 2013 at 15:54
-
duplicate? How to get started on a GIS Programming Career?– RyanKDaltonCommented Jun 14, 2013 at 18:14
4 Answers
With your background I would suggest that a .NET language using ArcObjects would be most familiar and VB.NET most familiar of all. Also, if you are looking at wider career opportunities beyond this project, then my gut feel is still with the .NET environment with a leaning towards C#, just based on the requirements I see employers asking for most often.
However, if you want a language that gives you great flexibility in the FOSS4G world then Python becomes a very strong contender. Python seems to be becoming the scripting language of choice in so many packages both OpenSource and otherwise. Python will 'feel' very different to C# or VB but if you see yourself as a scripter rather than a programmer, then Python has another advantage of allowing you to get results in considerably less code. I personally quickly gave up on ArcObjects with C# in favour of Python because I needed to write about tenth of the code using ArcPy and processing speed is rarely a major issue because mostly, for geoprocessing, your Python code is calling compiled C binaries under the hood (i.e. the interpreted vs compiled issue is not very relevant most of the time for geoprocessing with Python). It's largely personal preference, but I do find ArcPy and the Python GDAL libraries much more straightforward than doing the same thing with ArcObjects, perhaps because they remind me more of AML :)
I haven't commented on Java because I don't use it.
Any of the four you mention will give you what you need, and I think it is better to know one language really well than to dabble in all four. When ESRI started supporting Python, I dropped using a potpourri of VBA, JavaScript, Avenue and AML (who remembers Avenue?!) and opted for one language (barring a brief foray into C# but by then I was hooked on the simplicity of ArcPy or ArcGisScripting as it was then).
EDIT
I see a C# book has been recommended already. As a fan of Python, may I recommend Erik Westra's book Python Geospatial Development. I notice that a second edition has been released.
-
2+1--well reasoned, thoughtful advice. (Believe it or not, just last week there was an Avenue question posted on the ESRI forums. ArcView 3 still lives!)– whuberCommented Jun 13, 2013 at 15:22
-
1"scripter rather than a programmer" are us Python programmers not programmers ;)– Nathan WCommented Jun 13, 2013 at 23:02
-
3I didn't mean to offend Pythonistas :)! I only meant to say that Python is great for scripting. I differentiate between scripters and programmers not by language per se but by intent and frequency. To me, a scripter usually writes comparatively short scripts on an ad hoc basis to extend existing software or perform a small task whereas a programmer (using any language including Python) will habitually write much larger stand-alone programs and this programming effort represents a primary focus of their daily working lives. When is a script a program, well... how long is a piece of string? Commented Jun 14, 2013 at 6:38
-
+1 If someone does much UI development, I would also add that they should consider learning XAML (WPF) to augment their VB.NET or C#. Commented Jun 14, 2013 at 15:25
I'm with Nathan W -- if you consider yourself an aspiring programmer then you will want to expose yourself to all four, and probably more. Check out JavaScript, Ruby, PHP, and Perl as well. These are all very popular languages and you would be doing yourself a disservice to not at least have some familiarity with them.
Regarding ArcGIS development:
- For ArcObjects development specifically, I would stick to C#. You can certainly use VB.NET, Java, C++, or even Python, but I think you'll find the most support and be most successful with C#.
- I would suggest Python for geoprocessing, scripting and customizing ArcGIS Desktop 10.1 using Python add-ins. You can also write add-ins with .NET and Java at 10.0.
I personally wouldn't focus too much on VB.NET, as it has little uptake compared to other popular languages. That VBA and VB.NET are syntactically similar should not necessarily be interpreted to be an advantage -- to the contrary, it is likely going to make it harder to learn, and to grow, if you continually fall back on your VBA experience to develop with .NET.
Sort Answers first, more detailed on my opinion.
What is the most easiest to learn taking into account that I have experience with VBA and ArcObjects?
As it has been said, with your background (i.e, taking into account that I have experience with VBA and ArcObjects), the easiest to migrate would be VB.NET.
Which is the most powerful for developing complex GIS applications?
All of them are powerful languages, python, java and c# are well known, well spread and you can develop complex applications with them.
Which has the best support
All are well spread languages and you should have good suport for all of them.
My opinion
If you check here the popular tag list you can see that from the most popular tag for a language is python, so I'd say it's a good option also.
On the Other hand c# and java are more popular as general purpose languages, so maybe it's easier to find libraries or support on questions about the language itself.
Anyway python is also a very popular language with lots of libraries and a big community, so you shouldn't have problem to find some support.
Also python is a scripting language, more similar to VBA in this aspect, on the other hand c# and java are compiled languages.
Saying all this in your case I might go for python because I think it's easy to learn, and well adopted among the GIS community.
While this may not help you answer the question of "What is the easiest to learn taking into account that I have experience with VBA and ArcObjects?", you may find an analysis of GIS.StackExchange tags to be a useful guide to what might be the most valuable for you to learn.
@BillDollins posted this blog about 6 months ago called "Carving Up GIS StackExchange". If you look into the data he provided for download (bottom of the blog), you will see the number of times tags are used on this site. I've re-run the code today, and using this as a surrogate for the "most popular (not to be confused with most useful) programming language in GIS", you will see that Python leads the way for GIS users:
- python (1896)
- c# (534)
- javascript (505)
- .net (178)
- vba (140)
- vb.net (110)
- and a limited number of references to java.
If you look at StackOverflow, it is not that different, except that Python falls down on the list a couple of notches: