Sometime last week, I had the opportunity to sit down with Andrey Vlasovskikh and discuss where PyCharm is now, and where it plans to go into the future; trying to understand how we got here along the way.

We discussed everything from how Andrey got started with Python in the first place, and how he eventually joined PyCharm.

We then moved onto to talking about how Andrey started his work at JetBrains, and how his use of IDEs in Java and C++ made him realize how rudimentary the code analysis tools for Python really well.

The problem with PyCharm when it comes to building developer tools for it, is that it is a dynamic language, and because of that very nature, providing code completion options can be quite difficult.

EAP-podcast-March

Seeing this as a problem that prevented PyCharm and other IDEs from creating better tooling, Andrey working on creating the typing standards in Python, along with many members in the Python language. Eventually, Python adopted an optional approach to typing in the language.

Going forward, I asked Andrey about how we want to move forward with our tooling support, and one of the most significant things we want to do, is create better tooling for data scientists and machine learning engineers.

Watch the episode on YouTube

## Transcript

Nafiul: [00:00:00] Hey everybody. This is Early Access PyCharm. And I’m your host Nafiul Islam. Today I sit down with Andrey Vlasovskikh, who is the team lead for PyCharm. We talk about everything from how he got into PyCharm in the first place to how we think about building new things in PyCharm, because we have a ton of features already, so we need to be picky about what to add. And lastly, we also talk about the EAP program for PyCharm and how it helps us to make PyCharm better.
[00:00:29]So Andrey, I know you’ve been in the PyCharm team for a very long time. I knew you as the technical lead for PyCharm. And now you’re the team lead of PyCharm.
[00:00:39] I’m sure you’ve been through many companies, but how did you end up at PyCharm?
[00:00:44] Andrey: [00:00:44] Actually it wasn’t lots of companies. I worked at my university and so we had a company based in my university and we did various research projects, development projects, consulting projects, and it was very wide actually in the technologies, in the types of projects that we did, ranging from hardware projects to websites, to architecture consultancy and so on.
[00:01:18] So it was like very wide. But at the same time, one of the directions that we had was code analysis. And I basically spent some time on analyzing Java statically, finding various types of defence, and also C and C++. I’ve always been interested in Python. Well, not always. Sometimes you have to start to become interested in it.
[00:01:45] But for me, it was maybe in 2003 or 2004. I don’t remember. I was a student back then. And I discovered this language and I used it basically for everything at my university. Then I started teaching in Python at the university. And basically I found ways to bring Python to every field, even if it wasn’t the best choice, for example, for hardware development, for cryptography and so on.
[00:02:13]There was this company in St. Petersburg, with the offices in St. Petersburg called JetBrains. I got acquainted with Dmitry Jemerov, the team lead of PyCharm back then. We met at a Python conference, in Moscow in 2010. And it was actually before the release of PyCharm 1.0. And it was interesting because it was a place here in St. Petersburg, where people were also interested in code analysis. And I started thinking of whether I could really specialize after this wide spectrum of technologies and projects.
[00:02:48]Nafiul: [00:02:48] I remember talking to Dmitry Jemerov. At that time, and, it started off as a plugin for IntelliJ. And then eventually the idea to build PyCharm was started. So, how did you get into doing work with JetBrains, because, from what I know, you started with something called IdeaVim. Right?
[00:03:10] Andrey: [00:03:10] Actually it was the other way around. I started with PyCharm.
[00:03:13] Nafiul: [00:03:13] Oh really?
[00:03:14] Andrey: [00:03:14] Yeah. Yeah.
[00:03:16]Nafiul: [00:03:16] Did you build plugins or did you just use PyCharm, at that time you were a power user?
[00:03:21] Andrey: [00:03:21] I wasn’t a power user PyCharm, was very new. I was a Vim user back then. Vim is, mostly fine for writing Python.
[00:03:30] Uh, but I used the IDEs for Java and C++. So at some point I used IntelliJ in 2000s. Uh, and yeah, basically I applied for a job at JetBrains because I wanted to do code analysis and specifically code analysis for Python. It was a little bit sad that I had to do code analysis in Java because I hated Java and I still hate it.
[00:03:57] Uh, but since I loved Python so much, for me it was like, okay. All right. I’ll bite that.Just because I wanted to make the experience of coding in Python much better.
[00:04:11]Nafiul: [00:04:11] So that’s very similar to the experience that I had, because unfortunately in a lot of universities, you have to use Java for the object-oriented programming course. And you get stuck with Java and you get handed this thing called Eclipse. So I started with Eclipse and it was just amazing. You could hit control space and just magically these attributes would pop up. That was a cool thing back then, but I was still using what sublime text or Notepad++ to write Python and C on a Windows machine. And it was so great because PyCharm 1.0 came out and had code completion and the ability to run things easily. It made life on Windows so much better. Like I’m telling you, man.
[00:04:55] Andrey: [00:04:55] Yeah, I can imagine. I wasn’t a Windows user at that point already. I moved to Linux distributions, later to macOS. But for me it also was this experience that you can do much more in PyCharm actually than just having a plain text editor. Even though Python is dynamically typed. It was one of the major challenges that I was looking forward when I applied to JetBrains, creating a static analyzer for dynamic language, because it wasn’t something that was established in the scientific community. There were papers on it, but they were too scientific to be practically applicable.
[00:05:38] Nafiul: [00:05:38] I see. And so what is actually so difficult about creating these kinds of tools for dynamic programming languages like Python?
[00:05:49] Andrey: [00:05:49] Yeah. Basically the main difficulty is the fact that everything is dynamically typed. Because you work with objects in most languages, including Python, and in order to be able to provide good code completion or code inspections, highlight errors for your code, we need to know the type of the object you’re dealing with. Because if we know that it’s a string, then we can say that your string doesn’t have this “add” method. It only has, I dunno, “strip” or “split” or something like that. And in Python, if you got your parameter, your function parameter X, you basically don’t know what it is. It was hard. Back then there were no type hints, by the way. So the only way to specify this information was in the doc strings.
[00:06:43]Nafiul: [00:06:43] Yeah, I remember that. And you also helped to make types more visible in Python, because you worked with other people in the Python community on type hints as well.
[00:06:55]Andrey: [00:06:55] I did. Working on the standard for type hints together with other folks in the Python community, and then implementing these ideas in PyCharm. It was the case that we had this system of types even before the standard came into existence. And the standard was very close to what we had in PyCharm.
[00:07:17] So to some extent it was influenced by the things we had, but it was also some common knowledge, theme that it have in many object-oriented languages and statically typed on object oriented languages. We at PyCharm did most of it by ourselves before the standard appeared.
[00:07:36] And having this common standard working on it was a really enjoyable experience. And I think that Python is now a much better language. Uh, back then we had a lot of discussions on an optionally typed language. There was this rather big idea of an optionally typed language and you could approach it from both perspectives: you can add static types to a dynamic language, like we did in Python. But you can also add dynamic types to a statically typed language. In both cases, you have your optionally typed language and actually it sort of combines the benefits of these both approaches, dynamic and static. At the same time, it also combines weaknesses of both approaches, I should mention. So there are some downsides to optionally typed language, but in general I think it’s a good compromise. I like the idea of an optionally typed language.
[00:08:36] Nafiul: [00:08:36] I think it helps definitely with the tooling. Because at the end of the day, you need to know what the different types of your variables are, what methods they have, their attributes in order to provide the kind of code completion and insight that we’ve come to expect from an IDE, like PyCharm.
[00:08:52]Andrey: [00:08:52] And it’s not only about tooling. It’s also about documentation and being able to comprehend the structure of your system without strict rules, without static types you can get into this situation where you have a huge pile of code and you don’t know what to expect from this specific function. You don’t know it’s parameter types. You don’t know its return type. You don’t know how exactly these parts communicate with each other and so on. So it’s about tooling and about documentation, I think.
[00:09:28]Nafiul: [00:09:28] PyCharm has been behind having this kind of types for pretty long time. How has the landscape of what kind of feature set we provide, changed?
[00:09:38] So initially PyCharm was just about the best Python IDE, plus it also provides Django support, if you want to do web development, and Google App Engine, how has that changed over time? Do you think we were still focusing on the same things or have we kind of changed trajectory?
[00:09:56] Andrey: [00:09:56] To a certain extent, it’s still the case. But we have also added much broader coverage for a lot of tools in the Python ecosystem, including Python profiling, Python debugging, Python code coverage. We have also integrated various ways of running your code remotely such as SSH interpreters, WSL interpreters, Docker, and Docker compose containers and so on.
[00:10:28] And also a big thing that has happened in the Python community. Maybe even it started in the 2000s, but got traction in the 2010s, was data science, of course. And we’ve added support for Jupyter notebooks in PyCharm. Initially it would be an open-source plugin, but then we sort of redesigned it to provide you an experience that is much better in terms of code analysis, in terms of support for running things, including running things remotely.
[00:11:02] And, it’s a hot topic for us basically.
[00:11:04]Nafiul: [00:11:04] I mean, it’s an interesting story because I remember Dmitry Jemerov telling me this, when I talked to him, that a lot of people said PyCharm 1.0 was feature complete.
[00:11:16] It’s interesting to me because we’ve improved so much and in so many directions since then, right? We’ve redefined what’s possible in many ways. And I think a big part of that has to do with getting feedback, not only from ourselves, but also from our users. And I think the EAP program, has a lot to do with that.
[00:11:39] So why don’t you go ahead and just tell me a little bit about how the EAP program started, and what we wanted to achieve through that.
[00:11:47]Andrey: [00:11:47] Yeah, sure. First of all, I wanted to mention that, feedback in general, including on social media, on our public bug tracker and so on is a really a huge driving force for us to prioritize things, to come up with new ideas, new features and so on.
[00:12:04] And for me personally, having this feedback was one of the major factors why I enjoyed and still enjoying my work at JetBrains. Because before that I worked in the company at my university where we had mostly projects for specific companies, for specific businesses. You didn’t have this reaction from your actual users and here with PyCharm, I can basically wake up at night, open my Twitter and start reading people talking about PyCharm.
[00:12:39] I can go to my inbox and I have emails from people reaching out, or I have lots of requests on our public bug tracker, on Stack Overflow, where I used to spend a lot of time answering questions about Python and PyCharm, other things. But getting back to the EAP program, basically, the initial idea of an EAP program, I guess it first appeared in IntelliJ, not in PyCharm. And by the time we started at PyCharm, it was already an established concept in JetBrains. The idea was that we wanted to provide builds for people to play with , to try them in their environments, to write a better program. But we didn’t want to bind ourselves to the strict conditions of a better program. So basically EAP, the early access program, was our way to give earlier builds to people. Back then we had a really long release cycle. It was one year between major releases, we started to shrink it by the time we released PyCharm 1.0. So it becamehalf a year for a release, but it’s a huge time, right? It’s a huge amount of time and we needed feedback. So basically it was our way to find people who are really excited about new features, who wanted to try things who wanted to apply hot fixes for their bugs they encountered, to experiment with things and so on.
[00:14:14]Nafiul: [00:14:14] Yeah. I remember using the EAP program, for the very first time in, I think, PyCharm 4.5, if I remember correctly. And it was a very special release. Because usually you didn’t have like a big release on a 4.5. But I remember doing it and, yeah, it crashed on the very first time I opened it up, there was a big, big red icon on the right side. But I was also able to play around with everything. So I think what’s cool about the EAP program is that lots of people want to know: “Hey, what’s coming next, what are you working on?” and “Did my particular issue get addressed?” And a lot of the times the answer is the EAP. You can just go in there, check things out. There’re usually blog posts on it. Like, hey, we did this or that in the EAP. So you can always go and check it out.
[00:15:08] Andrey: [00:15:08] You mentioned version 4.5. It’s a funny story. Back then, we had a very weird idea of naming the versions of PyCharm, because at some point we had version 2.0, then, I don’t remember, probably, 2.1, then came 2.5. But it was so similar to one of the versions of Python that was relatively popular at that time as well, so that we decided let’s have 2.6, 2.7. As we have now with Python 2.7, the only version, even though it’s not supported any longer, but still it’s one of the versions that people still use.
[00:15:50]But then we decided, all right, let’s do a 3.0, and we kept this scheme of naming the versions of PyCharm, similarly to the versions of Python. But then we got out of the most recent version of Python 3 and we jumped to PyCharm 4.0 and 4.5 that you
[00:16:13] Nafiul: [00:16:13] mentioned.
[00:16:13] And you had a really nice splash screen as well.
[00:16:16] Andrey: [00:16:16] Yeah, specially for the EAP program. Yes it did.
[00:16:20] Nafiul: [00:16:20] And I was like, wow, they really put some effort into it.
[00:16:23] Andrey: [00:16:23] They were very playful, very funny. There was the one with the Knights who say “Ni”, the Knights from the Monty Python film. Monty Python and the Holy Grail, probably. Yes. Yeah, we used to play a lot with our splash screens back then.
[00:16:46] Nafiul: [00:16:46] Yeah. I mean, that’s one of the things I really appreciate about JetBrains, like it’s genuinely a playful place. You can experiment with a lot of things and just sort of have fun with a lot of the products. And if you really believe in an idea and you really want to go and execute it, you really want to have a feature X, Y, or Z, you can go in there and do it. There’s nothing stopping you. So it’s something that’s really unique, I would say. Culture. So, you know, PyCharm it’s a large team and you know, you’ve been in it for a long time. So how has it changed over more than 10 years, it’s been more than a decade?
[00:17:29] Andrey: [00:17:29] Yeah, actually it changed quite dramatically. When I joined JetBrains, we had four or five people on our team at PyCharm. It was mostly developers, Dmitri Jemerov as a team lead of our team who was also an active developer, of course, one of the people who did a lot of stuff, lots of features, fixes and so on. There was also a QA engineer, Yulia Zozulya. And I guess that was mostly it. A few developers: Dmitryi, Katya, and one other Dmitryi as well. There were lots of Dmitryis at that point.
[00:18:09] There is still a
[00:18:10] Nafiul: [00:18:10] lot of Dmitryis here and a lot of Andreys. And a lot
[00:18:14] Andrey: [00:18:14] of Sashas.
[00:18:16] Yes, these are very popular names.
[00:18:18] But then we started to grow and, first we realized that we needed a dedicated product marketing manager to work with our content on social media, to work with our conferences, to talk to potential partners, to better plan releases. And we hired another Dmitryi, Dmitryi Philippov. And basicallyit, resulted in a much more professional environment. And we kept doing things that way. We also, back then, we didn’t have a proper software development process, if you will. We didn’t do a lot of reviews, our testing wasn’t that thorough. We sort of relied more on this EAP program, that we talked about, for testing. But as we grew, we needed more developers, more people to work on our things. And we hired several interns, former students or students back then. And, basically we started growing the team and working on more and more things.
[00:19:27]Nafiul: [00:19:27] One of your students that you work with was Mikhail Golubev, right? Yes. And, for those who don’t know, he’s one of the most fun people to talk to and work with. And he’s actually the person who implemented code completion for f-strings in one of the previous releases, right?
[00:19:43] Right, right.
[00:19:44] Andrey: [00:19:44] So it’s just his crazy idea. He came up with it and decided why don’t we implement this kind of completion? That was it.
[00:19:53] Nafiul: [00:19:53] I mean, Misha is a crazy person. So all his ideas are crazy, but anyways. So looking back at all that, it’s grown so much, it’s made it so big. It’s hard to imagine the size that JetBrains is at right now and how important PyCharm is right now. So going back what are you thinking about going forward?
[00:20:20]What kind of problems do you think are going to be absolutely crucial for us to tackle in PyCharm?
[00:20:27]Andrey: [00:20:27] I think that one of the major areas that we want to cover a lot more, with like lots of details, with attention to lots of details is the area of data science. Data science is really big nowadays. And the amount of features we have for data science is not comparable to the amount of features we have for web development, for example. Even though data science is as important in Python as web development nowadays. We see it from the Python developer survey that we run, together with the Python Software Foundation. We see it from social media, from conferences and so on. It’s really huge. And it’s not properly reflected yet in PyCharm. There is some support, but there will be more
[00:21:22] Nafiul: [00:21:22] Oh, really? There will be more, you say.
[00:21:24] Andrey: [00:21:24] Yeah, I cannot tell you much details about it at this point, but you can definitely expect more from us in this area.
[00:21:32]Nafiul: [00:21:32] Well, awesome. Well, on that note, Andrey, thank you so much for joining us and we’ll talk to you again soon.
[00:21:39]Andrey: [00:21:39] Thank you, Nafiul. Bye.

Categories: Python