Archive

Archive for July, 2009

Interview with a Rock Star – Scott Hickey

July 28th, 2009

Scott HickeyThis Interview with a Rock Star is with Scott Hickey (@jshickey), A Senior Consultant with Object Partners, Inc.. Scott has been developing software for over 20 years and working with Java since 1998. He was the lead developer for the Groovy Eclipse Plugin and has authored several Groovy related articles. He is a frequent speaker at the Omaha Java User Group and the Omaha Dynamic Languages User Group.

1. If you could only read 3 blogs/rss feeds, which ones would you choose?

Groovy.blogs() – I have to keep up to speed on what’s going on in the Groovy world. There’s so much innovation happening in the Groovy community.

Planet Scheme – It forces me to look outside of the Java world. There are really interesting things happening that aren’t related to Java and .NET.

IBM Developerworks – Every month, there’s almost always something interesting being posted on this site and the articles and tutorials usually have some meat to them.

2. What’s the best advice you’ve been given or would like to give to junior developers?

Spend time on things that have intrinsic value for you personally. The world of software development is so varied. I think if a person passionately pursues what they have an interest in, all sorts of great things will come from it. A corollary to this is a person should focus on both breadth and depth in that area of interest. For example, if you have an interest in a dynamic language like Groovy, get involved in the community. Read the the groovy-dev and groovy-user mail lists. Subscribe to some of the blogs but don’t stop there. Take on a JIRA issue that’s related to the core project, a related library or related project. Fixed a bug or adding a small feature will force to take a deep dive into some part the system. Contributing on a open source project is a wonderful experience.

3. What is your personal definition of elegant code?

I love code that reflects the domain of the problem being solved without a lot of noise. I want to be able to see at a glance what the code is doing – ideally without scrolling up and down the page.

4. What common or accepted industry practice do you despise the most and why?

I get upset when I see consultants from the really big/expensive firms come in treat their client’s employees like they are idiots. I have seen this in one form or another nearly my whole career. More often than not, I’ve found customers have some extremely bright developers and business analysts who understand their company’s business quite well. They are usually priceless as resources on projects. As a consultant, I expect that I should bring value to a project. But I also recognize that employees who have been at a company for a long have a wealth of knowledge and experience that will be critical for a project’s success. I get even more upset when I see the arrogance and there isn’t even the expertise the back it up.

5. The Pragmatic Programmer talks about learning a new language every year. Are you learning a new one right now?

There is a kernel of truth in that advice but I don’t think a person should take it at face value. I think there is great value to be had from working with a language and a community that is different from the one you identify with most or have the most experience with.

Even though I’ve worked with lots of different languages, at this point in my career I consider myself a Java progammer. I’ve been earning a living working with Java or the JVM since 1998. I am really fortunate to have spent three years working daily with Groovy. If had only spent one year in the language, I wouldn’t have had a deep appreciate for what makes the language great. I suspect this is true for most languages. For me, moving on and a spending a year learning JRuby or Jython isn’t bad advice, but I wouldn’t say that I would be stretching myself. I think picking something like Lisp, Scheme or Smalltalk is a much better choice. Lisp and Smalltalk have the concept of running images that can be manipulated interactively. Smalltalk and Scheme have built in continuation. Scheme and Lisp and have macros. The languages and runtimes are completely different from what is available on the JVM.

Pick something different, really different, and stretch yourself but absolutely, positively don’t pick something new every year. One year is not enough time to learn and appreciate what makes something completely different valuable. I think one year is only enough time to say “Yeah, I looked at it. Such and such feature was kind of cool but it doesn’t run in Eclipse or have this-and-that library so its mostly a pain to work with.” I think a person should work with something for a few years. Really get to know it and use it for non-trivial things. Get involved in the community – try patching a library if something doesn’t work quite right. I have a lot more respect for someone’s opinion on a language if they’ve actually built something in it.

I am currently learning Lisp and Scheme.

6. What’s the future of software development?

I think we will continue to see changes in software development practices. Some folks I’ve spoken with feel like there hasn’t been much progress in this area over the last 30 years. I disagree. I think Agile is great because it really frees up the constraints on the best developers and allows for maximum productivity from these developers. There are studies that show the best developers can be 10 times as productive as mediocre ones. A methodology that enables maximum productive in the best developers really does make a difference in the success of a project. However, there is still much progress that needs to be made. The challenge is that there is always a wide variety of expertise on software development teams. With the most successful projects I’ve been part of, the environment was such that developers of all skill levels were very productive as well. Managing projects so that we get the most from novices, journeyman and masters is a big challenge – and not all journeyman want to become masters so that’s not the answer.

