Mopping up


So, that's the end of the courses. Congratulations for surviving them! Let's remind ourselves of what we've covered, and then we'll talk abit about where to go from here.


For those who did the Core Skills course, you'll remember we covered the basic elements of the Java programming language, plus some key ideas in computer programming (see to the right).

The key things to take from the course are probably the basic elements of the language, how to make GUIs and Images, the policy of good documentation and commenting, and UML (though some would argue Unit Tests are also key).

Coding:Broader issues:
Variables/Objects Algorithms
Branching/Looping Comments/Docs
Methods Elegance/Efficiency
Inheritance UML
Exceptions Usability
File I/O IDEs
GUIs Internet protocols
Images Patterns
Networks Unit testing
Memory/Processing Building executables

In the Advanced Skills course, we've looked at some key technologies spatial analysts might want to engage with. While it would be impossible to cover everything, we've tried to cover core elements -- but also stuff that exemplifies particular ideas: GIS adaptation; XML and SQL processing; visualisation and modelling.

If you're interested in more examples of programming spatial analysis techniques, check out our extra practicals.

Coding:Broader issues:
ArcObjects Eclipse
SQL and JDBC Using external packages
XML and JAXP Using external binaries
JFreeGraph Using GitHub
Processing Modelling theory
rJava Monte Carlo techniques
Netlogo Validation
MPJ Express Agent modelling
RePast Parallelisation

So, what haven't we covered, and where can you go now? The short answer on the former is an almost infinite amount. The question is then 'where now?' Below are some of the areas worth investigating in terms of the things we've missed and the direction things are travelling.

The computing field moves so fast it is impossible to stay on top of all the new technologies, but even if you don't currently want to engage with any of the areas below, it is worth setting aside some regular time each term/season to pick up a book on a technology you are completely new to.


Further Java:

Java is a life-time's occupation in itself, but here's some specific areas we haven't covered that might be of interest.


It is worth spending some time learning Swing. We haven't dealt with Swing so far, mainly because you can treat it much like AWT in some cases, but for anything complex it has a slightly different model for working. Nevertheless, it is the go-to GUI solution for most Java of any sophistication. Good starting points are:
The Swing Tutorial
Swing with GridBag
For very sophisticated GUIs, you may also want JavaFX.


A little more advanced, but very useful for projects that need flexibility, is reflection: the use of Java to examine and alter class internals on the fly. For example, it is used to make plugin architectures that load classes from jar files. A good starting point is:
The Reflection Trail
You may also be interested in how to run JavaScript inside Java (to allow users to script) and how to compile and run Java from inside Java.


Finally, for effective 2D drawing and image processing, it is worth getting your head around the 2D Graphics API. A good starting point is: The 2D Graphics Trail

Other coder culture:

It's always worth staying on top of what's going on more generally in IT/Tech culture. A couple of popular news sites which have RSS feeds and/or send email summaries are Slashdot and Hacker News. More general British-centred IT stuff can be found on The Register and the august Computer Weekly.

At the moment, the four big themes in computing culture are:

  1. getting more children into coding
    (see also Scratch; Coding Club; Lua for Minecraft)
  2. redressing the gender balance in coding
    (which has slipped considerably);
  3. hackathons / open source
    (see also LeedsHackSpace; BioHacking).
  4. Privacy, data, and surveillance
    (see also, the ever excellent New Aesthetic blog; Bruce Schneier; Cryptome / Wikileaks).

Screenshot: Firefox developers tools

Firefox's web developer tools: Tools --> Web Developer

Further languages:

We'd recommend two languages that are worth immediately spending some time learning. Both are scripting languages. Scripting languages are generally designed to be simpler to use, but their flexibility can allow for poorly structured and, in some cases, error-prone code. Nevertheless, their simplicity and well-thought through functionality mean they are an extremely popular choice for languages built in where beginners need to get quickly up and running.


The first is Javascript. Javascript is founded (broadly) on Java, but adapts it as a scripting language (including some useful but ill-used inheritance features) . It is probably the fastest rising language, as it is pretty much the default language choice for work on the web, but can also be used in, for example, Windows 8 development.

Key technologies:
HTML DOM
jQuery
Node.js


