Dev of the Week: Duncan Brown
Thanks for talking to us! What have you been working on lately?
Working and running a small IT consulting firm means I wear a lot of different hats (sadly, not the "foam dome" type that holds beer cans). The recent past has seen me traveling a fair bit to New York City to help drive a major project of one of our larger clients that's on a very aggressive timeline. I've also been overseeing and managing a fair number of other projects. One that I'm particularly proud of is actually a consulting gig for a local company that I originally talked to a few months ago about -- wait for it -- utilizing graph databases for their business and their product. So I've been educating and advising the client on how best to integrate graph databases with their current domain model and how to really unleash its power in their software. It's really rewarding to see the client's team's faces light up when everything starts to click and they start to see the possibilities of what it can do for them.
Your blog is called "The Mad Grapher" and you blog a lot about NoSQL and graph-based databases. What interests you about graph-based databases?
My fascination with graph-based databases started before I even knew they existed. While working on my math degree, one of the many fields I was exposed to was graph theory. From there, courses in databases and AI led me to think, "Wow, wouldn't it be cool if we could model neural nets and other, highly-connected data structures in an intuitive, useful fashion?" I remember writing some demo code to test it out using relationship concepts (since that was canon for any and all database theory we were taught), and while it "worked", it certainly wasn't as efficient or intuitive (from a domain model perspective) as I'd hoped. Fast forward a number of years (let's not count the exact number) when I first got wind of the whole NoSQL paradigm (which is friggin' cool in and of itself). Graph databases were right at the forefront of the movement, and when I started digging into it, I saw that graph databases were actually a viable, increasingly mature solution to what I had dreamed of years earlier. The idea that I don't have to write/optimize path-finding or learning algorithms (unless I really wanted to) was amazing; the fact that these scalable, robust tools were now available for general consumption amazed me. No more did I have to worry about running out of memory or waiting minutes to run such routines. Have a complete graph with millions of nodes? No problem! Is your graph sparse but still really large? Not an issue. Try writing a recommendation or discovery engine that operates on the same number of nodes with a relational database, and then tell me a graph-based database isn't a Godsend -- never mind a changing and evolving data model. I could go on for an entire book about what interests me about graph-based databases. Hopefully this is (almost) succinct enough to get an idea as to the proverbial tip of the iceberg.
Are there any particular developer tools or resources you couldn't live without?
I'm old school when it comes to development, but it depends on the language and/or environment I'm using. Vi will forever be my editor of choice. Yes, I love a good IDE (Eclipse has made it easy to get your hands on one, especially specialized ones), but, when it comes to the likes of LAMP development -- especially for C/C++, PHP and other languages that traditionally don't have a huge visual element to it -- vi makes me the most productive. When it comes to Microsoft stuff (yes, I do have to do it sometimes), Visual Studio is the only way to go. Firebug/Chrome Debugger for client-side development. Given how many languages and platforms I work with, though, I could likely list a bunch more tools I couldn't "live without" at the time. I'm also a huge fan of JUnit (and other unit testing frameworks) and the whole Hudson/Jenkins movement (TDD and Continuous Integration FTW!). As for resources, well, there's the online ASCII character reference, the online Regular Expression reference, and (as shameless as it sounds) DZone (I've been using it for years). Also, StackOverflow and, in my younger years, Experts Exchange were invaluable online tools. And of course there are the myriad XML navigators and markup validators. I'm lazy, so whatever tools make my job easier in the long run are tops in my books. Oh, also, sed, awk, wc, xargs and grep. How could I possibly forget those?
Do you have a favorite open source project (or projects) that you've contributed to recently?
To be honest, my job hasn't allowed me a lot of time to really contribute back to open source projects. I've spent some time modifying such projects to fit clients' needs (according to the appropriate licenses, of course) and I know I'd have been up a creek without them. There was a point where I was trying to contribute to the Open XCom project (who doesn't love XCom?), but, by the time I was ready to submit something, the issue/feature had already been resolved! Still, Open Source is a crucial component of software (and technology in general).
Do you follow any blogs or Twitter feeds that you would recommend to developers?
I'm notoriously bad about forgetting to follow those blogs/Twitter feeds that I really enjoy since I seem to find great pleasure in typing in the URL and refreshing the page. That said, @peterneubauer and @mesirii from Neo Technologies (at least I think they work there, they're heavy contributors to Neo4j) are worth following, as is @dcolebatch of @xnlogic. @martinfowler is a must-follow, as well. @neo4j is also a must-follow for all you graph database fans.
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 think it might have been LOGO in 1986 when my dad showed it to me on our Commodore 64. "You mean to tell me I can tell that little triangle where to go on the screen and it will draw things? Cool!" Or, it might have been actually getting into something a little more "complicated" like BASIC (especially QBasic). I spent years getting BASIC to do my every whim, poking and peeking, making silly little games, etc. I grew up in a small town and it was to the point where I ended up filling in for the "data processing" teacher in high school when it came to the programming portion of things. Good times (yeah, yeah, I know I'm a nerd). But perhaps what really set me off was the whole computer game phenomenon in the 80s. From my C64 to all the PCs we owned, I was captivated by a lot of games, especially the Sierra adventure games that just floored me (Police Quest and Space Quest, anyone?). The fact that a computer could draw those graphics, play that music, and show such interactive intelligence astounded me. I remember writing a letter to Sierra when I was all of ten years' old asking what it would take to be a person who would make such things, and I actually got a letter back telling me about computer science, languages like C/C++, and the use of math. Well, from then on, I knew what I was going to study and do (although I'll admit I never really made it to the professional game developer status, as life has a way of introducing other things to you, though I do some hobby game programming now and again). But what I did know was that I was going to make software that did cool things, and "cool things" ended up becoming, "things that solve problems". There is nothing as rewarding as solving a problem, no matter how big or how small.
Anything else you'd like to mention?
Firstly, thank you very kindly to DZone for publishing my stuff and involving me in the community so much. My job takes up most of my waking hours, but DZone has given me the chance to give back a bit to the community, however much or little it may be. Secondly, a shout-out to a colleague, mentor, and good friend of mine, Martin Haynes: He's the one that suggested I start a blog in the first place. Thirdly, maybe some (hopefully not-so-trite) advice: Coding is cool -- there's no doubt about that. Just don't be so stubborn as to lock yourself into one or two specific languages or technologies. Seemingly opposing viewpoints can be helpful and constructive. I know it took me a bit to start to get the whole NoSQL concept, but it opened my eyes to a much larger world, and let me reach beyond just "coding". Understanding development methodologies and other more "academic" concepts can go a long, long way to making you a better developer or engineer (design patterns, anyone?). Oh, and don't neglect your math skills, even after you don't think you need them! They'll keep your problem solving skills sharp and keep your thinking skills agile (no pun intended).