If you have done any development in Java-land, then surely you came across the dreaded three letter word EJB. And you were most likely duped into thinking it was great. I did! Then I realised it was just a specification. It was a great big, furry, non-executable PDF. A specification for managing objects but the creating of these objects were just horrid. EJB3 was a clean-up exercise, but still far from nice.
A couple of months ago I ran into OSGi again, but with SCA on top of it. Horrid! SCA is yet another warm and huggable specification. But it’s so ugly to work with. Everything feels so over the top complicated and restrictive in expression. And the tools that I saw built on this SCA implementation were just awful. Beyond being buggy, the enforced paradigm was just counter-productive. When will tool vendors realise that talented developers do not want a diagramming interface to write code? But the root cause is that the SCA specification describes the diagramming notation. Yuck! Same reason that I do UML sketches with a lot of bastardisations with no tie-in with my code.
And let me not go into domain specific big vendor specs, designs, blue prints, etc. like IBM’s Insurance Application Architecture (IAA). Nasty stuff.
More commonly, I see so many self-confessed agile teams fearing the dreaded big design up front, and the big requirements up front document thrown over the wall. If there is such a fear for big-x-up-front, why is there no fear for big-industry-and-vendor-specs-up-front like EJB, SCA, IAA, etc?
There are deep lessons and principles lurking beneath this surface. Agile demands you to be a lot more aware of actions, decisions and consequences.
So why do you choose not to be agile when you are trying so hard to be agile?
I just upgraded to Snow Leopard and installed buildr which failed miserably.
/Library/Ruby/Gems/1.8/gems/rjb-1.1.9/lib/rjbcore.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/rjb-1.1.9/lib/rjbcore.bundle, 9): no suitable image found. Did find: (LoadError)
/Library/Ruby/Gems/1.8/gems/rjb-1.1.9/lib/rjbcore.bundle: no matching architecture in universal wrapper - /Library/Ruby/Gems/1.8/gems/rjb-1.1.9/lib/rjbcore.bundle
It turns out that I needed to rebuild rjb, the ruby-java bridge, but that failed too.
extconf.rb:48: JAVA_HOME is not set. (RuntimeError)
I was certain that JAVA_HOME was definitely set and it was pointing to the 64-bit Apple 1.6 JDK. Digging in extconf.rb, it finds JAVA_HOME from the ENV hash
javahome = ENV['JAVA_HOME']
So, nothing weird about that too! What’s going on? I was installing buildr like this
sudo gem install buildr
The problem is that once you sudo, you are running with another environment, one without the JAVA_HOME variable. So, the quick fix is simply
I completely forgot about this side-effect. Like all side-effects, it was painful – it just cost me an hour of digging around looking at all sorts of other things. But, more importantly, breaking fundamental assumptions (e.g. my environment is the sudo‘s environment) and zoning in on the root cause of the problem resulted in a very simple solution.
I finally got out of neutral and pulled together the first public offering our Domain Driven Design courses in Cape Town, South Africa. Normally we give these courses on-site with people on the same development team but I thought it may be fun and inspiring to open it up to everyone for a change. Now I’m all excited again and really looking forward to a diverse mixture of people. Hopefully, I will see some old faces and lots of new people.
The one thing I can tell you is that the course is a very immersive experience. I really hate lecturing but I enjoy probing conversations and that’s how I give the course. I don’t have answers to the practical work and concerns are addressed as we go along. As a result, the day takes unexpected turns and routes. But in the end I get you to the right destination. Come along; you will leave exhausted, but inspired!
factor10 has expanded its services in South Africa to include our advanced and
expert level courses aimed for the software professional. On September 8-9, 2009,
we will be offering a fast track to DDD for Architects at the BMW Pavilion in
Who should attend?
This course is for software professionals that want to take the right steps towards
advanced and expert levels in their careers. Register for this course if you want to …
learn more than just another syntax and set of tools
write software for large, long living systems
increase the quality and maintainability of your design
design high quality models and use code to represent those models effectively
develop applications with a good APIs
add a design edge to your skill set
Why should you learn DDD?
More and more developers and architects realise that learning every detail of a new
API just isn’t the way to deliver the best business value. It’s such a tough balancing
act; focus on the solving the business problem and focus on building working software
with your frameworks.
One way of taking a big leap in the right direction is to learn and apply domain driven
design. It is definitely not abstract and fluffy; it deals a lot with the code also. DDD
leads us to focus on understanding and to communicate that understanding very well;
in language, in design and in code. You will shift your focus away from designing for a
technology, and you will learn to design for the business domain; to the core of the
problems and solutions. Those are the most interesting parts and what your users
and customers really care about.
The unfortunate human characteristic in all of us is that we like rules when we’re in a new and unfamiliar situation, and hate them the moment we think we are experts. The problem is that rules are great for creating concrete things. If you want to build this then: do a, then b, if you have a c then do d otherwise do e. But it does not work with creating abstract things. And software development is all about building abstractions.
In the past few weeks, I’ve had a few instances where I realized that some people were, basically, asking me for DDD rules – steps for building an aggregate, when and how to use the specification pattern, etc. There are no rules for the noobs for these things. But I think I can constrain the environment so that the noobs can focus a bit more intimately with these aggregates and specifications. One rule I put down was “When working with the following … don’t work outside of this Java package”
Essentially, my proposition is that rules for noobs should constrain the learning environment, not the subject being studied.
My presentations from Oredev are finally available. After working through almost all the export options on Keynote, I have settled on QuickTime as the distro format. The “flying code” in the aspects presentation worked out best with QuickTime. Note that it’s not a continuous playback and you have to click-through each frame.
I certainly did not expect to be doing 4 sessions! It’s going to be a busy conference but also immense fun. I hope that I get the time to attend the other talks and learn from some amazing people. I certainly will be catching up with old friends as well
Mats Helander has written an excellent article on how to manage your domain model with some intelligent design trade-offs. It’s a lengthy article that even manages to introduce AOP as well. If you start reading it and wonder where it’s going, just carry on reading…it is written in an evolutionary style. Nice article, Mats! UPDATE: I have written the Java equivalent of the listing in Mats’ article and attached it. The AOP part uses SpringFramework 2.5 and AspectJ.
PBT Group and the Johannesburg Centre for Software Engineering are hosting a JRuby master class led by Andrea Provaglio. I met Andrea at the Software Architecture Workshop in Arosa, Switzerland this year and I cannot speak more highly of him. Just check out his web site for details. It’s not often that we get a chance to have such learned architects and practitioners in South Africa. Let’s take advantage of this opportunity. The greater the support, the easier it is for us to pull in heavy hitters in this industry for future events.There is a class scheduled for Johannesburg on 16 January 2008 and Cape Town on 29 January 2008. Registration is online at the JCSE website. Just follow the links from the front page.See you there!