Bio Victor Grazi is an Oracle Java Champion. He is Vice President at JP Morgan Chase Securities Lending division, and Java editor at InfoQ.com. Victor frequently presents at technical conferences where he speaks about Java concurrency and other Java related topics. He is the author of the popular Java concurrency training tool "Java Concurrent Animated" on SourceForge.
Software is changing the world; QCon aims to empower software development by facilitating the spread of knowledge and innovation in the enterprise software development community; to achieve this, QCon is organized as a practitioner-driven conference designed for people influencing innovation in their teams: team leads, architects, project managers, engineering directors.
That’s a good question Barry, I have a lot on my mind. I think, you know my first love, the way I started in this world was as a Java Developer and that really was my first love, but I think having worked in a financial industry for so many years, the target became no so much about how to write a Java program as much as how to deliver a program and how to deliver a large enterprise application. So Java is part of it, putting together the people, the right team, putting together the right process, that’s all really part of it. The goal is just to keep your focus, keep your eye on the ball; make sure that everything is moving toward that, that great delivery. You know in the software industry I think lateness is the rule of thumb and in the financial industry it’s just not acceptable. So, we have to constantly be redefining our processes and our strategies to make sure that we’re on time.
Ok. So Java concurrency is hard. Actually if anybody tells you to have concurrency is hard do not believe them, it’s really impossible. And the best you can do is to have really good tooling. In Java 5, java.util.concurrent package was introduced and that captured a lot of the design patterns that had been forged by people like Doug Lea in the past. He had a book called “Concurrent Programming in Java” and he came out with these design patterns. He said if you want to do concurrency correctly yes it’s hard but if you adhere to these patterns, or utilise these patterns then you’re going to be in the best shape. So he came out with that book. The book was a little bit hard to read, it wasn’t accessible to all programmers. Brian Goetz several years later kind of encapsulated that in terms of, in his book “Java Concurrency in Practice” and put he together some really good ideas and that helped a lot, but it was still somewhat inaccessible.
So I know I was working at a Java, I was leading a Java team at the time and everybody was having trouble with concurrency. I had just starting working at a new firm and I was leading this team and I said: “You know the best way”, (I was actually in an airport) and I said “the best way to teach these people the concurrency or the right way to do it is probably going to be, let me set up an animation”. And in a prior lifetime I had worked in a gaming company where I was in charge of doing animation so I had those skills. And I kind of quickly in a couple of hours when I was waiting for the late flight wrote a rudimentary concurrency animation to display some of the feature of one concurrency pattern. So I realised that it was a pretty good framework and I started adapting it to other patterns and before you know it I had all the components of the java.util.concurrent package modelled. So I’ve been keeping up with it and that was about four years ago.
Every time a new version of Java comes out, there are new components and I try to get them in there, you know getting in “fork and join” and some of the recent innovations in java.util.concurrent were kind of hard but also kind of fun. And so I started as a Source Forge Project, it’s been around for several years, we have tens of thousands of downloads, people have been looking at it and it’s just by visualising it, being able to interact with an application and kind of playing with threats. So the way it works is: you have like a monolith in the middle, just a big rectangle, and then you have these threads that are represented by arrows and you have methods that are on a component at the top. So for example let’s say we’re looking at a read-write lock, so there might be a lock for read, lock for write; different operations, those buttons. You click those, they spawn threads and you can see in real time how these threads are interacting with each other in those components. So, it’s been pretty helpful, and we’ve been presenting it and people are downloading it.
We hope so. There are a lot of people downloading it. We’ve had like I said tens of thousands of downloads, especially in the last couple of years. I’ve been going around the world speaking about it and when people see it they usually like it, they’re inspired by it, they go and they download it, so I think it’s helping people. So people, the comments have been very positive.
Barry: We better tell people where can they found Java Concurrent Animated on the web.
Best way to do it is go to sourceforge.com and just search for Java Concurrent Animated or you can just type in Google: Java Concurrent Animated and that’ll bring it up for you in sourceforge.
Barry: Now you’ve mentioned one thing earlier that I want to follow up on. You said Java Concurrency is difficult to impossible.
So Concurrency is really difficult problem, right? You have competing threads that are trying to deal with a given resource, a shared resource. So it’s traditionally going to be hard, but there are of course languages and frameworks that try to help with Concurrency, so you have I mean the whole Clojure language is based on Concurrency. F# is a .NET language. What the good frameworks are introducing are immutable objects so you never have contention because you have an object that’s immutable, that objects is going to go away and be replaced with a different object so it’s much easier to reduce the contention. And you also have frameworks like Akka that have different models of dealing with Concurrency.
It’s a great question. JavaFX is a really good framework. It’s amazing, it’s miraculous. Sun started to put it together and Oracle took it over and if it weren’t for all these other frameworks that you are mentioning basically HTML 5.0 and other such frameworks I think JavaFX would have been the leader. Unfortunately the world, the way it is now, everything seems to be moving to JavaFX [Note: Victor Grazi made a subsequent correction: he actually meant to say “HTML5”, but accidentally said “JavaFX”], but I did have an opportunity on a Java Champion Call where we were talking about different things with Oracle and one of the questions I asked them is: “What’s going to happen to JavaFX? It doesn’t seem to have the buy-in to give it the critical mass to really take off. Is Oracle going to continue supporting it?” And the answer I got was: “Yes, we’re going to continue supporting it, we’re hoping for more buy-in and the one thing that you should not be concerned about is that we’re going to pull the plug on it”. And I was sceptical when I heard that but then they said something interesting, they said: “Look at our track record, what have we pulled the plug on you know?” And that’s pretty much true. Oracle seems to support things, they may merge things, fuse things, but they generally don’t just discontinue things that have any kind of acceptance.
The Java Champion Program is a nice recognition by Oracle. They have filtering criteria where they’re looking for Java luminaries; people who have shown leadership in Java. So, you know in my own case I’ve worked on the Java community process Executive Committee and I had led a spec, JSR 354, the Java Money and Currency spec, I had arranged to have our Java users group, Java SIG in New York over at my previous employer and they’re still there now. So, I have done a lot for Java and then going around the world and speaking at different conferences and introducing Java Concurrent Animated and the different topics I have spoken about, well I guess somebody thought that I was worthwhile bringing into the Champion Program. And what people have to do is basically you have to know somebody who is a Champion and most people who are candidates for Champions should know somebody in that group and have somebody recommend them. And they have several criteria they have to conform to. If you conform to that they send out a list of the champions, people vote on it and if enough people like you you’re in.
I guess it changes from team to team. I once had the opportunity to speak to somebody named Jeff McKenna who is one of the original creators of the Scrum Process. And he told me something interesting. He said that there is never been a successful software project that was not at least partially Agile. And I kind of believe that. So Agility is part of it, Agility means the ability to have continuous small deliveries. So I think that’s important but Agile Scrum itself has a lot of overhead. So there are other processes and we’ve been experimenting lately with the Kanban process. Kanban is pretty interesting and it give you the ability and I’ll describe it a little bit. It gives you the ability to visualize your work. What do I mean by that: so if you’re in a traditional factory and you’re building components let’s say in a factory. So you have, you see your raw materials and you see it shrinking down and it’s moving from process to process until it reaches some stage of completion. So you can take a look in that factory on the floor and you pretty much understand where you are in terms of your delivery.
With knowledge workers it’s much different. What you have is you look at my desk and it looks pretty much the same as the next guy’s desk; a lot of paper, a notebook and a monitor you know. So it’s much harder to visualise exactly where you are in your delivery process. So what Kanban gives us is a really interesting way of providing visualisation so you can see where you are. And the way it works is you have a big physical white board, you take a white board and you draw columns on it. And the columns represent the steps in your delivery. It’s kind of the opposite of what you think in terms of Agile. When you think of an Agile process, let’s say Scrum process you might have a card, And the card will have steps on it and as you complete a step you record the time and when you’ve completed all the steps you’ve completed your use-case. Kanban is the opposite. Kanban describes columns that are all the steps. You put a card in the first column and when you’re done with that you capture the time and you move the card into the next column and you keep moving it from column to column until you reach the end. And so it’s a really good talking point where at the end of every day we have a stand up meeting, where we just kind of review what we’ve done, any obstacles and what we’re going to do tomorrow; Typical stand up meeting. But the board becomes the focus, so I see the board and it looks pretty much the same as it looked three days in a row, I know there’s something wrong.
So there might be a blocker, there might be some dependency that we’re waiting for but it’s very easy to visualise exactly what’s going wrong. So now I see a card on the board that’s been there for three days I can ask the developer because we’ve put little icons on the cards so people have different icons, cartoons. My card has a Java duke, and different people have different icons, avatars that represent themselves. So I can look at the card and quickly understand who the developer is and I can see that the card has been there for a couple of days and I can say: “Hey Joe, what’s going on over here? This seems to be delayed. Why are we stuck?” And if there is some kind of blocker I can work to get rid of it before just waiting for some upstream system to hand us something down. We can either make a decision to call them and get that finished or start working on something else. But it’s a really interesting process, the Kanban process. It’s something that I recommend that people take a look at.
Yes, so what I recommend is go on InfoQ and just do a search for Kanban. Also you can search for David J. Anderson who is the father of Kanban in the software industry. We’ve done several interviews with him.
That’s a good question. That comes back to the question of delivery. Good software delivery starts with good programmers. In the olden-days I would have a very good list of questions and I would hand them a piece of paper with the questions on them and they would fill it out and if they got an 85 or over they were in. But it’s really easy to spoof a system like that. And I’ve hired some really poor developers by using that approach and I found out over the years that the best approach is really put somebody in front of a computer and let them solve a problem. And give them a hard problem, and work with them, don’t just when they’re finished with that problem: “That’s it, you’re done”. That’s not the way to do it. When they get to the end of that problem discuss it with them, see how they thought. Did they debug into the program, did they check out, did they ask for requirements. Once they’ve completed that task, ask them to take it to the next level. It’s a much harder interview, it takes many hours to interview a candidate that way, but at the end of that interview, if they made it to the end you pretty much know if that person is going to work out or not.
10. You talk about the importance of training and leadership in addition to an understanding of technology. What’s the right balance among those skills? Would you prefer one over another in a candidate for a position?
It really depends what the position is for, right Barry? But generally there is definitely a mix of technology. I mean no candidate is going to come in and be 100% for all the technologies that any project needs. I mean a reasonably sophisticated project is going to have a good technology stack. It’s hard to find somebody who’s fluent in all of those. So you want to try to find a really good fit but again the trick is finding smart people. People should have a good understanding of design patterns; they should now something about middleware. Once you have somebody who knows how to complete algorithms and you understand the way they think, I think that’s really critical. If it’s for leadership position like a team lead or something, they may be also required to, there might be a point to also test them on their leadership skills and their project management skills and that sort of things.
Well look, we’re all salesmen and even a technical person has to have good people skills. I think the right chemistry on a team is really going to make the difference between success and failure. So you have to have a lot of mutual respect, you have to have people that recognise each other as smart people and the trick is finding those kind of people.
Yes so that’s a good question. I know where I am that one of the things that we test people on is their knowledge of the financial industry and it is helpful, it’s helpful to understand how even in terms of technology, if you understand how a stock is flowing through the system, and you understand the transactional requirements of that, and so if you have that ingrained in you and you’re working on developing that kind of system then yes it’s pretty important skills. But again it’s very hard to find people with all of the technical skills and the business skills so generally if you have to compromise somewhere, we generally end up compromising on the business skills.
Barry: Victor thank you so much for coming today.
It’s a pleasure Barry.