Sunday, 23 November 2014

Learning to throw things away

New Blog Post: Learning to throw things away

(Remember, my new blog is at, and I don't always remember to post things on this old one)

Wednesday, 13 August 2014

Update on the Blog Migration

I see from the blogger analytics that I still have a LOT of people finding my new posts via this blog. It's fantastic that I have such a loyal following (I love you guys!!), but it might make your life easier if you switch to the new site.  Probably many of you are using an RSS reader, in which case if you add the new site's URL your reader, you'll get the blog content straight away instead of a link to my new site (which is what you're getting via the blogger site).

The link is:

Using github pages is still an ongoing experiment, but since it doesn't look like I'll be moving back to blogger in the very near future, this might "enhance your reading pleasure".  As they say.

If you have any problems, or moral objections to using the new blog site, please let me know either in the comments, or over Twitter, or in the million other social networks you can grab me on.

Thanks for reading, you are awesome!

Upcoming Events

Updated blog: Have added a page showing my upcoming events

Thursday, 20 March 2014

Wednesday, 19 March 2014

Sevilla MongoDB March User Group and... an experiment

So... I've been using blogger for a few years now.  I like it because it's really easy just to start typing and get a blog out there, and because it provides simple analytics and easy integration into Google+ (OK, so I never use Google+, but hey, I'm trying to via blogger).

But there are a number of things blogger is not so great at, so I'm trying out a new platform at the moment, which I may or may not stick to.  More to come on that when I've got more to report I guess.

But for those who read my blog via blogger (or the RSS feed associated with it), I wanted you to know that my latest blog post is over here.  This particular experiment will help me figure out how many people read my stuff directly from here, and how many find it through other channels.

Hopefully more to come on the experiment, when I've got something to report.

Tuesday, 11 March 2014

QCon London 2014

Wow. My 4th QCon London.  That’s not bad.  And every time, it’s a different experience (if you must, see my blogs for 20132012, and even 2007 (part 1 & part 2 - how cute was I? "agile seems like a jolly good idea; automated testing appears to be important")).

I can’t even tell you what I did on the first day, I was mostly panicking about my presentation - I was inspired after my trip to New York last month to change my talk at the last (responsible?) minute and do a live coding session, something much more technical than my recent talks.  I’ll leave the details for a separate blog post though, when the video comes out.

The thing that stands out for me from Wednesday though was Damian Conway programming Conway's Game of Life in Klingon.  Yeah.  Just find the video and watch it, the man is a genius.

The Thursday keynote was inspiring too from a totally different point of view - Tim Lister of Peopleware fame shared stories from his career, and I came away from that really happy I work as a technologist, but with an increased desire to learn off other amazing people.

On Thursday I hosted the "Not Only Java" track - I’m on the programme committee for QCon, and this year we wanted to cover leading edge technologies (as always) but we didn’t want to slice things into strict technology silos [interruption: argh! the person in front of me nearly destroyed my laptop by suddenly moving their chair back! Why do people bother in economy on a morning flight?].  So I wanted the Java track to be more representative of what today’s Java programmers care about - for the programmers of course, but also because I know there are architects and team leads at QCon who might not realise how things have moved on with the language, and how much polyglot programming we do these days. 

Martin kicked it off with a great history lesson on the progress (or occasionally,  lack of it) in Java.  He begged us to study and understand Set Theory, to use async design, to think of the users of our APIs, and, most of all, to design nice, clean code.

Next up, Eva took us through the fundamentals of Garbage Collection - this might not seem like a cutting edge subject these days, but it’s one of the most misunderstood subjects for Java programmers.  Eva gave us a really great, understandable view of the different types of garbage collectors, how they work, and their pros and cons.  She left us with a call to arms to not simply let other people try and solve this problem, but to get stuck in and contribute ourselves, via the OpenJDK.

After lunch was my nerve-wracking live coding session, putting together a full stack end-to-end web app using AngularJS, HTML5, Java and MongoDB.  It only went wrong twice, and people seemed to like it.  I’ll post the video in another blog post as soon as it's publicly available.  Code is available on github.

We’ve been playing with the open spaces idea at QCon.  The Java one only had a few people in it, but that gave everyone a chance to speak at least.  We covered Java 8 (the Good and the Bad); other JVM languages; and UIs for Java (Javascript or GWT?).  And I plugged the work the LJC does in London, of course.

After this Bodil blew me away creating a My Little Pony game using RX in the browser.  ‘Nuff said.

Finally, Simon Ritter gave us a view of the Java 8  features most likely to impact the way Java developers think about software design - lambdas and streams.  I thought this was a really great introduction to the concepts if you haven’t seen them before, and with concrete examples that showed how we should be using them.  If you're not already looking at lambdas and streams, you should be - even if you're not going to be using Java 8 yet, it's worth getting a heads up on how it's going to impact our programming style.

I’m very pleased with the way the Java track turned out on the day - every speaker was first class, a wide range of topics was covered, and I, for one, learnt something in every presentation.

To finish off the day, Emma Langman gave an awesome keynote about how people are the messy bit of your system, and how they’re never rational and you shouldn’t expect them to be.  I also highly recommend this talk, especially if you’re a techy and you’ve found yourself in some sort of management or team lead position.

Sadly I couldn’t stay for day three of the conference, I had to fly off to the Joy of Coding to re-give the live coding presentation there.  Because, if you’re going to do something terrifying and doomed to failure, you might as well do it twice.

QCon is an expensive conference, especially compared to the developer-friendly prices of something like DevoxxUK, but for getting a big picture of where the industry is, of things you might be missing, for learning hard core technical skills and understanding the important of the fluffy-people-stuff, and finally for meeting a wide range of people from developers to CTOs, I think you'd be hard pushed to find something better in London.  IMHO (and remember, I did disclose I'm on the programme committee).

