Java World to Ruby World Conversion – Taking a Peek

As a professional software engineer, with the Java World as your primary domain, you may consider taking the plunge and either dabbling with the Ruby World or making it your primary bread and butter domain. In this post we compare the two worlds with a simple table listing.

Its worth noting that the term Java developer in itself does not mean a lot, most developers have a preferred peripheral stack from the operating system upwards and in addition some may specialise in particular domains (front end, back end, integration, other domain) and hopefully a set of treasured reference books. So naturally this listing comes loaded with the bias and interests of the author.

You will notice that in some cases there are no equivalent frameworks and specialist tools when it comes to the Ruby World – in these cases, it may be best to look at your requirements and let a combination of a Quality Attribute Workshop and the Architecture Tradeoff Analysis Method guide your software architecture. It may be that you end up with both Ruby and JVM based modules in a large scale distributed system.

One important thing to note when comparing the two worlds is that with appropriate tooling (e.g. JRebel) and a supportive architecture it is possible to develop rapidly in the Java World. There are those that still make the assumption that enterprise Java development is overpriced and slow.

Java World Ruby World
Apache Maven No direct equivalent. Combination of distinct tools. BundlerRakeRubyGems and more.
Eclipse RubyMine by JetBrains
Sonatype Nexus No direct equivalent. gem server, Gem in a Box.
Apache Camel No equivalent. Can use STOMP to connect to Camel component.
Ruby Language (JRuby) Ruby Language
Google Guava No similar public Google supplied library.
JRebel Not applicable since Ruby is a dynamic programming language.
Java 8 Reactive Language Features Reactive Extensions for Ruby
Spring declarative transaction management with isolation levels Similar power available using Active Record – documentation not nearly as rich and mature
Workflow and BPMN e.g. Activiti BPMN 2 Process Engine No direct native equivalent (i.e. unit testable process flows). Integration options exist for e.g. Process Maker.
Spring Batch – batch application framework No equivalent. Some basic batch processing constructs in Active Record.
Vaadin No equivalent.

Taking Things Further – Inspiring Reads

  1. Enterprise Architecture with Ruby (and Rails) – without a doubt worth a look if you have an interest in software architecture
  2. RailsTutorial – a well presented, clear and concise book if you are looking to get your hands dirty

Rails in Wellington, New Zealand

If you make a living as a software engineer, the local market for a given stack naturally matters. Here are some organisations where Ruby on Rails is used in the author’s home town, the awesome city of Wellington, New Zealand.

  1. Youdo
  2. Powershop
  3. Datacom
  4. Aura Information Security
  5. Abletech
  6. Southgate Labs
  7. Loyalty.co.nz

 

 

The AWS Professional Services Bandwagon – Beware

In Wellington, New Zealand, where I live, and no doubt in many other cities in the world, professional services consultancies are predictably jumping on the AWS (Amazon Web Services) Bandwagon. Everyone wants to be seen as THE experts in AWS.

In my mind, in terms of a business model, this is all well and good – but its more important and sustainable to be the cloud software engineering experts backed by the best engineering talent money can buy. Being an AWS expert is simply not enough.

So how do you become a cloud software engineering expert? In my mind by building and launching hugely ambitious, useful, global services that delight their users – even if you give it away for free – yes, build software for free. Sounds crazy right? No it’s not crazy, passionate engineers do it all the time and this attitude is the foundation of some of the most successful companies in the world.

But why aim to scale globally, even with a simple service? Because this is the only way you’ll get onto difficult engineering challenges. It’s the only way you’ll get pressed to look at each and every part of functionality in detail and determine how you’ll make sure every single user has a delightful experience. Also, if you are burning your own money, rather than someone else’s (a client’s money), you’ll be very, very careful with your design and possibly even think about it night and day.