Over the past few months I’ve been writing more and more applications to help maintain and deliver the services we run, from metric gathering to regional dr and anything in the middle. For A while now one of the developers at Alfresco has been writing a framework that makes it easier to write selenium tests for Alfresco share which takes a lot of the hassle out of looking for certain elements or class id’s or updating everything if the UI changes. So we have been talking about it for a couple of months and today I decided to get some time to look at it and ask loads of silly questions about eclipse and maven and so on and so forth.
It took about 3 hours to get everything set up and working, most of the time was just spent learning to use eclipse and maven with a walk through of what it can do, how to extend it and how to do stuff with it. Considering I hadn’t done any Java for 6 years it wasn’t that bad and within 15 mins of being left to it I had made a class that loged in and searched for content inside the repo.
One of the reasons we’re so interested in it is because as DevOps we like simple things and it takes a lot of the hassle out, it means we also get to do some complicated things with Share and we only have to worry about what we want to test or measure. All of this got me thinking about the languages we use and the problems they solve.
Right tool, Right job
Currently in our team we are using bash, ruby, python and java. Bash is simple and can achieve some good results although typically quite slow, typically if it is a short script it will end up in bash, although we do our orchestration in bash and it manages the bear metal to working OS by triggering what ever apps we need or setting config.
Ruby is the language of choice for me when I need to do something that requires data to be manipulated or retrying actions or anything that is more than procedural and you can rely on it to do a good job in a reasonable time.
Python is new to the team, it feels a gap which is that it’s as easy to write as Ruby but is more scalable at size, I haven’t done any python yet so I can’t really comment but the web app that has been built with it in a couple of weeks is quite impressive. Java is more complicated harder to write but can offer more complex apps, but typically I’m not sure that you need to make apps that complex.
So I’m not a fan of Java, but mainly because I think it takes a long time to get anything of any value out of it, especially on a small task. If I had to write an application to manage backups I would not go to Java as it’s like using a bazooka to hit a fly, likewise using Bash is like using a feather duster where as ruby and python fit nicely in the middle. Well after todays experience I’m glad I’m doing it in Java, I would have spent weeks making something half as good in Ruby to just avoid using Java and I guess it’s not really that bad.
I could have wasted time doing it all from scratch or just take what’s already written, so I stole like any good DevOps guy would.
I’m probably going to spend some more time in Java over the next week writing something a bit more useful than todays experiment so hopefully I will still be optimistic about it all, and maybe I’ll remember why I don’t like Java or maybe I’ll change my opinion, who knows!
I think this is a natural extension of people over process which got fame through the agile manifesto but in reality has probably always existed at some companies.
In the new world of operations you are surrounded by technology written in a multitude of languages. By rigidly sticking to a defined table of what to use in each situation it just slows things down.
It’s a nice idea to be able to build deep skills in a smaller number of areas, but from experience, it doesn’t work out that way. What happens if you want to integrate web service XYZ and their best SDK is in a language you banned? This happened to us for a bit and it was a terrible mistake – in hindsight we should have realised that if things are hard they are much more likely never to get done, and by using whatever tool (if it makes life easier) you want, you at least get some benefits (and in the case of Python these were easily traded off by passion and home learning).
I’m still a bit old fashioned in that I believe Java is probably the best ‘platform’ to sit in the middle of a complicated system. Perhaps this is because often that’s the most bespoke part. What gets bolted on around that should be up to the developer / team at the time. Why not take advantage of community code and faster results from the other languages where they make sense?