And although it's really hard work putting together the programme for a track like this, and although both times I've said I'm Never Doing It Again, when it goes this well it makes you want to do it all over again.  After a break.  A looong break.

Monday, 10 March 2014

Sparking innovation in an established company

I’ve been running into BSkyB a bunch this week - firstly I was invited to kick off their innovation tech talks series last Monday, then I kept meeting Sky people (that makes it sound like they’re aliens) at QCon.

It seems Sky is keen to create/foster a culture of innovation, which is an ambitious goal for such a large company.  So I was given a very vague brief for Monday’s presentation (“Can you do something Mongo-ish, maybe a bit of performance and concurrency stuff, and talk about overall best practice?”) I gave them an early view of a presentation I’m working on titled something like “Why do we keep reinventing the wheel?” (anyone who saw me at JFokus might realise that I cunningly swapped out most of the body of the “What do you mean, backwards compatibility?” talk and tried out this topic instead).

Picture courtesy of +Russell Miles 

This was supposed to be a 20 minute intro talk (OK, so I clocked it at 40 minutes in rehearsal) with the rest of the time devoted to questions on any subject I know about, or even anything I have an opinion on.  Sounds dangerous, but means I can always move fast on the answers I don’t know in order to cover more ground - cunning, you see?  Actually, that sounds like it would be more fun if alcohol were involved.

Anyway.  The talk bit of the session took up most of the time, because I had really good questions during the course of the presentation.  It’s nice to talk to a much smaller group (there were maybe 30ish people, giving up their free time after work, like an internal user group).  But I also had questions on remote working, on creating a culture that’s appealing for developers to come and work in, and on MongoDB.

I don’t know how many companies do things like this, or lunchtime brown bags, or something, but I think they’re a great idea.  This was a mix of people from different departments, different teams, working on different technologies.  It was a good way to get people from across the organisation talking with each other and sharing best practice between teams.  Many organisations have people working in their little silo, and we (MongoDB) often find ourselves introducing teams from within the same organisation to each other - there’s no other mechanism for one team to find out about the other.  I guess that’s what white-tower architects were supposed to be for - to know what everyone’s up to and make sure people are doing the “right” thing.  Given this doesn’t seem to work, what else can we do to share knowledge internally?  How else can we get the right people to meet each other?

Saturday, 8 March 2014

The Joy of Coding

Dick Wall - The Tao, of the Joy, of Coding

I’m on a plane (there’s a surprise) on my way back from The Joy of Coding.  It’s the title that attracted me to this conference, and it was a great little one day event with awesome people like Dan North, Erik Meijer and Dick Wall presenting.  What I liked about the themes is they were broadly technology agnostic, pulling back to a level which made me remember why I’m a developer.  It inspired me to do more research and more thinking, and less panicking and trying to write code.  That might seem odd, as someone who goes to as many conferences as I do should get loads more research and thinking time than most developers living under the whip, but I seem to spend so much time bouncing from thing to thing I don’t get space to just sit and think, or to read things in any depth.

The conference organisers made it easy to focus on the bigger things - the venue was great, with a nice space for mingling with people but nooks and corners for doing work or for video conferences.  The hotel they chose was one of the best I’ve stayed at - the room had a sauna in it.  A sauna!  I spent the evening using every toiletry they provided, and moving between the sauna, the steam/shower cabinet and the jacuzzi bath.  I won’t pretend I did a lot of thinking, but it was a really awesome way to top of a crazy week, and I feel almost sane.

So if I’m going to leave you with one thing from my experience at the Joy of Coding, it’s to Stop.  Stop and think.  Stop and ask.  Stop and read.  What are you doing?  Why are you doing it?

And most of all, do you feel Joy when you’re coding?

PS There are some really great photos from the conference on Flickr.

Monday, 3 March 2014

In my day...

Web development has changed a lot.

I was aware that there have been many changes in the last few years, and I’ve seen maturity come to web platforms in the form of standardisation and common reusable libraries and frameworks - and I don’t mean reusable in the way we used to “reuse” stuff by nicking it off other people’s websites when we saw something cool.

I used to be a web developer.  Sort of.  Some times I’ve been on the bleeding edge, and others… I remember using JavaScript to call back-end services with an XML payload before people were using the term AJAX, but I also remember working on an enterprise um… “classic”… JSP application only “recently” - in fact that was probably the last job where I did anything that looked like web development.

So this blog post is going to chart the progress of web development through my own experience.  Of course, this doesn’t by any means cover the whole spectrum, but I think my experience has been not unusual for a Java programming working through the noughties.

Over the course of my career I moved further away from the UI, because certainly early on the money and status was in “back end”, whatever that means, and not “front end”.  Which is ridiculous, really, especially as back then you couldn’t really follow best practices and clean code and test first and all that awesome stuff when doing front end development because none of the browsers played by the rules and frankly if you got it working at all you were a bloody genius.  And that’s not even considering the fact that as a “front end” developer you should be thinking about actual real human beings who use your product, and actual real human beings are messy things and understanding them is not (we’re told) traditionally a domain that we developers are naturally proficient in.

Anyway, I digress.  This was supposed to be a history lesson.  Or a nostalgia trip.  Or possibly Ranty Trish waving her walking stick in the air and shouting “You kids don’t know how good you’ve got it these days”.  If nothing else, I hope that it makes other “back end” developers like myself appreciate how much things have moved on.

