Every week here and in our newsletter, we feature a new developer/blogger from the DZone community to catch up and find out what he or she is working on now and what's coming next. This week we're talking to Jakub Holý, solution engineer at Iterate AS in Oslo, Norway. Some of his most recent DZone posts include:
- Clojure: How To Prevent "Expected Map, Got Vector" And Similar Errors
- Frustration-Driven Development – Towards DevOps, Lean, Clojure
- The Risks Of Big-Bang Deployments And Techniques For Step-wise Deployment
1. What have you been working on lately?
I have recently become a full-stack Clojure and ClojureScript developer after years of Java, which has been a really joyful and refreshing experience. Webapps are a lot about collecting and transforming data (for presentation) and this is a strong point of functional programming in general and Clojure in particular, as well as concurrency and sane state management. The time I have used to spend in Java on mindless writing of boilerplate code I now spend thinking about what functions to use and how to combine them to get an elegant solution communicating the intent well. And I love the interactive, REPL-based development that allows me to change and experiment with code in a running application, whether backend or frontend. No more waiting to compile, redeploy and re-create the app state my new code needs! There are still some rough edges, the tooling could be better (I've been using primarily LightTable and IntelliJ+Cursive), and I still have plenty to learn, but I would never voluntarily go back to the traditional enterprise Java world with its complex frameworks and heavy-weight app servers and development processes.
2. As a Java EE developer interested in optimal development and deployment practices, do you have any thoughts (for developers or management) on how best to streamline the development process?
You should not have asked me this :-). But you are actually lucky, I don't need to speak so long since I have captured a lot of my thoughts on this in my recent popular blog post, Frustration-Driven Development – Towards DevOps, Lean, Clojure. I would like to add to it that there are two aspects:
1. Efficiency - eliminating frustrating wastes of time in development and shortening the feedback loop from idea to code to code deployed in production with its value verified (or not) by users. You need processes, culture, and tools that support small, incremental changes flowing quickly through the process. Prefer libraries and frameworks designed for testability and change, exert effort to produce simple software, avoid complex things such as JavaServer Faces. You will find lots of good advice in the Continuous Delivery book by Humble and Farley. Let yourself be guided by trying to make One-Piece Continuous Flow possible.
2. Effectivity - so much energy and talent is wasted doing the wrong thing - features nobody needs, products doomed to fail. Kent Beck has taught me the power of focus. We are always trying to do too much - instead, we should focus, do less but do things that really matter. Not things you *believe* are important but those you have *proven* with hard data to matter. This applies to us developers but even more so to our companies. That is effectivity. Study and embrace the Lean Startup thinking (whether you are startup or not), create Minimal Viable Products, monitor your users to be able to make data-based decisions. To go beyond a single product, we also need to grow organizations that enable people to thrive and realize their full potential - Lean thinking with its people-centric approach, Rightshifting, and Dr. W. E. Deming have a lot to say here.
3. Are there any particular developer tools or resources you couldn't live without?
Friends - they help me with tough problems, inspire me, broaden my horizons. And, by extension, meetups - go and join one! A quiet contemplation with a cup of good tea, where the deepest thoughts emerge. Time off keyboard.
4. Do you have a favorite open source project (or projects) that you've contributed to recently?
I've contributed recently to a couple of Clojure(Script) libraries such as Kioo and clojurescript.test and the language itself, mostly in the domain of documentation. I find it highly rewarding, and a part of the fun of working with Clojure, that I can help other people avoid the pains and traps I encounter and the response from the community is always very positive. It is great to improve something you know many people will use and appreciate. I have had also few small projects of my own, such as the latest Chrome plugin Testofill for filling forms, which grew out of my frustration of doing it repeatedly on my previous, Java EE project. But these are usually used by very few people so improving the Clojure land is more fun.
5. Do you follow any blogs or Twitter feeds that you would recommend to developers?
Twitter is my main source of tech news and ideas, primarily @DZone. There is a lot of great ideas flowing through @flowchainsensei if you care about work and oganizations that actually work and better management, organizations, and teams - highly recommended. Finally, my days would not be what they are without @BunnyBuddhism.
6. Did you have a coding first love -- a particular program, gadget, game, or language that set you on the path to life as a developer?
Not really. Though my first program at the university proved that IT was the right path for me. I spent a week of fun learning and programming Pascal to create a general simple circuit solver to avoid four hours of boring manual computations. Later I have even added a nice startup animation (goldplating in its best).
7. Is there anything else you'd like to mention?
I would like to recommend the best two books I have read in 2014, The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win - a great demonstration of Lean thinking in practice and a good novel that you won't be able to put down until finished - and Thinking, Fast and Slow, which contains so many treasures and groundbreaking revelations about our thinking and decision making that I even cannot start naming them here, it should be carved in gold and put in every parliament and every decision-maker (i.e. everybody) should memorize it.
As parting words, I would like to urge my fellow developers to think big. Computers give us lots of power, let's try to use it for solving real problems, for helping the "third world" and our communities. Use the power for good!