Published a few weeks ago, Mastering PyCharm by Quazi Nafiul Islam reveals the best development practises using PyCharm. Relying on his extensive programming experience using PyCharm, in his book Nafiul delves into essential topics of setting up PyCharm for your needs and then getting the most out of its numerous development features, ranging from the editor basics, setting up look’n feel and essential shortcuts all the way to specialized tools for debugging, version control and web programming. ‘Mastering PyCharm’ is recommended for both beginning Python programmers and those coming to PyCharm from other IDEs or text editors.
We seized the opportunity and interviewed Nafiul. Read on to learn more about the man, his programming experience and his vision.
– Hi Nafiul, could you tell us a bit about yourself and your occupation?
I’m a consultant at my day job, what that basically means is that I deal with a whole range of things from helping startups build their MVP to helping companies optimize their applications (mostly web applications), to even being a support engineer and developer evangelist. I try out different roles, because I want to learn more about software development as a process.
– How long have you been using PyCharm and why you find it as the best tool for Python development?
I’ve been using PyCharm for the past three years. I initially started with just Notepad++. What got me hooked initially was the code completion, but what kept me with PyCharm for so long was that you guys kept on bringing out good feature after good feature, and you went further than any other IDE out there. You folks really delivered on making workflow better.
But, what I also must acknowledge, is that PyCharm not only made me more productive because of code completion and python specific tools, but also because navigation with “Go To Action” and the newer “Search Everywhere”. Also, a lot of people don’t know this, but keymaps and snippets are highly customizable to do almost anything you might desire.
– Had you also used other IDEs or text editors? If yes, could you tell us why you switched from them over to PyCharm?
Many. I’ve tried out Emacs, Atom, Sublime Text, Komodo, Wing, PyDev, NinjaIDE and some others. I’ve never switched though for the single reason that none of them provided the kind of code completion that PyCharm did. PyCharm will even parse your docstrings for completions. Even the community edition of PyCharm is better than some paid editors when it comes to code completion. And that’s just code completion, don’t get me started on navigation, debugging and all the other good stuff.
However, I have to say that PyCharm cheats a little here. For example, you guys knew that it’d be hard convincing vim users to use PyCharm, so you went ahead and created an emulator for vim. That’s what I love about PyCharm, you folks know what people want before people even think of wanting it. So for a lot of people who “switch” over to PyCharm aren’t really switching, they can get the functionality they love in another editor as a plugin most of the time. For example, I love Emacs’ Ace Jump mode. After John Lindquist built the Ace Jump plugin, I rarely used Emacs anymore.
– How much time did it take you to learn PyCharm from scratch? Do you think learning tools is a big part of a developer’s trade?
To use it as well as I do now, it took some time. But, people get the wrong idea when I tell them that. You can be very productive with PyCharm with knowing very little, and you can use “Go To Action”, “Search Everywhere” and the Keymap to just quickly use the shortcuts you end up using the most (there’s even a plugin for making you use more shortcuts). Just by using those three things you’d be much more productive than most other IDEs out there. But you’d get a lot more if you learn about how to use VTL to create your own templates. There’s a tonne more to learn as well, but learning those things will make you more productive and less prone to making some rookie mistakes.
Do I think learning tools are a big part of a developer’s trade? Absolutely. Tools matter immensely when it comes to building things, good tools will help you get the job done with minimal frustration, you’ll enjoy your work more for it too.
– What are your favorite PyCharm features that you can’t imagine working without?
“Search Everywhere”, “Go To Action”, The Debugger and TypeScript stub support for JS code completion (if you use the professional version).
– As a bare minimum, what subsystems and features should new PyCharm users learn first of all?
I think of this as a tree, as I’ve alluded to before. Learn how to use the keymap (which will help you with shortcuts), then learn how to use Search Everywhere, and then learn to use the debugger. I assure you, you will be orders of magnitude more productive if you go down this path.
– Every serious project is not only about Python. It often involves testing, isolation of environment, deployment, version control, and database management. How does Pycharm help manage all this stuff?
– What other developer tools help you be more productive? Would you recommend any to other Python developers?
Dash. It basically allow you to search documentation offline very quickly. Probably *the* most useful tool for me other than PyCharm. Dash is for Mac OS, but there is a free alternative called “Zeal”, and it works on pretty much any platform and uses the same doctests that dash does.
– There are several Web frameworks backed by Python, including Django, Flask, Pyramid, and Google App Engine. What are your personal and professional preferences?
Flask. Everything else feels over-engineered, too complicated or designed to build only one kind of web application. Flask is beautifully designed, has a whole host of plugins, and is also very easy to extend.
– There are two major versions of Python currently co-existing: 2.x and 3.x. What do you think about the current state of Python? What’s your take on the future of the language?
I don’t really see it like that. I see fast python and slow python. In other words, if you’re focusing on the language divide, you’re missing the bigger picture. Right now, Python needs fast implementation, and so you’ll see a lot of implementations like pypy and pyston try to solve this problem. They are both mostly focused on python 2. So, in the future, whatever implementation solves the speed problem and provides good stability will win, and whatever version of the language it supports will therefore win. In the world of software, speed talks, and whatever is fast with a good level of abstraction to get the job done will win in the end.
– What do you think makes Python unique as a language?
It feels like writing pseudocode most of the time. It’s just so easy to read. I’ve used plenty of other languages, but nothing feels as readable as python.
– Please recommend two other books on development you enjoyed reading recently or just consider important.
I learned a lot from the Algorithm Design Manual. It is by far the best book out there if you want to understand and use algorithms (and data structures) practically. If you’ve tried reading CLRS and hated it, this is the book for you.
I would highly recommend “What If” by Randall Munroe. I don’t know what you’ll take away from reading this book, but you’ll definitely enjoy reading it.
– Thank you for the interview, Nafiul!