Oh boy, the JFokus event was really fun! There were lots of new ideas, technologies and people, interesting discussions and free brochures, memory sticks and cool T-shirts. Sadly, I wasn’t the one to get the coolest T-shirt — the Atlassian “Angry Nerds” T-shirt — Henri did.
I’m attaching a list of the sessions I attended, along with some of my comments. From the list, it’s easy to see what kinds of topics are popular now and why, things like functional programming, cloud services, scalable “stateless” frameworks, and polyglot data architectures.
We developers need tools for developing highly scalable applications for multi-processor or cloud platforms, where we don’t have full control.
Agile methodologies are now mainstream and it’s accepted that the only thing that is constant is change. So, we need agile frameworks, languages and platforms for developing apps in environments where requirements change regularly.
A good example is a small startup company: one day your cool social app has 100 users in a day; the next day, the usage explodes and your app has to handle 100,000 users in a single day. At the same time, those 100,000 users start asking for new features and start finding bugs. You won’t be in business long, if you can’t respond to those demands rapidly .
But now to the list (to the program). :
1. Agile Architecture – A Design for Replaceability (Marcus Ahnve, Valtech)
The talk began with an acknowledgement of the problem that IT systems are usually way overly monolithic, in other words, IT systems have developed into “behemoths”: massive ungainly, slow-moving, inflexible monsters.This monolithism then affects application “replaceability.” Everything has to deploy at same time, i.e login, searches and the public or admin parts of an application. If one part changes, everything has to build and deploy all at the same time. Also, if the application is a good one, but you would like to change or improve something, for instance, only the login part which is bad, such tweaking is usually an impossible task.
The speaker offered a solution where the developer would only standardize data and communication protocols. Then, you would divide the application up into smaller parts such as the login, or the oAuth; the admin, the public aspects, etc. Then you could deploy and change those parts independently, without causing any downtime in any of the other parts.
You may also develop or change those individualized parts without having to touch or disturb any others. The problem is where and when does integration happen? In the database? Or do we create some application integration layer which will be able to consolidate the parts? The speaker failed to give any clear solutions for bringing about a unification of fragmented part, and when to respond, he said rather cryptically that “it depends”. I think that if the integration is done wrong, it could lead an “old school silo type” of development, which leads to unwanted code — and functionality — duplication. And what about DDD? Do you really want to create many different user objects for different parts of the application?
2. Unleash Your Domain (Greg Young)
The main idea behind this presentation was the following query: what if we put an audit log into the center of the system instead of a normal database? A database could be inserted or included there, but not in the role it usually has. The data base would not be used to store master data anymore; instead it would store snapshot data for reports and other such documents. If we are seeking an absolute state of system, we may then reconstruct it using events which are stored in audit log. This strategy leads us to the situation where we don’t store data anymore; we store behavior. We don’t do deletes or updates anymore, all data is immutable. We get very scalable and fault-tolerant systems, where problem solving is easy; you always know what has happened at certain moments in time. Also you may create different systems for writing and querying data. (Command and Query Separation)
I suggest that you check out this technique on the net. The technique of rethinking the role of the traditional database has been presented several times at different conferences. Your research into the matter may help you to unleash some very refreshing ideas. It happened that way for me.
3. The Curious Clojureist (Neal Ford, ThoughtWorks, Inc)
I’ve only written very little about Clojure code, so I wanted to go back to it and check out what it could do for me. This talk was also targeted at programmers who are novice clojureists. The speaker not only gave a good picture of the language itself, but also about the basic principles of the programming paradigm. The talk also demonstrated how differently you do things functionally using Clojure versus Java, using the imperative or object-oriented style.
I found an illuminating description of the distinction between imperative programming and functional programming in Wikipedia: “in computer science, imperative programming is a programming paradigm that describes computation in terms of statements that change a program state,” whereas “functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data”. (Wikipedia)
4. The road to REST (Rickard Öberg, Neo Technology)
This presentation was basically about how to implement good REST service. The speaker first brought up the subject of the Richardson Maturity model (article). If you don’t want to follow that link, here is short description of it:
“A model (developed by Leonard Richardson) that breaks down the principal elements of a REST approach into three steps. These introduce resources, http verbs, and hypermedia controls.” [Martin Fowler]
Then, the speaker instructed the attendees on how to implement a model level 3 REST API. He advised that we have to concentrate on implementing use cases via REST services, and not exposing domain or pure data. Technically, the speaker recommended Restlet, a framework for tinkering with REST stuff.
1. Functional Thinking (Neal Ford, ThoughtWorks, Inc)
This presentation was one of the ones I had looked forward to the most. I really like the way Neal Ford speaks and, lately, I have been very interested in functional programming concepts and how to use them with “non-functional” languages.
Actually, one of the main points of the talk was that functional programming is not language-dependent; it’s rather more of a way to think.
The presentation offered some really cool examples of how to implement some common problems with common languages when using the functional programming style. Those problems were solved by using some functional languages, such as Groovy and Clojure. Here are some of the ideas I captured during the session & entered into my notebook:
- In Java, you need nouns to carry verbs. (UndoManager.execute() vs. undo())
- No shared state, nothing to hide.
- If you use recursion, you don’t have to worry about state; JVM handles it.
And I almost forgot: there are a couple of libraries which make Java even “more functional”: Functional Java and lambdaj.
2. SQL, NoSQL, NewSQL? What’s a developer to do? (Chris Richardson)
One of the main points of this session was that you should use the right tool for the right job. There are some limitations in relational databases for some use cases. Here are some quotes:
- Polyglot persistence architecture; you may use multiple databases in the same application for logging, business data, etc.;
- Choose carefully;
- Encapsulate data access code so changing database is easier later on, if need be.
3. “git push” Java & Play! Apps to the Cloud (James Ward, Heroku)
This presentation was actually a live demo on how to implement and run applications on Heroku service. The presenter used Spring or roo and Play! frameworks to implement the applications. I have to say that Heroku, combined with Play! seems to be a very rapid and usable platform for web application development. All developers should check it out! There are over 1,000,000 applications running on Heroku and it’s still growing.
4. Is Object-Oriented Programming in Java Possible? (Kevlin Henney, Curbralan)
This session was a good one, but, if I’m somehow going to comment on it, I’m going to have to watch it again. And I will.
5. Regex Applied – When Regex is a Winner (Staffan Nöteberg, Rekursiv AB)
I’ve got nothing to say about this presentation; in a word, it was bad. Yes, there were some good ideas about regex and when to use it and when not to. But, in the main room? No way. I’m pretty sure that the speaker didn’t have or didn’t take enough time to build up/work on his speech. But, the worst thing was, after giving such a talk, the guy then turns around and advertises his regex training. At the end of the session. If I had been in his shoes, I would certainly not have called attention to my training. The session most assuredly did n’t put his teaching skills in a good light.
6. We visualized, we saw, we changed (Leonard Axelsson, Mojang)
Cool information about how to use the Graphite tool for visualizing application behavior and how this strategy/technique helps you develop things. This session was a half hour one, or a “coffee session”.
7. Cool Code (Kevlin Henney, Curbralan)
The Keynote speech. In my opinion, last year’s keynote speech — Neal Ford’s “Abstraction Distraction” — was better in a number of ways than this year’s keynote speech — which isn’t saying that this year’s keynote wasn’t any good. Or rather, it wasn’t bad. Where Neal’s presentation was informative and entertaining however, this year’s keynote was mainly just entertaining. We were shown some amusing and exceptional unusual code and applications accompanied by some funny stories about them. The keynote this year was a nice ending for a nice conference, but nothing out of the ordinary, nothing that exceeded my expectations.
Overall, the conference was a good way to spend some time better than being at work. I attended last year, too, and enjoyed it more; but maybe the reason was that it was my first time. Now I knew what to expect and maybe I expected too much.
I’m not usually envious of people and I’m especially not envious of Swedish people; but this conference does give me some reason to be envious. Year after year, those guys are able to draw some really good speakers. There are lots of happy developers over there in Sweden, I think.
Maybe someday, this conference could be held in Finland? Reactor Dev Day was a good start and now the Scandinavian Agile Conference is coming up next month. Let’s see, maybe things will start to take shape in Finland, too. I mean, at last, we’ve got our own JUG in Finland. Right? Maybe that says something?