Let’s go back to the olden days, before I’d even graduated: picture a time before smart phones - before phones were even common (I was horribly mocked at university for being poncy enough to have a mobile), before we knew if all this work we were doing to combat the millennium bug was going to stop the end of the world.  I was doing my first summer internship at Ford, and a contractor from Logica (who don't seem to exist any more??) told me that if I was messing around with web pages and HTML (my friends and I had geocities-and-equivalent sites) I should look at this JavaScript thing to make my pages “dynamic”.  I didn’t have to just use GIFs to bring my page to life, I could move stuff around on the page.  I think I wrote a “you are in a crowded room”-type adventure game, because my background was BASIC and that’s what you do.

Actually I haven’t even mentioned that we were creating these websites to stay in touch with each other.  We’d discovered guest books, and used them to write comments and share stories since we’d all moved out of our home town to go to different universities.  Man, why didn’t I invent Facebook back then?  That’s what we needed.


A year later, I was back at Ford doing my sandwich year-in-industry.  The first project I worked during this time was a web-based reporting tool that needed to dynamically display hierarchical data.  We chose JavaScript trees to render this data - my year of messing around with my website paid off, and I was able to use my “cutting edge” Javascript skills in a real production environment.  Yay?  The back end was CGI - I think I was writing in Perl, but don’t tell anyone that.  I was learning Java at university, but this was a new language and I don’t think Ford was using it yet.

The next project was a very ambitious one - be the first car manufacturer to sell new cars on the web.  Ford was well ahead of their time - the millennium bug had not killed us all, but people were barely buying books online, never mind spending tens of thousands of pounds on a car they’d never driven.  But it wasn’t just ahead of its time from a business point of view, technically it was very advanced too - we used lots of “DHTML” (as we were now calling it), a new-fangled technology called ASP, and we were writing modular, reusable COMponents.  We used XSLT to parse the XML from the COM objects, and the ASP figured out whether you were Netscape or Internet Explorer (Firefox wasn’t even a gleam in the inventor’s eye, and forget Chrome, I think we using Alta Vista (whaaaat? AltaVista got bought by Yahoo??) not some new-fangled search engine beginning with G) so it could use the right XSLT to turn the XML into HTML that was readable by the browser you were using.  My job was to get the DHTML pages rendering and animating correctly in both IE4 and Netscape 4.  That was a lot of fun for me, but also very challenging.  And imagine my shock when a few months later I tested the site from the university UNIX machines to find that Netscape rendered it completely differently under UNIX.  I learnt a lesson about how important it was to test on different platforms.

We had some smart Microsoft people helping us out with this project, and, because it was 2000 and the dot com crash hadn’t happened just yet, we also had a lot of young, overpaid, overconfident contractors who believed anything was possible.  I learnt a lot during this time, not just about the technology, but also about different approaches to shaping your IT career.  And about how much you could earn before you were 25.  I was definitely going to be a programmer when I left university the next year.

Yeah, so… I graduated in 2001.  If you were around then, you’ll remember that getting a job was a bit more difficult than I had anticipated, especially as these young, overpaid contractors were now desperately grabbing anything they could find.  But that’s a story for another day.

I didn’t go back to Ford straight away, I’d “been there and done that”.  I worked on the website for Common Purpose.  On the first day, they sat me down with a book on JSP and Servlets, and that was my reading material for the next few weeks.  If I’d been fresh out of university where we’d been doing Applets, and where I’d written a Swing app on the side for my Dad’s school, this would have been a big mindset change for me.  But having worked on the ASPs it wasn’t such a big shift.  I did, however, like how JSPs and servlets made the separation between the view and all-of-the-other-logic-stuff a bit clearer - back in ASP-land we’d settled on a convention of dealing with the form data from the previous page in the first part of the ASP, and rendering the new page in the second part.  To this day I still don’t know what we should have been doing instead.  But in JSP-land it only took me... I dunno, about 6 months I think, to get the website up and running.  The most difficult section was registrations.  And yes, I was a graduate, and yes, I was new, but that was a good turnaround for a web application “in those days”.

In my spare time I used what I’d learnt on the blews website.  I even had a section where people could log in and comment on photos - we had whole conversations on this website.  It was a way for me and my friends to stay in touch.  If I’d cracked the photo-uploading instead of it being a manual process for me, I would have invented Facebook.  If only I’d known….

The work dried up and there was nothing else for a graduate in the early noughties, so I went back to Ford.  My first role back I picked the same technologies we’d been using before - XML, XSLT, only this time we were using JSPs instead of ASP.  Our project had a very tight budget and we’d worked out that using open source Java technologies and running the application on one of the many UNIX machines lying around the place was a lot cheaper than the Microsoft solution.  I think we were the first team in Ford Europe to pick Java at a time when the recommended approach was Microsoft.  We delivered on time and under budget, and Java was the way forward for the department from then on.  But on this project I met a guy who would impact my career probably more than he even realises, a guy I’d work with again later.  He told me that in Java we no longer used Vector by default, but ArrayList (whaaat? What’s an ArrayList? I had no idea what the differences were between Java 1.1, which we’d learnt at university, and Java 1.2, which was now standard).  And questioned my choice of XML/XSL.  Although I’d been learning new technologies and growing, he was the one who made it clear to me that I needed to keep myself ahead of the curve with the technologies I was using, or planned to use, if I wanted to stay relevant and make my life easier.

On the next project I worked with a genius guy who was definitely keeping ahead of the curve - he was using JavaScript to send small XML payloads to the server (which was coded in Java), and rendering the response in place on the page instead of reloading the whole thing.  Mind.  Blown.  I didn’t even hear the term Ajax until a year or more later.  We were fortunate in that this was once again an internal application, so we controlled the browser.  This was back in the days when you wanted your users to be on IE5, as this was the only browser that supported this functionality.

The next few projects/jobs I worked on were all more pedestrian variations on the JSP theme - first I learnt Struts, which at least made us realise there was a model, a view, and a controller.  Then at Touch Clarity I learnt about Spring MVC, which actually put the validation errors next to the boxes which cause the error - by default, without you having to mess around.  Spring was a revelation too, a framework that really tried not to get in your way.  It was also frustrating because you needed to understand its lifecycle, but it did so much heavy lifting for you, it sped up standard CRUD-app web development enormously.

A couple of years passed, during which time I was still working on a web application (for an investment bank) but I can’t for the life of me remember what technologies we used (other than Java).  I know it was hard to test and I know the tricky stuff was “back end” not “front end”.

In the next project where I had any control of the technology, I picked Spring since I’d had such a good experience previously.  It took 4 developers a couple of months or so to develop an admin application for a trading app.  Given the previous timescales I’d worked with, this seemed pretty good.  Until a few months later and two other guys on the project produced an admin app for our bank users in a matter of weeks.  I can’t remember what they used, maybe Grails?  But it was another demonstration of how I really should have been researching the field instead of simply sticking with what I knew, especially when I knew my knowledge was a couple of years out of date.

Fast forward to LMAX, and we were using GWT, pre-2.0 - I think this probably feels natural if you’ve been a Swing or AWT developer, but I’m still not convinced it’s a sound web platform (although I know it has improved).  It was great because cross-browser was no longer an issue, but it was bad because it separates you from the underlying HTML, which means you can seriously mess up without realising.  It’s also hard to use CSS correctly when you don’t have access to all the HTML components.

So we come to more-or-less the present day, as it should be fairly obvious that during the time I’ve been working on the MongoDB Java Driver I haven’t done a lot of GUI development. I’m lucky because attending lots of conferences means I see a lot more of the current-trending technologies, but up until a couple of weeks ago I hadn’t had a chance to play with any of them.

So now I’ve been trying Angular.js, Bootstrap, and UI Bootstrap.  My goodness.  It’s a whole 'nother world.  I’m seeing at conferences and user groups that developers are increasingly polyglot, so maybe there’s no such thing as “just” a Java developer any more, but if you are “just” a Java developer, I think it could be… interesting… to get your head around some of the techniques.  Since we don’t have closures, our callbacks are ugly and we tend not to program that way.  Async is not something that comes naturally in a Java environment, I believe, although after working that way at LMAX I’m personally sold on it.  Old-world JavaScript developers like I am/was might also find it hard to understand you can have clean, testable JavaScript code which Just Works.  It didn’t even occur to me to worry about browser compatibility, and my app not only worked on my phone as well as my laptop, but looked really phone-ish and awesome with very minimal effort.

I’m currently on a plane on the way to QCon London where I’m going to demo this Brave New World of web development (together with a nice Java back end to prove how awesome Java is to work with and, of course, a MongoDB database).  So it is not my intention in this post to explore what this new world looks like.  But I have seen the Present, and it’s a lot better than the Past.  Kids These Days don’t know how good they’ve got it - they’ve never had to struggle, to fight the browser, to hand-craft their JavaScript like we have, or had to work with raw, low-level JSPs and Servlets.

Now things are easier.  There are standards, there are libraries, there are best practices and YouTube videos showing you how to create apps in 60 minutes (back in My Day I had to borrow someone else’s browser to use the Internet, and I debated for years the value of spending my own actual money on a Javascript actual paper actual book, which I could not afford).  Now, you can get something quite pretty and functionally interesting, working in a lot less time than I realised.  But that doesn’t mean the Kids These Days have it easier - it means there is so much more potential.  Instead of beating your head against trying to get a specific version of IE to do what you want, instead of having to write separate pages for different browsers (although maybe that still goes on), you can be exploring so much further into the possible, try things that no-one else has done yet.  It opens up so many interesting possibilities for apps on all platforms.

Exciting times.

So next time someone asks me “What is the de facto front-end framework for Java?” I’m going to say HTML5, CSS and JavaScript.

Monday, 10 February 2014

Should you notice I'm a woman? Should I care?

So, following on from my observations of being an outsider at FOSDEM because I'm not an open source developer, I do have another story to tell where my female-ness is actually relevant.

I'm going to give specifics, but it's not to name and shame or anything like that, it's just that anonymising it will probably erase some of the subtleties.  But I'm not telling this to make anyone feel bad, because this is not an oh-poor-me story, this is just the way it goes sometimes and I want to share what it feels like.

At JFokus (a conference I really enjoyed, where I got a chance to spend time with some awesome people) I was on a panel (well, game-show really) about static vs dynamic languages.  Not unusually, I was the only woman on the panel.  Also not unusually, one of the reasons I agreed to take part is to do my bit in demonstrating that women have technical knowledge too (in my opinion, it's important where possible to avoid a stage full of white men of a particular age, and I'm in a position to be able to do something about that).  And, as per usual, I was a bit nervous about this in case the only woman on the panel also turned out to look stupid, but hey, looking stupid is one of the risks of this job.

During the session, my gender was mentioned twice - once with "ladies first", and once to specifically point out that our static-languages team was somehow superior because we had both genders represented (well of course we're better, I'm on the team). Note that neither of these was derogatory at all - both were, in fact, positive towards me, and I wasn't troubled or offended by them. I'm used to people noticing and commenting on my gender.  I got used to it in the same way you get used to your commute to work, or dealing with merge conflicts - it's something you do, it's not always comfortable, but it's no one's fault and they're not out to get you.

I didn't really process how the gender-mentions made me feel until after, at which point I was drained from giving yet another new talk that day, as well as the surprisingly physical panel discussion. But afterwards, when I was back in my hotel room packing for yet another plane journey, I was thinking "is it normal?".  Was it inevitable that someone was going to notice/point out that I'm female?

Was it down to my choice of clothing?  I debated long and hard with myself about wearing what was definitely a ridiculously short skirt for a session like that, but in the end I decided I didn't want to wear jeans like everyone else, and wearing tiny skirts is something I find fun. But I did think I'd be behind a table and it wouldn't be too obvious.  Should I worry that much about what I wear?  I used to plan what to wear for work, I used to love dressing up for going out with friends, so over-thinking my clothes for a conference is part of who I am.

And one of the reasons to wear the skirt is because I've found myself wearing jeans and t-shirts more than ever.  I think the combination of travelling a lot (I hate packing, so packing a couple of pairs of jeans and a bunch of t-shirts makes life easy) and being part of a tech company where that's basically our uniform has lead to extreme laziness in my clothing choices, and I want to change that.  Who wants to look like everyone else?  Not me.

So back in that hotel room, at the end of a long day, knowing I have to get up at 5am the next morning to get on a plane to New York, I felt drained.  I felt... vulnerable? But if I dig down to find out what's really making me feel not-cool, it's not because a couple of people noticed I was a girl.  It's because I was tired, because I was on display, because I had been worried about my choice of clothes, because drawing attention to yourself is not terribly British, because I didn't know if my new talk was any good.

It's easy to blame impostor syndrome, or something similar. And maybe this is what impostor syndrome feels like. But I'm pretty sure every conference speaker, whatever their gender, race, sexual orientation, age, has felt this way.  I don't think it's because I have two X chromosomes and I'm in a male-dominated environment.

I'm not really sure what conclusions to draw from this experience.  I did want to share it so that other people know what it feels like.

Possible conclusions:

  • When you're tired, it's easy to blame the first thing that springs to mind for your lack of shiny-happy feelings
  • When you've got a lot on your plate, seemingly-innocuous (even those driven by positive intentions) comments or actions can increase your stress levels
  • Don't think too much.  It can drive you mad.

Saturday, 8 February 2014

Feel like an outsider?


I've heard great things about this conference, so I was pretty exited to go

The Java dev room
Now I know people talk about impostor syndrome whenever they mention the woeful lack of diversity at tech conferences.  Interestingly, I felt like an impostor at FOSDEM - not because I'm a woman (there were quite a few techy women around at FOSDEM, more than I expected) but because I'm not an open source person.

I mean, I am, technically - MongoDB and the Java driver are both open source, and I have real live code on github.  But I didn't get there via the open source community, I was hired to do a specific job that happens to be open source (for which I am extremely grateful).  So although I knew the MongoDB folks I was there with and a lot of people who were running or speaking in the Java room, I didn't feel really at home in this conference.  I think I feel more comfortable with the ones aimed at enterprise Java developers (by which I mean Java people who work producing software for companies) because this is more similar to my background - I understand the attendees and I think I know what they want.

It's also possible since I've been to a lot more of the enterprise-aimed conferences that I used to feel just as awkward there, and I've become much more comfortable now I've been to many.

Which leads me to another observation: when I first went to JavaOne, in 2011, I felt extremely conspicuous as a woman.  I mean, I didn't do much to help, my skirts and shorts are occasionally… not really enterprise-developer-length.  But I felt like everyone noticed me and I felt the pressure to assert early on in every new conversation that I was, in fact, a developer and not a booth babe or a recruiter.  But these days, I feel much more comfortable.  And do you know what's really helped with that?  Being a speaker; having my face on the website.  I don't have to prove I'm a developer, I was asked to speak at that conference - if the conference organisers think I belong there, then I belong there.

So… what.

Well, we can do things to combat this I-don't-belong-here feeling - I'm pretty sure we've all been there, regardless of gender, race, background etc.  To be honest, us geeks probably feel this more than most humans.  

Conferences and user groups and meet ups and so forth can all make life a little easier for those feeling this.  At the London Java Community, for example, we started having greeters at the door for our social events, to try and make everyone feel welcomed and to introduce people to each other.  I also liked what YOW did - they had a really informal social event at the end of the first day of the conference (with free booze, yay!) which made it relatively easy to mingle with other people.  FOSDEM, with its lack of free food and drink gave us less opportunities to mingle with people other than your own friends, although I did like the canteen area for random encounters.

But it's not just down to organisers of groups or events to solve this problem for us.  I've found that if you do feel like you don't belong, there's a way to get over that, and it's not to withdraw.  It's to get more involved.  Find the groups you feel most comfortable with (for me, it started at the LJC), find the medium that you're most comfortable with (in person meet-ups, e-mail, IRC, Twitter, whatever), and join in.  Have conversations.  Meet people.  Once you start to make friends you start to feel like you belong, and when you start to feel like you belong you can step up and do more.  You might even find yourself accidentally propelled into speaking at an international conference, and who knows where you find yourself after that?  Although I appreciate that's not for everyone.  The point is, find your comfort zone for entry and gradually push yourself more - as you find yourself more accepted and respected, you'll feel less like an outsider.  At the very least, you'll have friends to talk to at these sorts of events.

And don't be put off by a couple of bad experiences - you don't have to go back to that group, those people, that thing, but don't assume that all groups or events are like that.  I've been to a number of events, techy or otherwise, that I didn't feel at home with.  If, after two tries (in person, I'll give e-mails lists or chat rooms many more chances), I still don't get on with it, I try somewhere else.

