将下面两个文章放在一起,道出了生产力工具的真正威力 - Nonlinear assistance. 回想一下 BigO Notation 的各条曲线就能明白了:

    • 当 IDE 有了语法感知能力加持,代码浏览变得简单;类似有了智能手机导航后的城市驾驶,面临一个复杂的巨无霸项目、也可以基于工具的辅助能力驾驶上路了
    • 当 IDE 能帮助开发者安全地实现重构,会发现带来的改变不仅仅是几处自动化变更、而是整个开发模式上的变革——比如可以在命名上丛容一些(这可是顶尖难题
    • 当各种高级代码分析特性能帮助新人开发者理解一些代码逻辑(如引用查找、定义跳转),Legacy Code 开始变得可以维护了、软件的生命周期得到延伸;大型软件项目也可以有全然没有经验背景的生力军参与了,某种程度上也可以促进代码的交流分享;降低软件业的从业门槛

    Maxim Shafirov 在加入 JetBrains 伊始做的第一个能力是 Code Inspection,看采访提到对创业成功毫无信心、以至于没辞职悄悄搞了6个月… 但回过头看,IntelliJ 的 Code Inspection 功能全然符合 Nonlinear 的技术价值点特征。这也是最近的 ToDeveloper SaaS 同样在讲的故事,比如 Sourcegraph 提到的 Batch Changes、或 Google 称 Large Scale Change(LCS)都一样如此。


    1. 20 years of IntelliJ

    https://www.youtube.com/watch?v=Qxl0d2rV4Ls

    IntelliJ 20 周年活动的 Keynote 内容,基于视频字幕合成;更多关于 CEO Maxim 等信息

    展开查看文字稿详情 Mala Gupta: How do you feel reaching this milestone - 20th anniversary of IntelliJ IDEA?
    Valentin Kipyatkov: Well, it's a huge, huge time. It's like half of my life and yeah, that's a great milestone. To be honest, when the whole thing was started, I was not thinking in such long terms, like only about what would be great to achieve in the nearest time, not in 20 years.

    Mala Gupta: Could you have imagined when you were working on IntelliJ IDEA in 2001, that it would become such a popular IDE and that it would be used by developers from all over the world?
    Maxim Shafirov: Well, short answer is no. I was very skeptical and then I've remembered them- they offer me a job. And we try to kind of talk about my compensation and my idea was, no, you cannot afford to pay me this money because you'll have to sell this many a month - I said. And they were laughing. I mean, of course they sell it. They will sell it much more, but I was really skeptical of that. Because it ends up. Yeah, it's a great product, but it's really hard to convince the whole world to use it, but I was proven wrong and I'm really happy about that.
    Valentin Kipyatkov: I never thought about like, being so popular and no, it wasn't in my mind. I just wanted people to use and - it'd be some substantial amounts of people.

    Mala Gupta: How did it start and why did you start working with IntelliJ IDEA?
    Valentin Kipyatkov: At the time when it started, we are three founders. We all were programming and programming in Java and the tool, which was, it was the best on the market. Yeah, we all used, it was JBuilder from Borland, but we couldn't understand why it's the best tool, but it can't literally do anything with the code. Just it's like a plain text editor with a little bit of improvement. Like you can have some basic code completion, a little bit of syntax highlighting and that's it. Why can't I do very simple things, like find where this function is used in my code, change its name everywhere, and many other things.And we understood that it's possible because the computers are quite powerful and we could do all this and parse all the code and find all references like what the compiler does, but just not to compile the code. And we had many ideas like that. We started to discuss it with each other. Yeah, we realized that we could do it and make a much greater product. So that's how we decided that we will found a company and do this.

    Mala Gupta: You were among the very first developers who joined the IntelliJ IDEA team in 2001. Can you tell us a bit more about how it all started for you?
    Maxim Shafirov: The founders and the guys that had joined the team before me were so fast that when I came to the team, it felt for me like product is already done and there isn't much to do because it's already functional- the whole IDE. I was impressed beyond any imagination. It did have a thing called refactoring, which I didn't know at that time. So you could extract method then, and the guys were so patient and showed it to me. Look how it works. You can do this. And it transformed the code, you know, it was so impressive at that time.I had my job that was well paid for an outsourcing company for some American firm doing a translator that was translator from some internal language to multiple other languages for multiple deployments. And specifically I work at the time on a compiler backend, which translated to COBOL, Java, and also C. By chance we had a common colleague called Ann Oreshnikova. So she came to me and said that look I know the guys who are doing impressive things, would you like to talk to them? And we did, and first, I didn't believe that this is serious and you know, I have my job. This is some kind of startup without any bright future because - what can you do? But the task was so interesting that I agreed that I will work for them part-time. So I said that, okay. I will work for you like a day a week, and my initial task was code inspections. And then I started implementing an inspection called data flow analysis, and I've read a couple of scientific papers on how to implement this. And it was so cool. I mean, the task was so rewarding. It was such a beautiful piece of a task and the results was so impressive that in fact, I not only I didn't work for them, part-time I worked full-time somehow managing to do my daytime job. Yeah, and the weekends and the nights, of course, and after like six months I believe of doing so I said, yeah, this finally has to end because I'm cheating on my other employer. It should stop. And I joined the team six months later. Since then I actually made a lot of things called inspection turned out to be not just one inspection, but the whole bunch of a whole bunch of analysis. And then there was a bright idea that analysis not only has to run when you require them, but they, they have to run on the fly and then it gives you another level of code quality if developers can find out what's wrong with their code immediately as they type them and have time and contexts to understand what's going on and fix. And then I also worked on an editor subsystem implemented code folding and many other stuff. We decided that Java IDE is not enough. And we need to support other languages and other frameworks, and at that time we actually support in a kind of a hacky way XML, JSP, stuff like that. So I took the bullet and refactored all the code to implement the language API and unified parsing engine. So that turns out, that kind of make all the other IDEs possible in the future. The first kind of demo language demo language put in was JavaScript support. It wasn't really popular at that time, but then, you know, it turns out that it was right choice and also Dmitry Jemerov implemented Python support on top of that.

    Mala Gupta: So how did it go?
    Valentin Kipyatkov: Well, we were just writing code, I wouldn't say it was much things unexpected in terms of programming. It was more challenging how to market it, how to bring it to people. And because we did not have any experience with that, like selling our product to worldwide audience ourselves so that's why we decided to make kind of intermediate stop, like, we had already enough code to do some simple things, like find references to some declaration or rename declaration, move it to another package. And we decided that, of that functionality, we can pack it into a simpler product. We called it Renamer. We did not expect it to have a tremendous success, of course, because the functionality was very limited, but for us, it was very important to try it, how to sell it.

    Mala Gupta: IntelliJ IDEA was initially named Renamer. So, is it the pain points that you saw kind of being solved and you fell for it?
    Maxim Shafirov: Yes. Of course, I mean before that we had to do that manually. And when you see that the task you have to do manually for, I don't know, 10 days or a month, you can do in seconds then you immediately fell in love with, you know, not only saves you time, but it actually enables you to do certain things before, because if you understand that, okay, I'm going to spend a month doing this, then you actually don't do it. It's not only a question of productivity. It actually enables you to work in a certain way or do things you, you won't be doing otherwise.

    Mala Gupta: So, did you give yourself a time limit when you started working on it? Did you say, okay, let me give this product three months and let's see how it goes?
    Valentin Kipyatkov: We had a limit, actually, it was a financial limit because the company was founded with our own money. We all three, we needed to have some money to live. So that was the limit. And the first version of the product took about one year to bring it to the market. It was IntelliJ IDEA which we released in about a year, but actually Renamer was not the only stop. We sold some copies of Renamer, but not many. And then we realized that, probably, it's not getting any popularity because the functionality is very limited, but it's a standalone product. You have to launch it. So you do it in parallel with your coding environment. So it's not very practical for a simple task, like finding some references. So we realized that we could make maybe even a smaller functionality, like just finding references, but put it in as a plugin to JBuilder to this IDE. And if it's flagging, it's always at your disposal and even for a simple task, but you perform it many times a day, it can be handy tool. And we, so we made another product from the same code we had already, we packed it in a plugin and released it, and it was called code search for JBuilder. And it was a bit more popular.We sold more copies. I don't remember the numbers, but it was something, but again, it was just to try it, how the sales process is going. So the main goal remained the IDE.

    Mala Gupta: Was it hard to sell IntelliJ IDEA or did things started falling in place as developers were trying it out, they liked it. And by word of mouth, it became more popular? How did it go?
    Valentin Kipyatkov: When we released the first version of IDEA, we got some users. Actually, we got some users even earlier than that, because we opened, we called it Early Access Program. We have this for products even now. By the word of mouth people came, they used our product and they gave us feedback and we often implemented like someone makes a suggestion and maybe even the next day he gets it in the next build. The first version we got some users, not a lot. We understood that because we needed to release the version sooner, we didn't have some of key features. For example, I remember that debugger was missing in the first version. So we knew what we need to actually produce a better version with more functionality.And I think we did it in like half a year or eight months, maybe, after the first version. So it was IDEA 1.5. And that's the one which got a lot of popularity, right after the release, we got like tens and hundreds of users. It got very popular very quickly. Yeah. It was mostly the word of mouth. We did not place any advertisement like on the web or something. Just maybe few, for example, we remember there was some quite popular website. It was for developers and their developers liked our tool, and then we made a deal. Like we gave them our copies of our product for free and they put the banner on the website.And we got quite a lot of users coming from this site because it was popular.

    Mala Gupta: I am also interviewing a lot of other developers for IntelliJ IDEA's 20th birthday. And they all were really happy that they get to hear back from either the support or the other people that they report any issue to - features or complaints.
    Valentin Kipyatkov: I think it was like a feature of our company from the very beginning, because we're always listening to our users and we're trying to establish direct contact like this Early Access Program.
    Maxim Shafirov: When I first came it was a kind of funny story on it. People were really proud about that. We have very close community in newsgroups. When someone writes, I want this feature. And then the next day the IDE comes out with the feature is implemented. We have an option for that. You know, and really proud that we could serve our customers need and provide any, every option for every customer to any request. But later on, as you develop the IDE, not for a handful of people, but for millions of people, it turns out that this is not really viable approach. We started to have so many options that regular users or regular newcomers started to have a hard time to understand how these things work. So some things on how the project should evolve, product should evolve, had to be reconsidered. And I think we did a great job with that. Keep doing a great job and we have a lot of things going forward on how to keep evolving.

    Mala Gupta: Were there any moments where there were challenges and which were difficult to address?
    Valentin Kipyatkov: I can remember one challenge. I lost back at the airport with my computer and inside, there was some source code, which was not yet published anywhere else and I needed a new computer. So it was a bit of a challenge. I think that there was a very tough competition when Eclipse came. It was lacking a lot of things compared to us, but it was free. And also they learned something from us. So they, or they took some of our features, and then it's much more difficult to convince many users that we offer a better value because, okay, you say we have this and that. And they say, oh okay, but Eclipse has it as well. We say, but you see, look at the details. It's not as good as ours. And they, they say it but it's free and what we can do with that. So it was difficult competition. But then I think as a result, maybe it helped us to make a better product because we created IntelliJ IDEA community edition, which was also free and open source.And this gave us much more popularity and more users. And created a platform on which we later on created many more IDEs.

    Mala Gupta: IntelliJ IDEA was open sourced. It's also available as a free community version. Was this risky? How did you come up with the strategy and were there any fears about its viability?
    Maxim Shafirov: So, at that time we considered like everything is Eclipse or everything is free. And IntelliJ is the only paid IDE and closed source. And we had very questionable public image because of that. And so we had to make it clear that we can do open source as well. And we did. So the plan was that we can afford to lose like half of the customers and it turns out that we didn't lose any. Sales in terms of revenue wasn't hurt and 2009, you should remember it was immediately after 2008 depression crisis. So it was absolutely right move. And it allowed us to build an ecosystem of our own tools, as well as other company's tools around this platform. And IntelliJ IDEA community edition is the best IDE. I think it's just doesn't have features, which lets you develop for the server side, of course, which is by incident what most Java developers do for their day job. So yes, this was risky, but it, this was the only right move, looking back.
    Valentin Kipyatkov: Yes, of course. It was a tough decision. Yeah. Because we did not know how it will go and everything was at stake, so everything was at risk, but yeah, it went very well as a result.

    Mala Gupta: I was talking with Zlata and she mentioned that one of the recent changes, you implemented that functionality, I think April last year. So do you still code?
    Valentin Kipyatkov: Do I still code? Well, not much in IDEA. I, yeah, that was the, the most recent feature I implemented just because I wanted it to be present because I don't like to, when you need to change signature of the methods, you invoke some dialogue and it's quite difficult to operate with. I prefer to make all the changes right in the editor. That's why. I was talking about this feature maybe for many years, but it wasn't implemented. And then I decided, okay, I will do it. It was just spontaneous effort from my side.

    Mala Gupta: You started with inspections, which is one of the most loved featured by a lot of developers that I know. And when the results started showing, they'd be like, Oh, this looks cool. Do you have any interesting stories around that part?
    Maxim Shafirov: Yeah, actually I do. I mean after I implemented this inspection, then for almost two years, starting from that, part of my job was talking to colleagues, which said, "Oh, you have a bug". So it shows there was an error in my code, but that's not true.And then that couldn't be true no, your expression is faulty. And then we sat and tried to analyze what was going on and how does it work. In a majority of the cases, the inspection was right. And there was indeed a bug in their code not in the inspection. Yeah. And after that, People kind of started to trust it, you know? And now I should say that most of my colleagues are really skeptical and they always see the problem in someone else's code first. Yeah. So having something, which is, you don't have an ability to argue . It's just a code. It tells you, you have a problem. You can't argue with that. That is a good thing.

    Mala Gupta: I also heard that you mentioned that you just can't live without coding and you try to do that today.
    Maxim Shafirov: Oh yeah. So it turns out I can live without coding but I just don't just feel right. And then, then, you know, I need it sometimes. Unfortunately, I do code but unfortunately not as much as I would love to. And still hope that I'm helpful in this role. Yeah, I do. My only language at this time is Kotlin. I only code in Kotlin. So kinda my horizon shrinks.Mala Gupta: When did you wanted to start programming? Was it early in your career or when you were in school?
    Valentin Kipyatkov: Yeah. Maybe it's maybe 12 years or something like that. I decided that I'll be a programmer. Yeah. So I just decided that I like it so much that I will do it and never changed my decision after that.

    Mala Gupta: So what language did you start programming in?
    Valentin Kipyatkov: Well, actually my first programming experience was with a calculator. So it was a calculator which allowed me to write some small programs inside, some basic comments, and I made some stuff in it. Even some like games or something like that. And then later on, I think my father, he brought me some materials about BASIC, but I never really programmed in it because I did not have computer to do it. So the main problem in my childhood was the lack of access to the computer. And the time when I - the first time I got my own computer, it was like I was in, in the last two years of the school and it was a computer without any software. Like, it was very basic. It had very few tools inside and everything else you had to write yourself and they did not have any compilers or anything. So I wrote it in assembler, everything. I learned some languages before that, but not much programming because I did not have my own computer. Like I remember reading the book Stroustrup for C++.It was such an interesting reading just by itself, not even a program.

    Mala Gupta: You started your career as a developer, and now you lead the company as the CEO, and that's an impressive career path. I would say. Do you have any secrets to your success?
    Maxim Shafirov: You know, I didn't know how this happened, actually, because I'd never wanted to in the first place. So when I became a team lead for IntelliJ IDEA, I didn't want that actually, so I never wanted to become a manager or something. So I'm a programmer. I know how to program, but then it turns out that, you know, I understand that as a team, we can do more and sometimes teams need, not a management. I would say we are really flat, but teams need some focus and to have this focus, we need to lead the conversation.And I think that is what has happened. And the same thing happened actually with me becoming a CEO. And I didn't have that in plans ever, but it happened. So I cannot really share any secrets and I'm not really sure that it is a success because I would say that as a developer, I would also have had a great career.

    Mala Gupta: So you're not really focusing on the problems, but on the solution. So that I think is one of the secrets of success that I would say.
    Maxim Shafirov: Oh, I should think about that. Thank you. I mean, maybe it's going to be useful for me when I innovate. Maybe I'm stuck something in somewhere, then I have to think about your words. Not think about the problem. Think about the solution.

    Mala Gupta: I know that first year that you were working with JetBrains, you were also teaching at the St. Petersburg state university. And how did you manage to juggle those roles? Also, did your work at the university help you with your work at JetBrains?
    Maxim Shafirov: I started teaching before I joined JetBrains so I just didn't stop teaching when I joined JetBrains. And it turned out very fruitful because many of my students are now - now work for the company. It's, it's one of the things that I'm proud of. And for me it wasn't really different because you, you know, when you're passionate about the code, you want to tell people how to program then you can have a conversation with someone who's really knwledgeable or someone who is starting in their career, and it's actually kind of the same conversation. And it helped me to understand that, for instance, some of the things in our product are not really as good as I thought they are, because I saw people stumbling upon some issues, which were kind of tricky, but then it turns out that we can improve as a product to make them more approachable.Yeah. And also it gave me a lot of, not only a lot of insights, but also a lot of positive energy. But finally it appears that it takes too much work. And again both JetBrains and teaching was very demanding and I had to choose at some point. So I did choose JetBrains.

    Mala Gupta: Any feature or any part of IDEA that you really like or are proud of for the current edition or recent editions?
    Valentin Kipyatkov: There are many changes that make it better, better user experience, better user interface. That's it. So I can't mention anything in particular.For example, okay. This feature that we discussed already, which I implemented for changing method signature. I use it like every day, I think almost because it's very quick, you just add signature and apply this thing without invoking anything, any dialogues.It's a tool I couldn't live without, because how would I program - no way. I don't know any other tool to do it- to do programming nowadays.

    Mala Gupta: What are your favorite IntelliJ IDEA features?
    Maxim Shafirov: Instant highlighting in the editor, on line code inspections. Not because I made it, or started it because I really think that it is important. And I use a lot then all the navigation features, which are go to clause, go to file, go to symbol, find in path - I use a lot because it's quick, find usages of course. And the preview. I forgot the name, preview declarations, kind of that stuff. So all the navigation features I need them. Git support, of course. And the debugger is absolutely useful. Unfortunately, it is really hard to debug Kotlin coroutines right now. So I'm dreaming for something more usable than what we have right now. Debugging asynchronous code is a problem. We tried to implement as many refactorings as possible just by reading the book and it turns out, I don't use them much. So half of the refactoring features might actually be gone, I think, but like extract method in-line, extract variables, stuff like that, handy features, I use them every day. Because that's not the way of refactoring, more, it's the way to actually write the code. Yeah. So I mentioned, dependency analysis. I think that I don't use it every day, but without this tool, in some cases it's a nightmare. I don't know what to, how to do stuff. And it allows, it allows for, you know, to keep this code base in shape because keeping proper dependencies and minimize the surface between the modules is very important. So we use it a lot.

    Mala Gupta: So the last question in the rapid fire round is which feature do you use the most?
    Maxim Shafirov: I think it's syntax-aware selection, and we have this productivity guide, which I managed to lose after upgrading to a new computer. But I remember that one, that one was most used because you operate with code like text a lot, and you have to select the proper range for that. And syntax-aware selection is really handy.

    Mala Gupta: What is the spirit of JetBrains and what are its core values?
    Maxim Shafirov: Well I can talk - I can only speak for myself . For me, it's always been fun, meaning that you're doing something which you enjoy a great deal. While at the same time, you understand that you provide a great value for, for the users, for the customers and, and this understanding kind of doubles that fun. Doubles that enjoyment. And the spirit is, I think, to keep going and always challenge what you know. And always see how to do the next thing. And at the same time, you know, I think that we are very friendly as a company from inside. Some say that it's just a big family. It is true to some extent, of course, because we are 1500 and it's really hard to manage 1500 people as a family. But it really, I mean, it's great pain for me when I see that people not, not kind of respect each other sometimes because maybe they don't know each other enough. And it's great enjoyment when I see that people collaborate and help each other and proud of each other's work. I think that these things are really important at JetBrains and , you know, I feel that many people, if not most, I think most people, if not all feel like JetBrains is not their employer, but it's like a company of their own. They don't own any shares of course. But we always say: we did that or we are going to do that. It's not that my employer is going to work on this project. You know, it's very personal attachment and I think that it is important. And I would like this to be kept on for as long as possible.

    Mala Gupta: Absolutely. So there's one more question regarding JetBrains that I want to ask. JetBrains is proud to have as you said, a flat structure, we have few managers, I hardly have met any managers here and everybody's opinion matters. Is it difficult to lead such a company?
    Maxim Shafirov: Yeah, it is. It is. It is hard from like one side, but I think it is important to keep it this way just by being hard. You know, I remember them when they tried to develop a thing called Space now. For a couple of years, if not more, everyone stopped me in the corridor and said, So, what is this thing called Space? What does it do? Why we need it? How is it going to work? No, we will not be able to sell it to anyone. No, the market doesn't need it. And you know, these things keep going on and on and on. And yes, you have to be persistent if you feel that this is the right way to go, but at the same time, being callenged is not a bad thing. You know, you're given a perspective, maybe how people going to be seeing these things on the market and having multiple voices, even if not always pleasant, is a good thing. You know, that that is what diversity is for, for instance, you know, it's challenging, but it is important.And you know, I understand that all of those people make their own decisions, being developers, they still decide on the product features they develop. And so I understand that I'm talking to people with real knowledge of the domain and real knowledge of their customer base. And there is no need to kind of force them to do whatever I want because they know better.

    Mala Gupta: As you also mentioned in one of the videos that I've watched about the dog fooding, so developers, at JetBrains use their tools to develop the tools that they create. So they know the pain points. They also test out the product that they're building. So that is really interesting in our case.
    Maxim Shafirov: Absolutely. It is important though, to understand that dogfooding has its limitations and it's sometimes easy to fall into the trap that, you know, all, you know, everything and overfit for a particular scenario. There is a joke that, which is only partly joke that, IntelliJ IDEA is the best IDE in the world for developing IntelliJ IDEA.

    Mala Gupta: And regarding that structure, I remember you mentioned sometime back that people move around from the role of development to managing the product, to going into the market.
    Maxim Shafirov: Absolutely. I mean after I stopped working in IntelliJ team. I immediately like immediately saw many shortcomings of the product, like even how, how this even works, when I opened some other project. And you know, you should always change your perspective. It is important. It is a problem if you stay on a certain thing for too long, because you know, your horizon shrinks and it is important to have perspective to be able to make something useful.

    Mala Gupta: The journey of IntelliJ IDEA over the past 20 years. So how would you define its journey from your perspective?
    Maxim Shafirov: That's a really good question. I mean, 20 years is a lot and it's way more than the lifespan for most of the products and projects in the software industry. And I think that with IntelliJ, we managed to find out that not only , not only the way to make it even better with each one new release, but also find more opportunities for how how we can use it in some other way. Like for instance, we've managed to refactor it all the time and manage the dependencies and models in there to use it in a subsidy as a static code analysis tool or in Upsource as an engine, which provides code intelligence for the code review. And of course we managed to develop a platform which enables IDEs for other frameworks and other languages which most of them are successful in their niches as well. And so I think that the solution to that is constant evolution. We do not take things for granted and trying to evolve the code to keep it in a good shape, to always make sure that it's performing the best.
    Valentin Kipyatkov: I think surviving and getting more and more popularity during 20 years of our history is a great achievement. So, yes. So that's just what I wanted to say. Yeah. That's the achievement.

    2. IntelliJ Conf Developer Productivity 2021

    Dmitry Jemerov (转行产品经理的前 JB CTO)在 IntelliJ Conf 上的分享;更多关于 Yole 的信息

    How an IDE helps

    • Different ways for an IDE to help at different stages of the process
      • Writing code (code completion, live templates)
      • Figuring out what to write (building a mental model of the project, i.e. navigation, hierarchy, diagrams, find usages, quick documentation)
      • Figuring out why things don’t work (real-time highlighting of errors and warnings, WYSIWYG and live preview features, debugger)
      • Cleanup and maintenance (code formatter, inspections and quick-fixes, code coverage)
    • Proactive vs. user-driven assistance
      • Proactive: happens automatically (syntax and error highlighting, auto-indent, code completion, gutter icons, inlays)
      • User-driven: happens on request (everything else: refactoring, code generation)
    • Linear vs. Nonlinear assistance
      • Linear: speeds you up by a constant factor (code completion, auto-indent, paired-brace insertion, using keyboard shortcuts instead of mouse)
      • Nonlinear: speeds you exponentially or gives you new capabilities (project-wide find/replace, structure search and replace, refactoring, debugger, profiler)

    Choosing and Learning an IDE

    • IDEs are deceptively easy
      • 👍 Low barrier of entry
      • 👎 No direct incentive to get better at using the tool
    • Choosing an IDE is hard
      • Hundreds of features and different approaches to many problems
      • IDE recommendation often lack context or motivation (People assume that every feature of a given tool can be replaced in any other tool with the right setting or plugin)
      • Look & feel factors play a major role in decisions
    • Learning IDEs is not encouraged
      • The only editing tool that people take pride in learning is VIM(”程序员唯一觉得面上有光的工具学习,是 VIM…“)
        • VIM is powerful but it’s ultimately a tool for manipulating text
        • VIM commands work in terms of characters and lines, not statements or declarations
      • Novices are encouraged to learn to do everything from the terminal (this is not wrong, but other tools can be more effective and therefore worth learning)
      • Much fewer resources are available for learning for IDEs compared to other professional tools (e.g., Photoshop, Office)

    IntelliJ Product Team Challenges

    • Proactive assistance: Find the right amount
      • Too much decoration around the code ⇒ too much cognitive load
      • Not enough decoration ⇒ missing potential productivity benefits
      • Right amount depends on context and user preference (ideally, to be able to adjust for context automatically, but it’s an unsolved problem)
      • Ensuring discoverability of key features and de-emphasizing less useful ones
      • Example: Reader Mode (Context: Library code / Removing unhelpful assistance: Warnings / Adding relevant assistance: Rendered doc comments)
    • Allure: Create positive emotional experience
      • Clean and modern look & feel
      • Large variety of good-looking UI themes
      • Example: JetBrains Mono