As I’ve mentioned in the previous episode, I was attending a conference. Geecon 2017 took place between 17th to 19th May in Kraków. There were four tracks without explicit categorization, roughly 80 talks and 1200 people. The focus was mostly on Java with a pinch of soft topics, agile and similar stuff. It was the ninth edition, which took place at cinema complex about 5 kilometers from the city center.
I’m a car person. Apparently, I have a train curse. Whenever I take a train, it is either significantly delayed, or breaks down in the middle of nowhere (hi Pyrkon 2013…). I was a bit hesitant to test the curse, and it still works to full extent, but more on that later. Let’s get down to business and review what I was able to grab from the event.
On day one, I’ve attended seven and a quarter of talks. A quarter, because one was so weak, that I’ve left after 15 minutes and started to wander mindlessly in the sea of conference sponsors. Let’s skip that one and see what good was out there. This will be a content-dense ride.
David Moore: Wrestling the Monolith
“Software is not done until last user is dead” – was the takeaway I liked the most in the keynote from seasoned software guy from Sabre. Systems aging and rotting is inevitable. Technology is easy while people are hard. Product will naturally align with organization’s structure. Beware of grandiosity in design, aim for local optimization and bounded context. Doubt is no pleasant condition, but certainty is absurd. Ideal processes produce no artifacts. Have a vision, define notion of what’s good, allow ambiguity, evolve and iterate. Slice cheese, not time. Distribute teams, not work. Know your domain, draw boundaries, follow 80 20 rule. Avoid god pods and moon shots. 100% efficiency is a myth, if you try to force it you will get mindless zombies.
Tomer Gabel: How Shit Works: the CPU
The talk started with a riddle – how much faster is checking if number is positive in unsorted and sorted array. It turns out that there is an order of magnitude difference due to perfect branch prediction situation for the CPU. I felt somehow nostalgic time travel to Compute Architecture classes at the university. There was nothing new to me, but the talk was very well delivered. There were various CPU blocks, instruction phases, pipelining, bus control, execution units, importance of cache line size, branch prediction, memory access patterns and more. Important lesson is that if you want to rotate a cat 90 degrees, you should first cut it in appropriate rectangular pieces, not too big and not too small.
Simon Ritter: 55 New Features in Java 9
Oh boy, that was many features. More than one per minute in fact. As usual for such talks, Jigsaw – the module system was in front row. Current situation is unclear, several companies from Java decision-making circle vetoed it’s introduction in upcoming Java version and we need to wait another month to see how it ends up. There was encapsulation of private APIs, Jlink, factory methods for collections, stream enhancements, multi-release jars, Jshell, concurrency updates, deprecation enhancements, project Coin fallout, new garbage collection, string performance improvements, better cryptography support, process API updates, incubator modules and many more. Trivia: single underscore will no longer be a valid identifier in Java 9. They have plans for it.
Matthew Brylka: How Scrum Moved Away From Developers
One of the soft talks I went to. The author elaborated on how Scrum was awesome to developers some years ago, but now it’s just meh. There was lack of focus on technical excellence, difficulty at executing Scrum well, divided community. Velocity is used by business to chase down developers. It seems that Scrum is like democracy – it’s not good, but still the best we got. However, what was a bit off was that Matthew, during much of the talk, relied on parallel of Scrum framework to software frameworks to analyze different various aspects. To me it’s apples and oranges. Not really convinced.
Wojciech Seliga: Developer Plantation, Colonialism of XXI century
Poland was called a granary of Europe in medieval times. Now, when ability to code became commodity, as literacy in XX century, it provides new resources: software developers. We are striving for excellence in technology and tools, but that’s the outermost circle of product creation. The most important question is why, then what and then how. That requires moving from software engineering to product engineering, acquiring new set of skills, a complete package from end to end. We need to get out of comfort zones of our secure job, or we might be rendered obsolete in the future. We like to think of ourselves as artists, but artist don’t really care about their audience, their customers and short feedback loops.
Monica Beckwith: Java Performance Engineering Survival Guide
First, we need to answer a question what makes our users unhappy. Understand quality of service, define measurable metrics and state the goal. We can focus on various things: throughput, latency, capacity, footprint or CPU utilization. There are top downs and bottom ups approaches concerning technology stack traversal. In both there is monitoring, profiling, analyzing and finally tuning. Monica talked about acceptable thresholds, percentiles, memory bandwidths, load balancing, class loading, JIT, inflated thread locking, cache efficiency, hotspots and garbage collection internals and presented a quick hand on with Oracle developer studio performance tool.
After the talks we went for a couple of beers on the unofficial after party in the Dolnych Młynów area. Quite a few nice pubs there and the place is really easy to miss when walking around Kraków. Enough for today, we will continue with day two in the next episode, there is a lot of material to cover. Stay tuned.