There are still going to be times when you're not in your comfort zone, but this is probably healthy - pushing yourself a little leads to different opportunities.  And in my case, it reminded me what it was like to be an outsider, a newbie.  And that gives us greater empathy for people in that situation.

Friday, 31 January 2014

Sevilla MUG, first event

Last night was the inaugural meeting of the Sevilla MongoDN User Group.  An event organised with just over 48 hours notice, in a city where I don't speak the language and where even my best-connected contacts aren't sure they're fully plugged in to the tech scene.

I'll admit, I had some reservations:

  • a lightning talk? Will people come all that way for beer and 15 minutes of presentation?
  • in English? Whilst I'm desperately learning Spanish to get closer to presenting in Spanish, at this point I'm just not ready and have to hope people want to listen to me ramble in a foreign language
  • a MUG? Are people interested in joining a group that's solely focussed on one technology, a technology that might not have adoption here or even interest?
  • two days notice?  Are you kidding?  I know people here like to figure out their plans at the last minute, but surely this is shooting ourselves in the foot before we even start.

And then last night...  The people... they came.  On time.  And with their interesting stories and their varied backgrounds.  They listened, they asked questions, they wanted more.

What a great event.  What an awesome city.

I can't wait for next month.

(Slides here, with usual caveats of them being pretty pointless on their own)

