As mentioned in episode 82, I was recently invited to attend JDD conference in Kraków, and make a little bit of noise on social media and my blog alongside. We had pre-noise, it’s time to transition to post-noise otherwise known as the conference report.
Quick facts: Kraków Expo building, two days, four concurrent tracks, around a thousand people from Java world, marvelous after-party and overall lots of fun. The weather kinda sucked, but what can you do. Upon arriving, the girl at the reception ringed me with a black bracelet and gave me a quick briefing for speakers. Actually, I was there to write, not to speak, so let’s get to the first important part: the talks.
Tomasz Kleszczyński: Kotlin for Java developers
I haven’t seen Kotlin before, so I’ve decided it’s time to take a look at the offspring of IntelliJ IDEA’s creators. Especially, since it’s now one of official languages for Android, as well as one of languages supported by Spring 5. Tomek went through a list of Kotlin features with respect to Java, the list was long. Classes have public scope by default. There is no new operator. There are extension functions and properties, data classes, string templates, the Elvis operator, safe casting and smart casting, operator overloading, default and named parameters. Underscore instead of unused parameter, improved lambdas. “If” and “when” are expressions, not statements. There are no primitives. Finally, you can mix and match Kotlin and Java code easily. Sir, you have my attention!
Jarek Ratajski: On annotations – time to stop the demons
Let’s start with the basics, or rather the Basic. In the times of Commodore 64 coding was difficult and we had to jump between lines of spaghetti code and global variables to understand what’s going on. Much later, we invented magic – annotations. We can now ditch the “new” operator and manual threads handling. What about silently adding numerous auto wired dependencies to our class? Use constructor injection – even the junior developer will stop for a moment to think when adding twelfth argument to the constructor. Use Java Slang instead of Guava. Use Clock object in unit tests dealing with time. Don’t assert if methods were invoked in an object and don’t test mocks, Mockito is tested well enough already. RatPack is damn fast http server, @NotNull is evil as well as application servers. JPA sometimes looks like medieval decree. Magic is dangerous, so trust the compiler and IDE first as much as possible, says the guy in a robe and with long beard.
Tomasz Borek: 9 lives of Java 9
I’m a bit sentimental, so I like History. Actually, one year ago, I’ve written an article on Java history, but here I was curious to hear about reasons behind some changes or lack of changes. Tomasz started with project Green dedicated as a platform to support early smart tv software. Not exactly a success, it was renamed to project Oak and used to implement a Netrunner browser. Then the name Java appeared. We went quickly through major changes in consecutive versions. Software development paradigms shifted a lot with the raise of Big Data, Internet of Things and especially the Cloud, and Java will try to keep with introduction of faster major release cycles. One of interesting future ideas is to share heap space with code written in different language. Despite being plagued by technical problems, the talk was very well delivered and pleasant to hear.
Michał Gruca: Developer’s career: I became senior, what now?
Time for something less technical. IT job market is evolving, titles are changing and it’s a good idea to stop for a moment and plan our career. We can pursue specialization and become an expert in one technology, which gives good money but might be risky. We can go vertically in an organization hierarchy but it usually means leaving the code. We can go horizontally and broaden our skill-set, but it may trap us in eternal middle position. Developer and programmer are different things, as well as architect, leader and manager. There are many types of architects and managers too. In addition, there are many types of companies, and working in body leasing or product company is much different than in a software house, and makes some career choices easier and other harder. Great talk, backed up by lots of experience.
Krzysztof Benedyczak: Safe REST – authorization
Shifting to cloud comes with stateless applications, and statelessness adds new challenges to security and performance. Securing browser communication is more difficult than simple machine to machine traffic. Krzysztof discussed various techniques and compared their advantages and disadvantages. We can use basic HTTP over SSL, HTTP sessions, and store tokens instead of passwords or delegate the process to standalone OAuth server. Existing and non-existing users check should take the same time. Sensitive data should not be kept in client side code. Cookies should be HTTP-only. CORS and custom headers help protecting against CSRF and XSS attacks. Good passwords database is tricky, as well as hosting in multiple data centers. Using off the shelf cryptography and authentication is better than homemade solutions. Be careful what you click and stay safe!
Grzegorz Lewandowski: Effective Code Reviews
Only 50% of developers uses code reviews in their job, which is kinda scary to hear. Good code reviews are indispensable, they help sharing knowledge about the project, especially for new team members. It prevents many bugs, improve quality and may act as form of documentation on why something is done in a particular way. In order for it to be effective however, we need to remember few rules. It’s good to have more than one person reviewing the same code. Review can’t be too big or it will be sloppy. The author should provide necessary context and explain the reason behind the change. Ask questions, vocalize dislikes and stay positive. Finally, just as with code, we may perform review kata to get good at it.
Mariusz Strzelecki: Apache Spark – how to squeeze more from JVM
For some unclear reason I thought that, it will be an introduction to Spark, so as I’m not familiar with it, I was a bit confused at the beginning. Later though, when the talk went down to optimizing size of objects on the heap, I felt it’s my territory again. Spark becomes more popular and pushes out Hadoop from Big Data realm. Mariusz explained how to lighten Strings representation and use various unsafe mechanisms to squeeze more and more actual data into the memory. We know, that dedicated code runs much faster than generic yet flexible. Why not take what’s best out of both and generate dedicated code on the fly from Spark queries? We have specialized byte to byte maps, cache-aware computation and advanced heap management at our disposal to push JVM beyond what we thought are it’s limits.
Grzegorz Gajos: Programmer day in 10 years
I’m a big fan of futurology, although it’s a difficult topic and we saw plenty of prediction that were outstandingly wrong. Grzegorz started with development process for a single programmer and expanded adding plenty typical elements of pipeline like branches, merges, reviews, QA, stages, local environment setup etc. Then he started to remove those elements again until almost pure coding left. We have docs in the cloud, why not IDE in the cloud? Cognitive code complexity checks are better than cyclomatic ones. CSS snapshots help detect front-end errors, tedious repetitive QA processes can be supported with machine learning. How about static detection of potential performance problems, without even running the code and deploy on production on the fly, while writing the code? Should we be worried about jobs in the future?
Traditionally evening before the last day of conference is reserved for official after-party. This time the event happened in Stara Zajezdnia in Kazimierz district. As a speaker (or rather writer) I was first invited to join organizers for the supper which was delicious. Then we merged with the rest of the conference attendants. Lots of beer and vodka was consumed that evening. One notable thing was the coding competition. There was a real boxing rings with a bunch of computers inside and everyone interested could compete in solving algorithmic problems via Codility. There was even a ring girl properly announcing consecutive rounds with banners, along with the ceremony host.
In the next episode, we will explore the second day of the conference. Stay tuned!