Tuesday 27 October 2015

Perpetual motion of my wheeels

Do you ever feel like this?

Sometimes I feel like I'm constantly spinning my wheels, taking one step forward, then going '...nah...' then taking a step back again. Then stepping in a different direction, only to wonder whether the grass is greener down that other way. Perpetually spinning my wheels!

Continuing the analogy, it's like my bike's stuck between gears. Any pedalling I do amounts to nothing because the effort's being expended on something offering no returns, no forward motion.

Maybe if I shift my arse a bit further back on the saddle, straighten up my posture a little, then...yup...CLUNK, I'm back into gear and moving again! That shift of perspective, taking a bit of time to step back and think 'okay, I'm thinking about this the wrong way', might well make that clunk happen.

I feel like this has just happened now, while trying to be precise about my research question. I've been getting too finicky about what exactly I'm going to evaluate and how. But I realised that after I conduct an evaluation with my target domain, it might so happen that this specific feature I want to assess might not even be worth implementing!

There's the clunk: I've got the basic direction for sure, but I can't go skipping steps or I might just end up backtracking again. If I shift gears too quickly before I even reach the hill, I'll just tire myself out.

I like this blog idea now, writing that down has helped a bit. Wheels are (hopefully) in motion again!

VL/HCC in general

As is most likely obvious from my previous schpiel, last week I was in the wonderful city of Atlanta attending the VL/HCC conference! This brought together researchers interested in the design and evaluation of visual languages to support a variety of users in improving their programming experience.

My own contribution was presenting "Jeeves", my visual programming environment for creating mobile experience-sampling applications. If you want to read all about it (please do!) the paper is here, and a wee blog post about it is here
 

Blocks & Beyond & Bollockswhywon'tthisstupiddemoload Part III

In addition to getting to demo my work and receive some genuinely good feedback (not so much an ego boost as a "you might not be completely f**ked" pat-on-the-head) I also got to attend three of the presentation sessions.

Due to the unexpected size of the workshop, this had to be a dual-track affair, with talks allocated just 4 (!) minutes apiece. The rest of the time was allocated to discussion. 

Discussions

In honesty, I wasn't an active participant so much as a dazed onlooker in the discussions; as they got more heated and lively I was struggling to keep up with what the hell was going on (probably unaided by a late Wednesday night and a rushed hotel check-out that morning). I still don't really know what happened in Sessions 1 and 3, maybe the coffee was drugged. 

Session 2, New Features for Blocks Environments was particularly interesting to me, though, with the group discussion highlighting what new features could be incorporated.

- Community-based feedback was one such feature - how best to utilise growing online communities of users in block programming languages? Mentor/peer feedback and code/block sharing both arose, features I was originally considering from a meta-design POV.

- Good programming habits and how to foster them was also a key discussion topic. Given that the orientation of this year's conference was towards education, promoting good programming practice in block language users was an inevitable debate. 

- The organisation and refactoring of code came up for discussion, too. A ubiquitous feature in textual IDEs, how can we support this in block-based languages? 

Disillusionment

My own (silent) contribution to all this was reflecting upon the importance of good coding practice outside of education. Domain professionals (research scientists, businessman and the like) just want to get the job done, whether their solution is carefully planned and iteratively developed, or clumsily hacked together, surely has no bearing on the end result? I was starting to feel a bit left out, to be honest.

Debugging

A final discussion, and one that resonated more clearly with me, is the support for end-user debugging. I feel that coding with bad practice is like paying for a new BMW in 20p coins; it's ugly, inefficient, but it gets the job done. 
Coding without testing is like paying for a new BMW that might turn out to be a Smart car, or a unicycle, or a goldfish. You don't buy before you try. 
This is a horrible analogy but it's 1.15am and I'm not about to waste time making better ones. You can get by without refactoring or planned development, but no one gets their program right first time, least of all end-users!

Lyn addressed this in his keynote, suggesting that blocks languages are ideal for expressing dynamic semantics, that is, showing how a program is executing. In this section of his talk, he put forward the following research question:

What to do in cases (robotics, mobile apps) in which the program is running on a device other than the computer in which it’s been written?

A-HA! Now it's getting more relevant!

Direction

This is a problem I'd really like to explore in my application. End-users can build these applications that might sample people under differing times and contexts, but how can they test and debug them? One way could be to run a pilot study, but this could be costly and time-consuming.

