Monday, April 7, 2008

What language should you learn first?

The breakdown Read some stuff on the internet and you will see everyone has an opinion on which language you should learn if you are just starting to program. 1. Hippies: Python, Smalltalk, Visual Basic, Java. This school assumes most beginners don't need to know anything about pointers or garbage collection, and a lot won't at all. If they ever have to learn these things, they are better off picking it up after getting the basics of object oriented design and general logic down. 2. Masochists: C++, C. Learn the hard way and everything else will be easy. This school weeds out anyone not wholly committed to the idea of coding their whole lives. They'd have you do assembly if they had the time to proofread it and comment how terrible and hopelessly inept you are, assuming you can get anything to work. This method works best if you are a wunderkind that heads development on major Javascript frameworks at aged goddamned 12. 3. Pragmatists: C# or .NET in general, Javascript, maybe Java, whatever your company/school uses. It's possible you'll pick up the concepts necessary to be a decent programmer, but you need to be able to code several things right now and the theories of software architecture can take a back seat until you have more time. An of course there is mixing and matching, which is probably more common than any complete adherence to any school. My story I cut my teeth on C++ back when all the cool kids were doing it in high school, but when I started doing Running Start classes at the local community college in my junior year my embarrassingly poor math skills at the time precluded taking basically any CS course. I did manage to make a very inelegant Tic-Tac-Toe program with a pretty decent AI, but that was the sum total of my experience. The book I had probably wasn't a good idea to use (I picked it up at the remainder book store I worked for at the time). Later, when I got into Geography (and GIS specifically) I went through a slow evolution: from the moderately crummy visual ModelBuilder program in ArcGIS to VB.NET - the latter via a course my wife took before I did and aced - to Python, and finally now fooling around with .NET stuff but looking back at C++ again. Where to go now At the moment I am kind of between #2 and #3. The one professional coder I know insists I do some lower level (meaning, closer to raw machine language; meaning harder in general) language. Specifically C++, which he could then critique. This would be a really really good idea and is extremely nice of him to offer to do. Long run, I'll probably be a better programmer for doing it. At the same time though, I know a bit of C# already, everything in the office is .NET, and there is a really good chance I'll be using it very soon. Particularly because the small stuff I have written at work (mostly Python) is likely going to be kept around and maintained in some way. And that means moving it to .NET because no one really uses Python here. I'd have real projects to do as opposed to homework from my friend. Also, there are free in-house training programs for it. I'm almost certain to go with #2 because of the long term prospects of actually being good at this (which means versatility) and also because if I am hired on here as a GIS Developer they'll train me anyway. "Specific language is actually unimportant," I've been told. What matters is understanding what you are doing when you give a computer instructions, what object oriented design means, and good practices & algorithms. Anyone who knows the basics, logic, and elegance behind programming can pick up just about any major language in a day or two. My largely uninformed opinion on language C++ is actually scary as hell though, and never something I'd give a beginner. As other people have observed better than I could, C makes you do more work (garbage collection and memory management), higher level languages and .NET does it for you, and C++ appears to do it for you but can fail catastrophically if you don't know what is going on under the hood. Had I known about Python in my high school days I would have started with that, no question.

Friday, March 28, 2008

Perfect

There isn't any way in which this does not represent the kind of custom software I have worked with in ArcGIS. It is the inevitable result of shifting user requests and lack of an integrated design from the start.

Wednesday, March 12, 2008

Hybrid firms and Proprietary Software Licensing

This kind of thing is why I wouldn't want to open my own GIS oriented business with proprietary software.
ESRI have told us that as an educational charity we are no longer allowed to have an educational discount for using their software and, not only that, our license codes will cease to work at the end of this month. So, we have 3 weeks, with the Easter holidays in the middle, to extricate ourselves and our ongoing projects from ArcGIS and into something else or find the many thousands of pounds to buy the full licenses for all of our staff.
This is my general blog, so for those that don't know, ESRI is the "big dog" proprietary GIS software firm. At least in the United States, it is relatively accurate to think of them as the Microsoft of the computer mapping world (though little can really compare with the OS market share Microsoft commands). The problem here is not limited to ESRI. The idea of time-duration licenses for any good that is tempered by special discounts for educational institutions, charities, etc, is one fraught with difficulties. This is especially as you cross cultural/institutional lines (as is the case with the above example). You can see something similar with annual income taxes, the problems inherent there need really no detailed mention. The risk associated with a change in the licensing regime - specifically in discount - will always result in some firms that are blindsided with an outrageous (and possibly unintentional) cost increase. The risk associated with this happening - which includes not merely the higher licensing fee but also the cost to assess whether it is worth paying for - combined with often already high costs resulting from interoperability issues and current fees. Fair warning or not, a switch being forced by a change in fees is going to cost money. Basically: Cost of Being Locked In + Licensing Fees + Risk of Fee Changes You avoid all of that with open source software, though there is the question of maturity. QGIS, the likely contender for the heart of the user otherwise locked into ArcMap, has come a long way but my short experience with it wasn't entirely pleasant in terms of stability. For other situations, open source software is often equal or superior - Microsoft SQL Server has only just caught up with Postgres for spatial querying. It all depends on the given software. The costs of starting a business is already high. My hope is by the time I can start a GIS consulting firm there will be a simple, stable open source GIS platform/viewer. I don't need it to do a lot really, just display data and allow for easy editing. The spatial analysis can be done though some scripting with Python/SQL, and dissemination though the web with the future version of MapServer/OpenLayers. It sounds simple, and would be perfect for what I am doing right now, but who knows what GIS will be in the future. At the end of the day it is all about what the client wants.

Monday, March 3, 2008

Mapping Science Itself

This is a Google Tech Talk called Scholarly Data, Network Science, and (Google) Maps. The creative use of maps in this presentation is impressive, but it is interesting to see that the vast majority of the time and effort to produce them consisted solely of data cleanup. This kind of data cleanup - specifically the kind that requires some expertise in the subject (in this case, the metadata associated with huge datasets of high variability), some technical skill to automate processes when you can, and recognizing when it is prohibitive to do so - is likely to be steady, if sometimes boring, work for as long as such data is in demand. I would be curious how much of it they have considered handing off to the crowd (though scholarly work may not really lend itself to the concept as well as, say, images do via something like Google's Image Labeler) Another interesting thing regarding this presentation is the composition of the team responsible for the maps. Geography is always billed as a highly interdisciplinary field and this is a perfect example (though you will notice an abundance of mathematicians, graphic designers/cartographers, and some computer science folks). These guys sell their maps here. All of the money goes to getting such maps into schools where they can do some real good.