In our May’s special Java Daily edition we would like to introduce you to Tomasz Nurkiewicz. He was kind enough to share his experience on 6 Java related questions.
Tomasz spent half of his life on programming, for the last decade professionally in Java Land. Loves back-end and data visualization and he is passionate about alternative JVM languages. Disappointed with the quality of software written these days (so often by himself!), hates long methods and hidden side effects. Interested in charting, data analysis and reactive programming. Believes that computers were invented so that developers can automate boring and repetitive tasks. Also their own.
On a daily basis works in e-commerce sector. Involved in open-source, DZone’s Most Valuable Blogger, used to be very active on StackOverflow. Author, trainer, conference speaker, technical reviewer, runner. Claims that code not tested automatically is not a feature but just a rumour. Wrote a book on RxJava for O’Reilly.
Java Daily: What is more important: an optimal algorithm or code that is easier to read?
Tomasz Nurkiewicz: The famous quote by Donald Knuth about premature optimization (“…is the root of all evil”) is often misquoted and misunderstood. I prefer the one by Martin Fowler: “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” In the end, neither readability nor performance is a goal on its own. If the performance is acceptable from the cost perspective, optimizing it further is probably wasting time. Moreover, what Martin Thompson often emphasizes, simple code is very likely to be faster as well. For example, Java Virtual Machine will be capable of more aggressive inlining. Also, CPUs prefer static and predictable code vs. virtual and dynamic.
Therefore, starting from simple, elegant code and performance may follow naturally. Just remember to use proper data structures and understand their performance characteristics (like linear traversal of ArrayList vs. constant-time lookup in HashMap).
Java Daily: What are the next industries that will be disrupted by new technologies?
Tomasz Nurkiewicz: I truly hope future cities will greatly benefit from autonomous vehicles. I envision cities without parking lots, where you don’t own a car, but rent it for a few minutes every single day. You wake up, order an autonomous pickup, share a ride with a few other people, get out next to your office and forget about searching for a parking lot.
Shared, automated rides mean less traffic, pollution and time wasted during the morning commute. Moreover, self-driving cars proved to be not only much safer but also to reduce traffic jams and drive more predictably. Self-driving fleet of cars could take people to work in an optimal way and then park outside the city centre, just to return back right before 5 PM.
Java Daily: Could you share an example of someone you consider successful and why?
Tomasz Nurkiewicz: I admire Venkat Subramaniam, agile developer, conference speaker and an author. Despite being immensely popular and recognizable, he stays humble and honest. He works really hard, I remember conferences when he had a talk during every single slot, from morning to the afternoon. Yet, he finds time to write dozens of books, write blog posts and speak at local Java User Group meetups. He always delivers a perfect mix of knowledge and show.
Java Daily: What features would you add to Java if you had the chance?
Tomasz Nurkiewicz: Simple syntax for immutable value objects like in Kotlin (data class) or Scala (case class). Immutable objects for even the smallest pieces of data (e.g. wrapping just a single primitive value, like Money, FirstName, UserId) greatly improve readability and correctness. Sadly, this requires a lot of ceremonies: for just one field I need a constructor, getter, hashCode and equals, toString, etc. Therefore developers either keep using String everywhere or have to enable tools like Lombok.
Many hate Lombok, but I use it primarily to create simple value classes and bigger objects consisting of them. Having sweet simple syntax for value objects together with JEP 169 (allocation-free value objects) would serve great for both readability and performance.
Java Daily: Do you expect Java to add more feature to support AI development?
Tomasz Nurkiewicz: No. Python is great for AI-related development not because it’s syntax is so great (although it’s pleasant). Python essentially won on this market due to marvellous libraries like scikit-learn or Keras. Java is wonderful on the server side, you can technically use it for artificial intelligence, but I don’t see much point. Following the best tool for the job, Java is not a language for artificial intelligence but it’s strong in other areas.
Java Daily: What is the most efficient software development process?
Tomasz Nurkiewicz: I overheard that “scrum is the homoeopathy of software development”. If you believe it works for you, most likely you will achieve great success. But in some organizations, strict scrum ceremonies are more important than delivering valuable software. In that case, agile may not work for you. Historically waterfall failed to deliver useful software as it was always obsolete by the time it was given to the users. Agile promises fast feedback cycles and quick turnarounds, which is great. Following the original Manifesto for Agile Software Development is so far the most effective way of making software, in my humble opinion.
Is there anything else you would like to ask Tomasz Nurkiewicz? What is your opinion on the questions asked? Who would you like to see featured next? Let’s give back to the Java community together!