Yesterday a couple of friends, Tyler and Matt, wanted me to look at a program they are writing, and they got me up to speed by helping me install software tools they use. It was a mind-blowing experience, not because of any one tool or piece of code but for how much, fast and smoothly many complicated things happened while we communicated remotely.
This is not a tutorial, just a high level description of my experience.
Using only a laptop and a decent internet connection, we shared code, interactively shared code changes (with ~1s latency), ran modified code immediately, talked about the results (with ~.1s latency), and shared interactive graphic results (a dynamic interactive app -- a game). These programs can be compiled for all common handheld devices.
To debug my OS/machine/configuration, Tyler copied and simplified the main loop with a single graphics call ('newLine'), using a physics engine call ('addBody'). I then ran the code on the Corona simulator, showing dynamic feedback of event driven programming. We ran the code on different OS's while at different locations. I didn't have to tell him how my system behaved, because I shared my desktop through Skype.
This is what that looked like on my screen, showing almost the complete top level code base for the test app:
While I was testing out configuration changes, they could either tell me what buttons to push or were googling for answers and copy-pasting the results into Skype's chat box.
I'm a robopsychologist, and from my perspective code is a way to get machines to behave well. While I enjoy programming and keep up with what I need to know at the moment, many of the tasks involved are not what I want to do, just what I need to do to make machines work like I want them to. I want machines to be capable of doing sophisticated things and to show them how to do it in as easy a way as possible.
I'm an old coder in the sense that I have used personal checks to acquire floppy disks and paper documentation through snail mail. I use more modern methods now, but I was still blown away by how sophisticated and powerful newer tools have become. I regularly collaborate remotely with a couple colleagues in the next state, using Github, Skype and a cell phone when needed. I've tinkered with mobile telepresence. Still, for solving difficult issues fast and effectively this was a new experience.
These friends are relatively young and new to programming, but more sophisticated than me in many respects. They figured out what tools they wanted to use, and showed me how to use them. I learned a new high level language (Lua, an interpreted scripting language), installed LuaEclipse by dragging an HTML based 'install plugin' icon onto a desktop IDE (Eclipse, an Integrated Development Environment), installed and learned how to use a collaborative programming tool (Saros), and configured Eclipse to use the Corona interpreter, SDK and device simulator. And I got schooled in how they structured their program.
Many IDEs, including Eclipse, are repositories of feature bloat, opaque and intimidating in many ways. An alternative is to use a text editor with syntax color coding, which is the core of programming and nearly universally available and accessible. But this set of tools running in conjunction with Eclipse was very impressive. In was not easy, but getting past the multitude of issues between strings of bits and a working program was greased by sophisticated tools, particularly those that allowed remote, low latency collaboration.