What if there was a testing and debugging tool built into Jeeves that let users rapidly try out their applications? What form would this take? I was inspired in this session by the presentation of PencilCode, a tool to help students debug their block-based programs that utilised a slider to step through the events in the program, displaying variable values and control flow as the user moves to different points.

One major difference for my case is that ESM applications don't 'flow' in the same way; rather, their execution is based on event-trigger-action sequences, executed sporadically based on the user's context. It's a niche problem, but it's my niche now, and I'm looking forward to seeing how it develops!

Monday 26 October 2015

Blocks & Beyond & Bollockswhywon'tthisstupiddemoload Part II

The demo session also gave me clarification on my two main concerns that I'd been having prior to VL/HCC

1) Should I have just used Blockly? Is it too late to start? ARGH PANIC STRESS
2) So I've got this environment. Great. So what's the research question? ARGH PANIC STRESS

On the one hand, I keep looking at Blockly and thinking "this looks great, why didn't I start off with this? I could have saved so much time. Nevermore, nevermore".

On the other hand, I have this nasty habit of forgetting what my PhD actually IS. I'm making a novel contribution to research, I'm NOT DESIGNING A PRODUCT. Repeat after me. I'M NOT DESIGNING A PRODUCT. I'M NOT DESIGNING A PRODUCT. (This is my morning ritual.)

The Blockly Dilemma
I got the chance to show my environment to a lot of different people, and a question that came up more than once was "So, is this Blockly/Scratch/App Inventor?" For one, it's flattering that people could confuse Jeeves for these professionally developed environments. Additionally, people's surprise that this was developed from the ground-up reminded me just how much work I put into it. This took months of implementation, and the end result is a tool that fulfils its purpose.

So no, it's not as slick or extendible as Blockly or Scratch, and no, it doesn't let me easily port it to the web for ease-of-access and cross-platform usage, but it doesn't NEED these features. It's good enough to let me answer the research question, so why reinvent the wheel just for some extra functionality?

What next?
During Franklyn's keynote on blocks-based languages, he covered a plethora of possible research questions for block-based languages, including learnability, maintainability, and debugging of blocks. Felienne's post summarises the key points very nicely, and Franklyn's kindly put his research questions online. After everything leading up to polishing my presentation, I suddenly found myself wondering where I actually go from here, and this gave me some great direction. More on this in the last post!


Blocks & Beyond & Bollockswhywon'tthisstupiddemoload

As part of my journey to the VL/HCC conference in Atlanta, I was lucky enough to jump into the Blocks & Beyond workshop, despite my original submission being rejected. Hurray!

Honestly that's worked out rather well; my original position paper on meta-design in blocks-based languages is a track that I just didn't really want to go down. As it turns out, there was a boatload of research and discussion on facilitating the transition from blocks to text languages, with some interesting ideas that frankly blew my shaky meta-design proposal away. 

Demo time!
The fact I even got to show Jeeves to other people was great in itself. The fact that I got to demo it to Neil Fraser (creator of Blockly), Brian Harvey (co-creator of Snap!) and Franklyn Turbak (the keynote presenter and driving force towards block-based programming language design) was a tremendous opportunity.

Having Neil stress-test the interface was a bit dicey and he brought up the same issues my participants originally had, which I awkwardly haven't corrected yet :S. As the guy who's spent 4 years developing Blockly, which is now used to bootstrap multiple block-based languages (including MIT's App Inventor), he knows what works and what doesn't, and his position paper Ten Things We've Learned from Blockly is gonna be valuable for improving my own UI.

In general, though, I got really positive feedback on having implemented my own block-based environment from scratch (NOT Scratch. This caused some confusion). Was it worth it, though? 


Better late than never

Hello!

Inspired by a couple of fellow PhD students and those who have already been through the mill, I've decided to actually dedicate some time to writing a PhD blog. To be fair I probably should've started this 2 years ago but today I tipped too much instant coffee into my mug and am now feeling fabulously motivated.

Better late than never? Maybe. We'll see. In any case it'll give me a place to vent my frustrations as opposed to unwitting friends and family. Plus I've just come back from VL/HCC so I might actually have some material. 

Here's to the next two years of sporadic updates and heavy drinking.