Over a million developers have joined DZone.

Dev of the Week: Michael Hunger

DZone's Guide to

Dev of the Week: Michael Hunger

· Java Zone
Free Resource

Try Okta to add social login, MFA, and OpenID Connect support to your Java app in minutes. Create a free developer account today and never build auth again.

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 Michael Hunger, Neo4j expert and avid contributor to our NoSQL Zone. He's also the author of our upcoming Refcard on Querying Graphs with Neo4j, which will release on November 3rd. Some of his most recent posts on DZone include:

1. What have you been working on lately?

I’m mostly working in the Neo4j ecosystem, which spans everything from full-stack applications, via integration tools, to visualization libraries and drivers for the different languages. As I love coding I also work a lot on tools and demos myself. Most of them are not big or impressive but very helpful for people that want to import, visualize or otherwise work with graph data. You can find all my projects on my GitHub page: http://github.com/jexp

The project I’m most proud of, supports a new way of creating interactive use-case presentations. We dubbed them "Graph-Gists" as, like GitHub-Gists, those are quickly set up and encourage sharing and collaboration. The approach is interesting both from the technical side, but even more from it’s use-cases.

Graph-Gists are an easy way of turning a simple AsciiDoc-file into a live rendered and interactive presentation in the browser. The files contain headlines, prose, and pictures to describe the data model and use-cases, and code-blocks with Neo4j-Cypher queries for data-setup and use-case execution. We have more than 140 different examples from many domains and use-cases contributed by our community, collected at http://gist.neo4j.org.

Those text-files are rendered inside your browser by using AsciiDoctor.js, which was translated from the Ruby AsciiDoctor library using Opal.js. So while rendering the page, the Cypher queries are run against an in-memory Neo4j backend for the set-up and the use-case statements and the results are rendered live in jquery-datatables and d3.js-graph-visualizations. Tied together by JavaScript, we combined a really powerful set of libraries to make interactive literate programming a reality, not just for developers but also domain experts and consultants.

Besides coding, I write a lot of articles for print and online publications, blog posts, book reviews and books. My last book was about Neo4j 2.0 (in German) and the last editorial piece the DZone Refcard for Neo4j. (todo link?)

I also spent the last weeks creating new content for the developer section of the new Neo4j.com website. That content is also AsciiDoc-based and lives in a GitHub repository for easy versioning, community contributions and issue tracking. It is rendered with custom HTML backends and published to the WordPress site via a commit hook. I think this approach is a really neat way of combining the necessary "evil" with a sound editing and publishing process.

An article topic that I found really interesting to work on, was my coverage of Truffle and Graal, the JVM power-team for dynamic compilation based on AST-interpreter specifications written in Java. I dearly hope for official Graal support in the JVM as soon as possible, that would open up an amazing range of things to do.

2. You seem to identify mostly as a Neo4j/NoSQL developer. What are some of the most enjoyable and least enjoyable things about coding for Neo4j/NoSQL Where do you see Neo4j/NoSQL development going in 2015?

The least enjoyable is the name - it is really bad to describe a category by negating a query language. I like "polyglot persistence" much more, which implies that there are different tools for different data-models and use-cases and you combine them in your application. Suddenly developers have and take more responsibility again in making this choice, which is great. That also means to make conscious decisions based on information they have to acquire about the different databases and their capabilities.

Same issue with naming in Neo4j, the "4j" suffix still communicates "for Java only" which is certainly not true, as we have a huge community in Python, Ruby, JavaScript, .Net and other languages using Neo4j as a server via its HTTP APIs and drivers.

Something I don’t like about NoSQL is the focus on scale only. Data is not only getting bigger but also more complex, so it would be nice to have a more differentiated view on how to handle interesting domain data.

The most enjoyable bit about both is the developer community. So many people eager to learn something new, taking the NoSQL databases to their limits and challenging vendors. It’s a great time to be part of that greater community.

What I love foremost about Graph Databases, is the graph as a data model, it is so natural and convenient, to store your real world data in the same structure that you’d draw on a whiteboard. So I see little mismatch between the idea in my head, the drawing on the whiteboard, the graph query, the data in the database and finally the graph visualization. All contain the same simple but powerful concepts, connecting entities with relationships which you can navigate quickly to find your answers.

And very enjoyable about Neo4j is its query language Cypher, which is truly powerful and readable at the same time. It combines the best of other query languages and also comes with a rich set of primitives from functional languages. So you can do much more as part of your database query and save a lot of the roundtrips between server and client. And I’m excited about the new query planner that our team works on, which looks very promising.