Thursday, 23 January 2014

Introduction to MongoDB and Big Data

I wrote an article for the latest edition of Java Magazine which is an introduction to MongoDB for Java developers, and a nod to why it's good in the "Big Data" space.

Look inside >
MongoDB and Big Data

Monday, 20 January 2014

Why is it News when a woman becomes CEO?

I'm pleased to see that GM has hired the "best person for the job" as their new CEO - that does seem like a good idea.  I'm happy her gender did not get in the way.  What makes me uncomfortable is the international news coverage of the decision of this large manufacturer to hire a woman as their CEO - if she were a man (and/or black/gay/disabled) would the headline read "The camera loves her. So do employees."?

But at the root of that is probably the thing I'm most unhappy about.  What I'm not happy about is that it is 2014, halfway through the second decade of the 21st century, and she's the first woman CEO of a car manufacturer.

I worked at Ford Motor Company as an undergraduate and, later, a graduate.  I basically did my apprenticeship there. I know that over fifteen years ago they were hiring graduates from different disciplines (men and women), they had a women-in-leadership programme (or probably several, as I was only involved in the one for the IT organisation), they had a great maternity package (a great package for adoption too, but only the standard paternity package, ho-hum), on-site creches at the bigger locations, and were actively looking for ways to improve their diversity across the board.  They had issues on the plant floor which they were actively working to address, but management did not have a culture of discrimination, to my knowledge.  I remember the number of "real" techies in my IT graduate intake year, not the number of women, probably because the women were better represented than the coders.

