Bio Hadi Hariri presides over the Malaga NUG, works as Technology Evangelist at JetBrains and actively speaks at conferences and user groups.Hadi is also a book author, frequent contributor to developer publications, and active on various open source projects.
The target audience for GOTO conferences are software developers, IT architects and project managers. GOTO Aarhus is an annual event in Denmark. The idea for GOTO (formerly known as JAOO) came about as the management at Trifork was dissatisfied with the conferences that existed and wanted to create a forum that would give the development staff inspiration, energy and desire to learn coupled with the chance to network with the IT community.
1. This is Michael Hunger from InfoQ and I’m sitting here with Hadi Hariri from JetBrains to talk about development tools and development on this part of software development. Hadi, what are you doing at JetBrains? What’s your task?
Hadi: My official role is technical evangelist at JetBrains. Well, my main focus is kind of on our .Net tools but I’m interested in everything so I’m expanding a little bit and I’m covering a little bit all other products and other languages apart from the C-# which is most in my focus right now.
3. So in the .Net land, if you have so many tools already available, it seems to be only a small step to provide a full functioning IDE out of that. So certainly lots of people have asked this question: is there anything…?
Hadi: I think that there isn’t a day that doesn’t go by that either someone asks or someone tweets: “When is JetBrains going to provide an .Net IDE?” I can’t really say much about that, I mean, the thing is that right now, a lot of value to Visual Studio and people that use ReSharper know that, they appreciate that value. The problem is that there’s a lot of different types of developers out there. It’s not just you and I. And in our kind of echo chamber we’re the kind of developers that, especially like in Scandinavia, you come to a conference and most of the developers here are doing unit testing, they’re doing test-driven development, they’re doing these things. But still there is corporate environments that aren’t doing these things, they are doing WinForms, they are doing, you know designers using WPF, using SAML. But lots still are on WinForms. So it’s not just about providing an IDE that allows you to do coding and refactoring and run unit testing, but then people want other things, they want WinForms designers. It’s still going on. Despite us being on the edge in the corporate environment, you know yourself there’s still legacy code going on. So it’s not as simple as that and it’s hard to get people, especially in the corporate environment, to say: “Oh, well, we’re going to dump this and go and use a new IDE from JetBrains.”
Hadi: It is. I mean our effort has always tried to be that, has tried to promote best practices and I’ll kind of quote Ted Neward on this. He said that the “best practices are based on context”, right? He always says “Breathing under water without equipment is not a good practice”, although breathing is but I mean we try and promote kind of best practices. And what we do is, both in my role as an evangelist and other people we try not only to show you how to use the tools but to show you why there are certain things you need to do. I mean the value in why refactoring is important not just because we’ll sell you the tool, but the reason behind refactoring. And also you know yourself we started a few years ago JetBrains Academy which is kind of key people in the community that are not only very well-known but very well respected and focused on good practices and getting the best out of software not only that kind of “drag and-drop”-approach that companies like Microsoft tend to push and trying to get them to champion out focusing on good software development which, as I said, you yourself joined I think couple of years ago. So that’s our kind of our effort. We really want to try, both ourselves learn the better ways to do software and guide people in that area.
5. Can the 'intelligent' IDEs you provide help there as well? I think for instance about the intentions available in IntelliJ, they really drive you to at least think about what you’ve just written. The code, you’ve just written or you come across, and want to suggest improvements - things like that. So are there quite often things that really improve your code and code base and they also complain about staff like overly complex methods or too long classes classes. Could something like that also help to educate developers on how to become better and how to improve their skills?
Hadi: I think so. I mean a lot of times when people start to work with tools like IntelliJ or ReSharper, especially more season developers, shall we say, they are kind of reluctant, because they put it like “You shouldn’t teach me how to code.” But again so often we are talking about the echo. You know, we’re in an echo chamber, we are talking about the top notch, but a lot of developers that are new to the language or new to constructs or new to ways of doing things or do not know about certain ways of doing things - that’s the value we add. We say to you: “Look, this is how you’re doing it and this is the suggestion on how you should do it.” In fact we’ve go one step further with ReSharper now. We even have an option now like what you call the intentions and context actions in ReSharper where tells you why we’re suggesting this which takes you to a wiki and gives you an explanation with examples of why we’re doing that. So in a way, yes we’re helping educate developers on certain constructs and you yourself know that we’ll also have another feature in both ReSharper and IntelliJ based products which is called “the structural search-and-replace”, which is about detecting bad code smells. You yourself, your team, your architect, lead, your developers define patterns in that are identified as code smells and show, provide ways to replace them which would be equivalent to a quick fix. So this is now giving you the power to educate your team, to educate your new developers, to educate new people that join your team and how things could be improved. It’s not only us suggesting ways but giving you the possibility to do that.
7. It’s interesting because I was just thinking about that those tools could help like not the top five percent developers to get better at a daily life. They just have used editors so far because there was nothing else and now they have lots of other opportunities.
Hadi: Yes, we opened early access program last year and recently we went Beta and now we’ve gone Beta 2 and the Release will be soon. And it’s currently, if you have experienced IntelliJ or any of our IntelliJ or ReSharper-based IDEs, you are going to love AppCode because it gives you the same experience using Objective-C. I have started, I’ve been about two months now on and off learning Objective_C and I started out with Xcode because I wanted to see actually what the value that AppCode is providing me. So I started out with Xcode and I used Xcode for like two three weeks and then I switched over to AppCode and I appreciate the value and I appreciate having the familiarity with the key bindings and how to go to declarations and find types and find usages and all that. So it brings all that value in and again you know the feedback that we’ve received on that has been very good. People like it a lot.
Hadi: Existing Xcode users, yes! There are very few people like me that have jumped onboard and after two weeks started to use AppCode. It’s existing Xcode users that are seeing the potential that AppCode offers and liking it. So we’re hoping that once that goes released, it’s going to get a good user base.
10. I really like App Code as well Xcode was quite horrific to use. Another trend that I’ve seen in the last years was more and more integration of additional tools like version control systems, task management, static analysis tools and so on. What do you think, where is the trend of that going to? So will it become more and more of the IDE being the epicenter of your development process and the other tools are really well integrated into that?
Hadi: If you really think about it, this has been going on forever. I mean if you go back to Borland days, Borland came out with ALM, the Application Lifecycle Management and they came out with Borland Studio which was an integration of back then it was called TogetherSoft (the software that they had) and they had a version control which they acquired StarTeam back then and then they had the IDE. Then Borland went out of business for whatever reason and Microsoft continued with the ALM. And ALM, if you look at Microsoft now Team Foundation Server you have version control, you have IDE and you have issue tracking and you have your Scrum board, etc. I think that direction is going to continue. From our perspective, I mean from what we offer, JetBrains, we have different tools as well for this, we have youTrack for our issue tracker, we have TeamCity for our continuous integration, we have our IDEs and then we integrate with other version control systems, like Git, Subversion, etc. The benefit from our perspective though is that we are always trying to keep it as open as possible. So, if people don’t know TeamCity, you yourself know TeamCity, but TeamCity doesn’t lock you in. When you use, for example, a tool like Microsoft TFS up to recent versions it locks you down pretty much to what Microsoft pushes out the door. If you don’t use MS TFS and you want to use NUnit, you can, but it’s not easy, you have to fight it. Whereas we want to keep the doors open, be free to use what you want, but value that integration between all these adds obviously to a certain point it does have value. I mean why shouldn’t I want to look at a file in that instance and see which work items were associated to this and which build was associated to that so I don’t see why there is a reason to not add that because ultimately it’s adding value. I mean I used Git from the command line, I love the command line, I mean I write PowerShell scripts in that, but I would also appreciate to have a certain level of integration with that. And there are people that are not comfortable with the command line, there are people that like integration so I don’t see a tendency of changing. I don’t see a great steep climbing in that area either, I just think it’s just been on a continuous path of integration for a long time now.
Hadi: Currently as far as I know there is no plans. As you know, we’ve released the community edition and in the year that it was released I think we had (it was mentioned) like a 25% percent increase in sales of our ultimate edition, which is great. People saw the value that it adds but as far as I know in terms of the other IDEs, currently we there are no plans. We did recently release youTrack which is our issue management system, we’ve released a free edition for ten users, no other limitations, only limited to ten and also TeamCity we lifted up all the restrictions apart from the 20 projects and 3 build agents and again we got rid of the restrictions of user accounts, etc. So combining that with the open source of IntelliJ and with how much we provide in terms of open source, I mean pretty much any open source project out there that’s been established for like two-three months has the benefit of getting all our licenses for free and then we provide academic licenses at a high discount. In terms of the community we do push out quite a lot. Of course open source per se is currently only IntelliJ and MPS which you are familiar with - our Meta Programming System.
As far as I know, I mean I’m not heavily involved in the team of IntelliJ, but as far as I know there has been, yes. That’s why they actually moved to Git and they have contributions from the community, the plug-ins and we kind of embrace a lot of things that the community does like for example a lot of plug-ins that people develop for IntelliJ we bring them onboard and then we help maintain them. So in that sense we are not trying to duplicate efforts that community members are doing which is wrong because, I’m trying to create an ecosystem here. So we do bring it onboard but as far as I know there has been and there are constantly contributions to IntelliJ, I mean it’s run completely as an open source project, that edition.
13. Regarding the future, I’d like to peek a bit into the future. What do you think would there be any significant changes in how we develop code and how IDEs will look like? Last year there has been Code Bubbles.
Yes, I saw code bubbles.
You know, unless they come up with a really nice idea, I’m not sure I would be too keen on the graphic approach because from one side we’re focusing on topics like domain-driven design, I’m focusing so much more on the code being more expressive, writing things out in code and from the other side, if we are going to abstract this too much, I don’t know if it would be of any benefit. I looked briefly at bubbles, I don’t know if it’s going to be viable, at least not in the state that it was. I hope that we don’t deviate too far off unless something really revolutionary comes up. I hope we don’t deviate too far off from the actual writing in the code. In terms of Online IDEs, currently Online IDEs, I mean, if you’re doing web development, it’s great. Outside of that there is a lot of shortcoming still. I mean a lot! I mean I’m not even talking about compiling on a server side. You can’t have 3000 people hitting that server compiling, it’s not going to scale. If it is, you’re going to charge a hell of a high price because, Amazon, everything, they are charging CPU. You just can’t. For compiled languages it’s not viable the model there is now. Whether it will be in the future or there’s other ways of collaborating online - no doubt. And I think that in the future we have to look towards there, towards how to collaborate better between distributed teams because we’re becoming more distributed day by day. So the online IDE is great for that kind of scenario but I think that we’ve not seen everything there is for IDEs, we’ve not seen everything there is for source control. Git now is the new kid on the block but I think distributed is not the last thing either so I think more things will come.
15. So, an idea I would like to have is collaborative editing of documents, of code, like Google Docs, but for IDE because I quite often do remote pair-programming and for the remote pair programming you can use for instance Skype for the audio channel or something else and then you still have to switch. If you want to switch, then you have to check it in into a private Git repository, the other one pulls it, so it’s a lot more effort to do than just having collaborative editing in the same IDE. And you have to do screen-sharing, which is also bad in most cases. That would be really a cool feature for distributed teams - things like that.
That would be also awesome. There was some text pad editor or something – that you would use to type - EtherPad or something. You used to type and the other guy would see it and there was of course Google Wave, but that didn’t go anywhere.
I’ve been working remotely I think for 14 years. So more or less I work at home and I work alone and I still develop a lot. I mean I have to, I can’t be evangelist if I’m not developing, it just doesn’t make sense selling tools. And I love writing code and I really miss pair-programming because there was a couple of years that I was doing pair -programming on site and when I was doing consulting I was doing pair-programming and I miss it a lot. And I would love like you say, to be able to have that immediate kind of feedback of pair-programming like you’re sitting next to each other with the benefit of “I don’t care if you use the IntelliJ key bindings and I use the Visual Studio key bindings” because that is a problem when you do pair programming. Or “What does your keyboard look like? Mine is Spanish and yours is German.” That would be awesome because I mean I’m a big fan of pair programming. I think it’s way more productive than just solo. So yes, I would like to see things in that area.
But for writing code in a local IDE, without screensharing projects like CodeInterview.me are quite handy (codeinterview.me/). Indeed, it would be nice to see a better support for that in JetBrains tools.