For 2015 - I think we’ll see two things. First more adoption for the different data-models and databases: key-value, document and graph. And secondly more concentration on the top, i.e. fewer top-players because of acquisitions, mergers and some shutdowns but probably more variety and choice at the emerging levels. Something else that I hope to see more is a further integration of machine- and deep learning and NLP with NoSQL databases.

3. Are there any particular developer tools or resources you couldn’t live without?

My favorite IDE, which is IntelliJ IDEA and its companion IDEs for other languages. JetBrains understands it like no other company to build intuitive, powerful developer tools that sometimes feel a bit creepy because they already know what you want to do next before you actually state it. I encountered "IntellJ Renamer" in 2000 for the first time when writing a thesis about Refactoring and have used the IDE daily since 2002.

Heroku as a PaaS which allows you to spin up new applications in any language in seconds, connecting them to a number of powerful add-on services quickly to provide a well performing, always available application.

GitHub is also everywhere in my developer life. Not just repositories, wikis and issue tracking but also github-pages and gists make it omnipresent.

AsciiDoctor is my tool for writing. The AsciiDoc format can be easily versioned, diffed and rendered in a variety of ways. AsciiDoctor allows you to programmatically access the documents and use the its content for literate programming. And you can include real code snippets from running code into AsciiDoc-documents, which makes it perfect for documentation.

And each operating system with a real unix shell which brings all the powerful unix-commands to your fingertips. Allowing you do do text manipulation, coding, versioning, diffing and large volume processing by just combining simple tools.

4. Do you have a favorite open source project (or projects) that you’ve contributed to recently?

There is Neo4j itself of course, but also other projects in the community.

Like jQAssistant a open-source software analytics tool that uses Neo4j as datastore. It allows you in a much more flexible way to import your code- and project structures into Neo4j. Then you enrich the data with additional technical or domain concepts, and can freely query the graph for metrics or architectural rule violations automatically as part of your build process. Beside the initial ideas, I recently contributed an extension that allows you to define concepts and constraints as AsciiDoc documents instead of XML files.

Another one is GraphGen, a easy-to-use graph-generator that grew from the idea to a full-fledged data generator with visualization and import/export options within a few weeks. I mostly contributed ideas and feedback to Christophe, the author.

I’m also contributing a lot to the Spring Data Neo4j project and some to Spring Data in general. Being the project lead, that’s not surprising though :)

If there was only more time than 20 hours in a day, there are so many more interesting projects to look into. Actually I very much like Andrés Almiray’s idea of a "hackergarden" which brings some people together for a day or night to work and contribute to one or few open-source projects.

5. Do you follow any blogs or Twitter feeds that you would recommend to developers?

Good question, there is too much that happens every day anyway. As InfoQ editor and DZone MVB I follow the things that happen there. The O’Reilly programmer content is also a great read. I also follow a number of developers on twitter.

Otherwise I learn a lot of interesting things during conferences. Not just during the talks but mostly in the hallway conversations.

And being part of an awesome developer team at Neo4j surprises me every day in terms of widespread ideas and knowledge.

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?

I started my life as a programmer at ten, working on a kids computer in Eastern Germany which could be programmed only with Basic and plain Machine code (i.e. no assembler but plain bytes). So I did both :) That was a fun time, where I learned that there are no limits in software development, you can create all the things you imagine.

After that insight all that was needed was self study. Whenever I needed something I went and learned it. For me a day without learning something new, is a lost day. A book I found a very valuable reflection for live-long learning is "Apprenticeship Patterns" by Dave and Ade, which is a real eye-opener.

And of course during my university years - playing and programming in a text-based online adventure game (MUD Morgengrauen - in German) had the lasting effect of wanting to live in text based shells my whole life - and also meeting my awesome wife there :)

7. Is there anything else you’d like to mention?

I love open-source-developer communities, they are a great place, where a lot of different people come together to create something that helps others. And people contributing code, docs, help or support are appreciated and valued within the community. We see so much good development in the open, collaborative ways of creating software that I’m grateful and happy to be a part of it.

There are no limits in what you can do, challenge yourself everyday and learn something new. And even better, help someone else to learn, by writing, speaking, teaching. Your friends, colleagues and even more important kids will all benefit from you sharing.

Oh and of course, if you want to handle your connected data in the most awesome way possible, look into graph databases. The graph model is most natural and powerful in how it treats related information, similar but better than your object model. Check it out.

Thanks a lot for the interview,

Cheers, Michael

Thanks so much Michael!

Check out Michael's blog and Twitter!

Querying Graphs with Neo4j

This Refcard includes:

  • Getting started with Neo4j
  • Neo4j in the Cloud
  • Neo4j query language
  • Performance tips


Build and launch faster with Okta’s user management API. Register today for the free forever developer edition!


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}