So why has it taken so long for these old, old companies (Ford turned 100 while I was there) to put a woman into a position of leadership?  Maybe all these actions are what has, finally, lead to this mold-breaking appointment.  Or maybe decades of doing what is supposed to be the right thing is not having any impact at all - Mary Barra's father worked at GM for 39 years, she herself started there as an intern and engineer, and has worked in different areas of the company as she's risen through the ranks.  In this day and age, it's probably more unusual to appoint a CEO who worked their way up to that position in that company than it is to appoint a woman - I'm not sure how many more there are out there when often it seems the best way to get a promotion now is to switch company.

I don't know why it took GM so long to appoint a female CEO, I don't know how they managed to be the first of the big automotives.  And although I really hate all this "Oh wow, a woman CEO" news coverage (and I dare not read the comments because I know I'll get angry), I don't know if it's something we need to do, to hold up these positive female role models, or something we should stop doing because all it does is point out how unusual women in leadership are - how news-worthy it is that a big, old organisation has finally joined the 21st century.  But the fact that I felt the need to blog about it I think means we still have a lot of work to do in this area.

Thursday, 2 January 2014

Goodbye 2013, you were good to me...

Well, if I thought 2012 was the fastest disappearing year on record, that record was smashed into the ground by 2013.  What a year!  And because I didn't manage to write this on time to publish elsewhere, I can do a more personal reflection of the year here on my very own blog.

Apparently, reading over last year's article, I had goals for 2013:

Get more involved in schools/mentoring.
Yeah... That didn't happen. I don't think I even made a single Meet a Mentor event this year, which is an excellent, really lightweight way of mentoring in London, and I'm sorry I was unable to participate.

Contribute to a major release of the MongoDB Java Driver.
Well, I contributed... but it's still not ready for release yet.

Give a keynote at an international conference.
Nope, didn't manage this either! But I did keynote at the LJC Open Conference again.

...and more of the same from this year: presentations, user groups, blogging, workshops.
Well, this I did manage. More on that later.

I foresee a lot of travel in my future.
There was even more than I imagined. And a big bit of travel that I did not anticipate.

I also made zero progress on the book I signed up to do in 2012, and did not start the other book I have simmering in my head, although I really hope that YOW has given me enough momentum to make a start on that.

So, what a let down, right?  I only managed two of my five resolutions, what a sucky year!

Not at all.

What an amazing, busy, life changing year (yeah, but every year changes your life in some big or tiny way, right?  Otherwise we'd be standing still).

2013 was the year I got stuck into my new job.  I have to admit, the evangelism bit was kinda tricky when you have to sign up for conferences months in advance, and I didn't know a) anything about MongoDB (shh, don't tell anyone) and b) what my strengths or interests would be.  Given we were re-writing and re-designing the Java driver, I opted to create a fluffy talk on software design, that I could evolve over the year as we learnt more during the driver re-write.  And because I apparently still follow the "say yes to everything" policy from 2012 (something that's not supposed to be a theme of 2013, and made my life trickier than it should have been) I've given a couple of other talks on things that I can't help ranting about.

Development-wise, we've made progress on the new Java driver, but I've felt unable to contribute as much as I had expected to - travel and conference preparation take a lot more time out of my schedule than I ever realised it would, not to mention the cost of context switching.  However, I am proud of some of the things I've brought to the project, including gradle, coding standards (automated with checkstyle, findbugs and codenarc), Spock testing (as well as a general focus on automated testing), and addressed all outstanding pull requests.  As well as creating a tutorial for the new Java driver, I've also made a start on better documentation.  These last two are areas I'd like to progress further in 2014.

I've done quite a lot of community support this year too.  Although I find it hard to answer most of the questions off the top of my head because I'm still learning, answering questions on Google groups and StackOverflow has probably been the best way for me to learn about MongoDB, particularly how Java and JVM developers are interacting with it.  And from barely having any points on StackOverflow I've now got over a thousand - yay!  Hurrah for gamification, it's a perfect carrot for Trish-shaped people.

Although I've done less writing on the blog in 2013 than in 2012, I'm pleased to have posted some more meaty technical content in the form of the Spock blogs (I feel like my conference write-ups are just filler, but people seem to like them so I'm going to carry on unless otherwise instructed).  I also made my debut on the blog and on the O'Reilly Developers Blog with a two part piece on technical testing in job interviews.  I'd really like to focus more on my writing in 2014, not just my blog but more guest posts and more magazines.  But I'm not going to be over-ambitious and claim any of my book-writing is going to happen.  

The highlight of my year was moving to Seville (Spain) in August.  Moving out of London definitely made is almost impossible to hit my previous resolution of mentoring, and means I'm no longer as active in the LJC, but it's such a great place to come home to when I've been travelling.

And speaking of travel, I guess this has made up the majority of my 2013.  So I'm going to bore you with a summary of it.

New York: Spent a week locked in a meeting room in our NYC office with my co-conspirator on the Java driver.  I love working remotely, but this week spent on location was worth more than months of working from home - not only did I get to meet/hang out with colleagues, but I got to know my main co-worker much better than I would have otherwise (even with video conferences), and it was instrumental to creating a productive working environment.

Post-Christmas New York
Miami: A month later I had an even better opportunity to get to know this company I'd signed up with - our all-hands meeting was in Miami, and pretty much everyone was there (there was even a dedicated room to for 24 hour support that worked in shifts so that the support guys could be there).  It was enormously valuable not only to meet everyone, but also to hear from all of management what their vision for the product and the company was.  I know that sounds boring, and when I worked at Ford I hated that sort of thing.  But nowadays I want to know what sort of company I'm working for and what direction they're going in, it helps to motivate me.  It was also nice to feel like part of two teams - the familiar faces there were the people from EMEA (mostly the London office) and the drivers team (distributed everywhere, but many in New York).

When I got back to London, I was flattered to be interviewed as part of the Women Tech Makers series.

You won't believe it was sunny the previous day
London: I was lucky to be part of the programme committee for QCon London, so for the first time I got to see what goes into organising these conferences.  It's not easy!  You can have as many opinions as you want, but you need to work really hard to find great speakers and great content.  I was especially surprised when I actually attended how poorly we'd done in attracting diversity in our presenters, even though Aino, Dan and I are particularly passionate about this topic.

At QCon I gave a workshop on the new Java driver, which had limited attendance and required me to re-think the tutorial.  I was a bit discouraged by this, if I'm honest, but later in the year I built off this experience, and I'm glad I learnt something from it and managed to improve too.

As a presentation, Dan North and I talked about interviewing - mostly from the point of view of the interviewer, but also there should be plenty of tips if you're currently looking for a job. At the time, I was concerned about this presentation as it was a very last-minute thing, but we've had some great feedback from the talk which makes it all worthwhile.  I find co-presenting a little tricky because a) you have to work around another's schedule/style/interests and b) when I'm co-presenting with someone with an awesome reputation it makes me feel like a shy schoolgirl, which is not great for stage presence.  But this session was a lot of fun, and working with someone with more experience is the best way to get better.

DevoxxUK: Hot on the heels of QCon was the first Devoxx conference in the UK.  If there's something I learnt from this experience, it's to not be on the programme committee for two conferences that happen in the same month, and present at both of them.  But however difficult it was behind the scenes, Devoxx was an absolutely brilliant conference as a speaker and attendee.  It's also where I first presented "What do you mean, backwards compatibility", the talk that's been evolving all year, using the Java driver as a case study for software design.  I also co-presented on an intro to NoSQL with Kim Ross - I should try and get that video online actually, it might be good to publish.

The last weekend in March, after these two brilliant but exhausting conferences, my boyfriend and I had a conversation which, somehow, unexpectedly, led to us investigating a move to Spain.

I took myself away from London for two weeks and managed to actually get some code done.

An amazingly productive working environment
GeeCON, Poland: I've already summarised what I loved about this conference in the blog, but here I gave the Backwards Compatibility talk again:

New York: again.  Another catch up with the team, and to meet our newest member, Justin.

Dublin: Worked from our EMEA headquarters on commercial support, which was an interesting experience.  Also presented at a local user group - I like these mixed technology groups, you get to hear some different experiences.

Shanghai: Absolutely amazing experience, my first time in Asia.  Loved it.

Moved to Seville.  Had holiday, did some actual code.  I swear I code better in the sunshine.

What a month!
Oslo: JavaZone.  Unveiled the new version of my talk, higher level and fluffier: "Design is a Process, not a Document".

I managed to survive Oslo with only my phone, since my trusty D80 camera finally gave up, but at Heathrow was "forced" to upgrade to the D7000 - since I took almost no pictures of Oslo, it's clear I need a "real" camera.  Honest.

New York: A Grand Meeting of the JVM and C# teams.  Sat in a room with everyone I got a much better idea of the motivation behind a lot of our design choices.

This trip to New York was a bit of a disaster on the personal front, losing my phone, having things stolen from the hotel room, being put on two broken planes at JFK before finally having to go back to Manhattan overnight so that we could fly the next day.  But these are all first world problems, solvable with time or money (or both), and you just move on to the next thing.

San Francisco: My third outing to JavaOne.  As always, it's all about the people you meet out there.

...and I still haven't been home yet.

Aarhus: Finally made it to GOTO Aarhus, it's the first year I've been invited and not had a clash with JavaOne.  The sneaky beggars made me track host of the Careers track to ensure my attendance.  I never blogged about Aarhus because I got further and further behind on the blogging (instead of having loads of opportunity on the plane, like you'd think I would have, the more travel I did the more likely it was I would fall asleep in front of a movie instead).  I gave two talks here, both different to anything I'd done all year, because what you need when you're on a plane and in hotels for a whole month is to decide, for your last conference in the tour, to do something completely different (Note To Self: Do not do this again).  The first was Career Advice for Programmers, a talk I was disappointed with because I have so much to share and 50 minutes was not enough.  Probably more suitable for those starting their careers than senior developers.  The second was Top Ten IntelliJ Tips (with special guest star Dan North), which also didn't go as well as I'd liked, because live coding is fraught with danger, but if people pick up just one tip from it, I've done my job.

Aarhus was a great conference that I simply didn't appreciate as I spent most of the time asleep or preparing both talks.  Four cities back to back is simply too much, especially if the Atlantic separates some of them.

I was eventually allowed home for a week, then it was...

This is all I saw of Berlin
Berlin: At this point the travelling was less entertaining than it used to be, and, once again, I was re-writing the talk as I needed to present something much more MongoDB-specific (apparently I'm an evangelist for some NoSQL database - who knew?), so I saw nothing of the city at all, which is the thing I regret the most.  However well or badly this new talk went, Berlin was a great opportunity to meet some really awesome speakers - smaller conferences (I think it was about 300 people) are much better for mingling.

London: Back on (more or less) home turf for JAX London.  When I signed up for this, I didn't know I was going to be living in Spain, so I thought it would be painless to give a presentation and the updated workshop from QCon London.  Yeah... I panicked a LOT about JAX (I apologise to the organisers for passing on my panic without giving them enough notice for them to be able to help me), in particular the half day workshop I gave, as I didn't feel that went well at QCon.  And it scared the crap out of me to find out 30 people had signed up and more wanted to come.  But after putting a lot of work in to the preparation, and taking into account the lessons I learnt at QCon, this tutorial went really well, and I'm ready to give it at conferences next year.  Also, I think tutorials are the right place to talk in depth about MongoDB and to teach people about what it is and how it works, and presentations are a better platform for more general things that apply to a wider audience.

I have almost no photos from this trip to London (apart from a couple of Colin pretending he wasn't going to drink at the LJC Community Night) - looks like I didn't bother to bring my camera, since one of the few I have is via the iPad.  This is what you look like when you visit eight different cities in less than two months:

More Actual Code, a Virtual JUG presentation, and then...

New Zealand: How exciting, an Actual Holiday.  Because I get to travel all the time, and often get to see the cities I visit, I haven't taken any real time off since February.  As we were going to be in Australia anyway, we got a chance to see New Zealand - a country I've always wanted to visit, ever since my uncle lived there when I was a child.

Australia: I've already given a very detailed round-up of YOW.  If I say it was my favourite conference of the year, people will remind me that I've said that of more than one conference.  But it was an amazing way to round off an incredible year.

So, there you have it.  2013 was a year in which I travelled all over the globe, visiting two continents for the first time as well as jetting around Europe and the States.  It's a year where I started to learn a new language (Groovy) and continued to make very limited progress learning another (Spanish). It's a year in which I struggled to find the balance between all the parts of my job and my personal life, not always getting it right, but learning a lot in the process.  Sure, reading the travel bits make me feel like I spent a lot of it fairly stressed, but it's also a year where I found a lot of happiness.

So, 2014, I have plans for you:

  • Travel less.  At the end of 2013 my batteries were extremely empty, the back-to-back travel has a much larger impact than simply the time it takes out of the schedule to get somewhere.  This resolution is not just about not getting on a plane, I want to focus a bit closer to home - Madrid and Barcelona, I hope you guys don't mind presentations in English - including investing in local communities in Seville.  But for those who aren't here in Spain, I have plans to compensate for this lack of physical interaction with people like...
  • More remote presentations.  The vJUG presentation went much much better than I expected, and it took a lot less time out of my schedule.  It was also a lot of fun.  I also want to do more webinars, screencasts, and so on.  On a related note...
  • More writing.  Yeah, I probably said this last year.  But I've got a backlog of things for the blog, plus a number of other magazine articles I'd like to do.  I've got loads of things I want to write up for our official documentation too.  And this isn't just pictures and stories, but code-heavy stuff as well, like...
  • Workshops and tutorials.  These are a better platform for learning about MongoDB at conferences (better than an hour-long talk anyway), and with a bit of effort should translate into something that can be done by anyone, anywhere.  We already have a free education course for Java & MongoDB, but I want to offer even more examples of how to code against our driver and the other libraries people might be using.  And not all these libraries are in Java-the-language, for example...
  • Do More Groovy.  I've really surprised myself, because I'm a die-hard, too-old-to-learn-new-tricks Java person, and I'm falling for Groovy - I love that the syntax is Java-ish but slick and descriptive.  I want to continue with the Spock stuff in the driver, but I have ideas for a load of other Groovy things I could do in the Java/JVM/MongoDB world.
I think that's plenty to sign up for right now.  Speaking of which, I've sort of failed at point 1 already, and I might see you at one of these:

31st Jan - 2nd Feb: FOSDEM.  I'll be lurking in the NoSQL room.
4th Feb: JFokus.  I can't stay for the whole conference as I have to fly to NY.  Wait, what did I say about not doing things back to back?
5th Feb - 12th Feb: In New York for company meeting stuff.  Can't wait to be back, feels like a long time.  I wonder if it's worth trying to find a JUG to speak at, or if I should stick with my usual schedule of catching up with friends and colleagues, and shopping?
3rd Mar - 6th Mar: QCon London.  Currently scheduled for another MongoDB tutorial and a talk (about groovy, yay!).  Schedule will change, because I'm currently clashing with...
7th Mar: Joy of Coding.  Not sure what I'm going to be talking about, votes welcome...
20th May - 21st May: GOTO Chicago.  Again, not sure what I'm presenting on.  Will also probably spend some time in NYC while I'm in the neighbourhood.

So yeah... that's my quiet 2014....