The second is Python. Python is particularly well designed for data processing. Because of this, and its general ease of use, it is increasingly used as the scripting language of choice for applications that need to provide scripting environments, including ArcGIS, QGIS, and VLC. When Microsoft released the .Net languages, it implied Visual Basic for Applications might be replaced, but it seemed to struggle to develop an alternative that would also satisfy those with huge amounts of legacy VBA code. Python stepped into the resulting vacuum, and has essentially replaced Visual Basic for Applications in all but Microsoft's own software.

Key technologies:
BeautifulSoup
Django
PySal
SciPy

For recommended starting points for these and other languages, see the recommended texts page.


Web / Social Media work:

We have the Web-based GIS which covers the core skills in this area, however, if you want to use your programming skills to Level Up in this area, there are a few technologies we'd recommend looking at. First, and most obviously, get used to Javascript and navigating the HTML DOM, then...


For front-end GIS, Leaflet is growing in popularity. You can run it by connecting to a GeoJSON source or a server-side program (see below). Another popular alternative is OpenLayers.

For a server-side database, PostGIS is a commonly used geographical addon to the PostgreSQL ("Postgres") database. This is often combined with GeoServer, which allows you to set up a Web Service to publish the geographical data. GeoServer is also bundled in GeoNetwork (Wikipedia intro), a collection of open source web-based GIS software set up to catalogue and distribute spatial data.


For more general client-server work, two popular libraries are jQuery on the client side, and Node.js on the server side.

Your go-to source for staying on top of standard web technologies is Smashing Magazine. You may also want to read the latest standards at w3c. There are good tutorials for all standard web technologies at w3Schools


Finally, for working with social media, there are a couple of key technology areas. One is interacting with data and the other is processing it. For downloading and parsing websites this list on StackOverflow is an excellent starting point. One language commonly used for this job is Ruby. For Twitter specifically (including geolocated Tweets), there are a number of libraries in different languages available. Facebook has an API/Developer's kit for building apps. There is also an API for Flickr (intro) which includes options for working with geolocated photos. For processing libraries, see this list of NLP libraries on Wikipedia.

Screenshot: City Connect

CityConnect Leaflet map. You can find more details of how to do this stuff on Robin Lovelace's Blog.


Screenshot: Android Jellybean by Himanis Das: from http://commons.wikimedia.org/wiki/File:Android_4.3_Jelly_Bean_on_Nexus.png

Android Jellybean
(Photo: Himanis Das / Wikicommons)

Mobile technologies:

The best place for starting with Android is the excellent Google tutorials, which are in Java and utilise Eclipse. However, you might also be interested to check out MITs amazing AppInventor, which uses a Scratch-like language as an intermediary.

The best place for starting with iPads and iPhones is Apple's Developer Centre (iOS info).


Hardware:

Hardware work is an increasingly important area for programmers to get their heads round. If you're interested in learning a little more electronics, a good starting kit is the one from Mallinson Electrical (projects). You can by large breadboards on Amazon, and a multimeter might also be useful.

Good beginners book is Make Electronics: Learning by Discovery. You can build up to How to Diagnose and Fix Everything Electronic!

A first step for more complex hardware that interfaces with programming is the Raspberry Pi (examples), or, less bulky, the Arduino, which comes in lots of different forms/functionalities, including very small wearable versions. There are thousands of interesting Arduino projects out there, but for geographers, here's a couple of interesting crowd-sourcing ones: OpenAir; SmartCitizen.

For more bespoke hardware using chips and programming, the simplest solution is PIC chips, the programming of which is simpler that it might appear. A good kit is Spiratronics. This is the older flash starter kit, but cheaper and gets good reviews.

Finally, for robotics, an excellent starting point is Lego Mindstorms, which has the advantage of being reasonably tough and (obviously) extendable. Although it has an excellent language of its own, you can also flash the chip inside with leJOS, which lets you program it with Java, or use other languages.

Screenshot: Arduino Lilypad, by David Mellis: from http://commons.wikimedia.org/wiki/File:LilyPad_Arduino.jpg

Arduino LilyPad for wearable computing. See also AdaFruit's FLORA.
(Photo: David Mellis / Wikicommons)


Good luck. If you need any help, you know where we are.
We'd love to hear about any projects you develop, so please do join the Facebook Group and stay in touch.