7. What’s one of the most effective questions for a job interview with a developer?

What technologies are you currently looking at or playing with outside of your current job?

8. Are there any technologies, paradigms, or implementations you avoid and why?

I am really trying to avoid technologies that make it difficult to write automated tests. Since I’ve been able to work on projects where testing was made a priority, I’ve seen how it affects day-to-day quality of life for myself and my project teammates. Having extensive unit and integration tests removes so much of the stress that accompanies software development. For me personally, there’s nothing worse than being at the end of a long project and putting in some last minute feature/bug-fix and not knowing if something else might break. I call it coding with fear and I think its nerve-wracking for anyone who has to do it.

9. What, if anything, is unique about your approach when designing software?

As much as I love innovation, I’m very conservative when picking technologies and frameworks. Each one adds complexity that makes it harder to build a working product. Each library or framework adds a burden to the developer during coding, debugging, building and testing. Thus, there has to be obvious advantages to using something or I just don’t want to use it.

Where I’m different than most is I tend to prefer low-tech solutions over the latest and greatest. I’ve seen people use JAXB and SOAP in places where a property file or a simple queue would work just fine. I’m not afraid to introduce something that might be new or innovative, I just think that a person should spend their “risk” in the place where it will bring the most business value. Things like strategically using Groovy for complicated logic or adding Spring to support testing are good examples from my past where the complexity was worth it. The important thing is make sure you get value from it. I’ve seen developers introduce Groovy or Spring on a project where they got nothing for the effort other than adding the technologies to their resume. That just doesn’t make sense to me. I think we owe our customers more.

10. What’s the difference between a good developer and a great one?

I used to think I knew but now I’m not sure. Recently, I’ve finished re-reading “Mind over Machine” and I really like the distinction that is made between “know how” and “knowing how”. The book focuses on the fallacy in Artificial Intelligence research that experts can explain how they arrive at their expert decisions. I agree with the idea presented in this book that experts don’t necessarily know why they are right about certain decisions. I think the difference between good and great is some combination of passion, intelligence and experience. All three are probably present when someone evolves into an expert at something. I can relate to this in that I have a knack for getting difficult software projects out of development and into production but I’m not sure I can explain why.

I do think a person learns by doing and seeing what other developers do within the context of a particular problem. I’ve found myself giving seemingly contrary advice before. Someone asked recently if a team should tackle the highest risk parts of a project first? I said “No, get a skeleton up and running and build on that so you always have working software.” Well, that advice is good within the context of trying to get a tracer bullet built so a team get some development rhythm going. But, I do think you have to at least understand or prototype the risky stuff first. If you know up front you’re going to have to save a ton a data to a SQL database and you’re thinking about using a new database persistence technology, I think you have to at least prototype how its going to work before you get started. If you don’t have some of that upfront, you could get burned. It all depends on the context of that particular project and a person’s experience with problems and technologies involved.

11. If you could interview a developer who was far more experienced than you, what would you ask him/her?

I would ask that person what event or experience has had the biggest impact on their satisfaction with their career. I would also ask that person if there was anything they could change in their career, what would it be. There isn’t enough time to learn about everything and I do think some languages, technologies, problem areas are richer than others. Some things are treasure troves and others are duds. Its interesting to learn what others with lots of experience have found interesting and why they found it so.

interviews ,

Tuesday night 7.28.09 – Jimmy Winter at the CFUG

July 27th, 2009
Comments Off

Join us Tuesday evening @ 6:00 pm at the Nebraska ColdFusion Users Group. Jimmy Winter will be talking about running ColdFusion in the cloud.

What: Jimmy Winter demos his BlueDragon ColdFusion site running on Amazon EC2
When: Tuesday July 28th, 6:00pm
Where: CF WebTools, 11204 Davenport st map

Pizza and pop will be provided.

NECFUG

Dynamic Language User Group Lightning Talks Tuesday

July 11th, 2009

Don’t miss the lightning talks this Tuesday at the Omaha Dynamic Language User Group.

We’ve got Jay Hannah presenting MooseX::Workers, Matt Secoske talking about architectures for large amounts of data, Corey Spitzer presenting OpenCV (an open-source computer vision framework), and anyone else who would like to give a short (roughly 5 minutes — or longer) talk. It’s pretty open so show up, meet some local techies, and share some cool ideas.

ODYNUG meets the second Tuesday of each month, 7pm-9pm
at UNO’s Peter Kiewit Institute (PKI)
Room PKI 269
1110 South 67th Street
Omaha, NE

Dynamic Language UG, Presentations