Many, many folks in the GIS community find themselves in the software development universe and for good reason. Software development makes for an interesting career, blending problem solving and creativity, and most software development jobs pay fairly well with opportunities for entrepreneurial adventures. This is the path I took after finishing part of grad school and I have no regrets whatsoever. I loved programming and developing software tools with GIS components. Way back in the day I helped develop a map interface and GIS functionality (using VB and MapInfo’s MapX component) for a cool supply chain network design application called LogicNet. My code stood the test of time for a few years after I left but it’s long since been rewritten and dramatically improved upon. The product lives on and is now sold (for way too much money) by IBM’s supply chain application group.
This is my first post in a series on Spatial Careers. If you’re currently a student in a geography department and you want to become a GIS software developer then this post is for you. First of all you might be thinking – gee, maybe I should become a computer science major instead, right? Well, if you’re a freshman and not too far down any particular path it’s not a bad option to go with a more recognizably technical degree and it will help you get a leg up for that first job. But, I would encourage you to stay in the geography department while loading up on courses from computer science and other hard-core departments like physics, math and/or whatever interests you most. No other department will teach you to think spatially and I think that’s probably the toughest skill to learn on the job.
The cool thing about software development is that after a few years in the work force no one will care about your major or where you earned your degree. The only things that will matter will be:
- Can you write solid code?
- Are you good at solving challenging problems – technical and otherwise?
- Can you communicate effectively in both verbal and written forms?
- Are you able to establish and maintain productive working relationships with team members?
- Can you learn new technologies quickly?
If the answer is yes to all those questions you’ll have a great career whether you have a Master’s degree in Computer Science from Stanford or an Associate’s degree in Geography from San Joaquin Delta College. Here are a few thoughts on each of these pieces.
(1) To learn how to write solid code it would be a good idea to take a core sequence in Computer Science. Some combination of applied programming (with a popular language like C# or Java) and computer science theory would be good. Ideally you’d also take more advanced courses on data structures and algorithms. There are probably a few others I should mention but you can’t take everything. In addition, you would do well to engage in some self-study to learn how to write solid industrial strength code. Read Code Complete: A Practical Handbook of Software Construction or something similar and The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition). Grab any O’Reilly book on a technology of interest. Think of a simple project and then do it – it doesn’t have to be perfect but see it from start to finish. If you need an idea I’ll be glad to put you to work. Also, learn how to test your own work – this is important! Quality Assurance is not an after-thought; it’s a critical part of software development and everyone is responsible. Don’t be one of those programmers who writes quick and sloppy code and blames QA when bugs slip through the cracks.
(2) For general problem solving, just take a wide variety of challenging courses. For me, that meant taking lots of statistics including Applied Regression Analysis in the Business School and grad-level Econometrics in the Econ Department. There were outstanding classes in the Geography Department – my favorite was Advanced Geographic Data Analysis – but sometimes it’s good to explore other fields. Take courses that interest you and will provide you with a different perspective. Don’t worry so much about how they will look on a transcript or whether or not they fulfill a graduation requirement. I know it’s difficult to finish in 4 years (or 2 for a Master’s) and you want to be efficient but it’s too important for you to learn cool stuff while you have access to such a nice variety of brilliant minds and the time to explore. [If you don't have time/money, get a job and go through school at a slower pace. In many ways, I prefer this approach.]
(3) Write a lot. Write to your parents and grandparents (more than just text messages or tweets), if you’re lucky enough to still have them in your life. They will love you for it and it will be a good way for you to learn how to describe what you’re doing to people who may not be technical. Communicate via email with your Professors and TAs. Think of each email as an important business memo. Start a blog and write about what you’re learning. Send emails to interesting people and ask them questions about their work or for a brief phone call to discuss something that interests you. Learn how to convince people to listen to your ideas with your writing. Trust me – it will help no matter what you do or where you go. Also, take opportunities to give presentations. Volunteer to be the spokesperson for your class project or offer to give a guest lecture in a class. Attend a conference and present a paper. Learn how to deliver a presentation with PowerPoint. Everyone does it in business, academics, you name it. In person, via WebEx, over the phone. All the time. Learn to play the game. If you want your brilliant ideas to be heard you have to be able to communicate.
(4) Get along with people. This can be the most challenging piece of the puzzle. Programmers are an eccentric bunch but they’re typically very good people. They can be very quirky and are often introverted but, in my experience, programmers are usually down-to-earth, interested in a lot of different things, easy to get along with and fun to talk to. Mostly they want to have the autonomy to work on cool problems and solve them in clever ways. So give them space but ask them about what they’re doing and how they’re doing it. You’ll probably learn some good stuff. Unfortunately, you also will need to get along with other people who present more of a challenge, especially if you work for a large company. Accounting, legal, marketing, even IT – all can be a pain when they’re distracting you with corporate politics or asserting their authority while you’re just trying to write code. Just do your best. Connect with someone in Sales so you can maybe meet a real customer and figure out why it’s important to do a good job. Don’t feel like you have to be everyone’s friend. Sometimes it’s well worth it to make a stand and not sacrifice your integrity just to be seen as a team player. There are true assholes in the world. Life is too short to pretend you like them. When in doubt, candor is the most effective style but most people have thin skin so try to be respectful and kind. Maybe the best way to prepare is to take a leadership role of some kind in a college club or organization on campus. Good luck with this – I’m not the best one to give advice here.
(5) Think of all the changes to the software industry in the last 5 years. Apple’s iPhone was not yet available for purchase 5 years ago. No one had heard of an iPad. Now everyone has an iPhone, iPad or Android device and developers who can create apps for iOS or Android are in high demand. So you can’t expect to learn what you need for your whole career in college. You’ll be learning new technology every year and probably making major changes to your development environment every 3-6 years. Accept that you can’t write in the same syntax and/or within the same IDE for your whole career; instead, jump at the chance to build a prototype with new technology.
I know that you’re thinking – wait, dude, I have to know all the different ArcGIS APIs and Ruby on Rails, blah, blah. Back in the late 90s you had to know about n-tier architecture and .NET and ODBC and the different ocx controls for mapping/GIS. Now it’s a bunch of other silly acronyms and funny names. Fortunately, I don’t have to keep up with all this stuff now. I know, I know. It actually matters if you want to work with and be respected by technical people. I’m just trying to point out that it’s always changing and you’ll never know everything. Plus, college is a lousy place to learn this stuff. Only a small fraction of computer science professors stay up on the latest technologies – they can’t bother to play around with HTML5 or mock up an Android app. They’re too busy writing books and articles and preparing lectures. Same goes for GIS professors. This will vary from campus to campus but, generally speaking, if you want to be on the bleeding edge of software development you’ll need to read books and blogs and build prototypes on your own time. You won’t learn these skills in any required courses. Same goes for GIS development tools. You’ll be stuck making ArcGIS plug-ins and using all the other ESRI development tools because nearly every University has a site license and since the U. spent a fair bit of cash on that site license they’re not going to buy alternatives for the GIS lab. There’s nothing wrong with ESRI technology – they are clearly the leader – but it would be nice to experiment with a variety of other geospatial technologies. Younger students are lucky because open source didn’t really exist in the same way when I was in college or grad school. Now it’s an all-you-can-eat bonanza out there. Dig in.
Anyway, this article won’t tell you which technologies are the right ones to learn. I’ll leave that for someone else who’s deep in the technical trenches. I’m more on the business side these days and only know enough technology to be dangerous. But, I think I can still provide some meaningful guidance on how to spend your time while in school in order to position yourself for a successful career campaign in the GIS software development world. Hopefully this post does just that.
If you follow the guidelines above and can manage to land a job where you have the opportunity to work with experienced software developers who are willing to show you the ropes, I think you’ll be in great shape.