One Year Later: Review of PyCharm 2.7 from a Vim User’s Perspective
andrewbrookins.com
andrewbrookins.com
It's priceless. The same benefits you mentioned, while being really useful in exploring model associations, Rails API autocompletes and more. I used to use Sublime Text, but really; when I'm working on a big project, I _want_ those extra features to let me know if I'm mucking things up by using the wrong models or missing associations or exploring the codebase.
Money well spent.
You could buy IDEA and run RubyMine and Pycharm as plugins. ;)
What i think he really missed in features though:
- VCS integration is really really good
- Plugins for the Atlassian suite (never open Jira in a browser again!)
- virtualenv support
- remote debugging and execution and uploading support
- vagrant support
The only outstanding gripe I have is the lack of full PyQt support in the autocompletion / intelligent import features. I know it's a hard problem and there are hacks, but if they could fix it for good it'd make it The Only True Python IDE for me.
I am considering buying IntelliJ next time they have such an offer..
I tried remote debugging and Vagrant tools and haven't used them very often since, so I didn't include them in the review.
I don't use Atlassian software except BitBucket repos, which the VCS plugin (and my command-line Git-fu) seems to handle fine.
However, I do use PyCharm's virtualenv support all the time, and it's pretty nice. Good point there and I should probably add something about it in the project management section.
It's amazing though how complicated an IDE can be to develop. I'm not surprised JetBrains really specializes. TeamCity, while good, does not approach the sophisticated of something like PyCharm.
Conversely, the joke at WWDC was that Xcode 5 brings Apple's native tools into the year 2011.
See: http://www.jetbrains.com/pycharm/docs/PyCharm_ReferenceCard....
vs: http://www.jetbrains.com/pycharm/docs/PyCharm_ReferenceCard_...
You'll notice a few major differences, like control-N on windows == apple-O on a mac.
Just weirdly inconsistent and irritating when you're jumping back and forth between different machines.
I'll totally +1 for the terribly average support for themes too. Copy the xml files into my colors/ folder by hand? Really...?
Other that that it's fantastic though~
http://www.reddit.com/r/Python/comments/182siy/pycharm_27_is...
-Dawt.useSystemAAFontSettings=on
-Dswing.aatext=true
-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
to the pycharm64.vmoptions file.And now that I think about it, I wonder if it had something to do with my KDE setup and how it handles GTK stuff. That could be another thing that changed for me that fixed it. Because it did get better recently but I don't know why.
The issue is with Swing, not JetBrains products alone and I sympathize with them but I can say it was bad enough for me that I just couldn't use their stuff on my primary work machine.
I run Fedora 18 with KDE on a 64 bit machine. When the new Android IDE came out based on IDEA I downloaded it to take a look at it. I opened it up and much to my surprise the fonts looked pretty good. I opened up PyCharm and it looked good too.
It had been a while with a lot of updates to Fedora including KDE, Java and so on. So I don't know where the problem got resolved but it seems pretty good now.
I think it is worth noting - I never had a problem on my 32 bit system running the same OS and what not. This was also an issue for all my swing apps on that machine - not just the JetBrains stuff.
but if you use jedi and by extension things like youcompleteme[2], vim-dispatch etc. the only thing that's really missing is debugging support and refactorings.
omnisharp[3] does pretty cool refactorings with nrefactory. and the author youcompleteme is interested in having youcompleteme work as some sort of ide daemon, where you could for example add stuff like refactorings as ide features.
vagrant and virtualenv support sounds interesting though.
[1] http://gleamynode.net/articles/2280/
It does offer awesome VCS integration features. It does offer a powerful debugger. And it gives you an JavaScript IDE that doesn't suck. VIM just cant handle modern JS code.
PyCharm also gives you PEP8 and JSLint support. And its intelligent autocomplete is awesome and makes programming in dynamically typed languages a breeze.
OP just couldn't be bothered to give the product a chance. While he is smugly juggling dozens of shell instances I let the IDE do the work for me.
Jetbrains is making the best IDE around.
- I used the pycharm UI incorrectly -- I didn't tell it to do what I intended to tell it to do.
- pycharm is not configured for my project correctly
- there is a bug in pycharm
Testing and debugging software is hard enough; it's best to choose a work environment that minimizes the number of possible explanations for what has gone wrong and that means running `manage.py whatever` directly from a shell. I can see that for certain classes of problems one would be confident that the IDE was working correctly, and you could debug in pycharm with perhaps greater power than using pdb in a shell. But if there's a possibility that the problem is infrastructural -- e.g. with your test runner, or the test invocation -- and not actually in the application code, then you'd want to work with python/django directly, not with a complex GUI application. In the projects I work on, that possibility is always there :)
But there's no doubt about it, learning to use an IDE is an investment. It's not needed for "hello world" but pays off when using complicated API's or refactoring a large application. And nearly all the API's we use these days are complicated; languages that don't have large standard libraries aren't used much.
The irony is that people who don't use IDE's spend large amounts of time configuring their text editors. How much of an investment is it to learn vi?
Well, at least you could quit it easily. New user of vim would be a perfect random generator at this moment. I don't believe one can judge a tool one didn't use for longer period of time.
Python doesn't really have problems similar to Java, so Java-style IDE doesn't seem necessary, while the language design makes some of the best features of Java-style IDEs hard to implement (but my last experience with similar IDEs was few years ago, so that might be fixed problem).
Now, the problems with python (concurrency and general slowness) are impossible to fix with IDE, so they might not be necessary. Still, IDEs are _integrated_ and thus allow you to set up development environment quickly and efficiently -- think about what if you moved to different computer, or even to different platform? Your shell scripts might not survive that, but IDE would. And being integrated has other advantages -- yes, any developer can (and should be able to) use git directly from command line. But editor that shows you which lines have changed since last commit, and who edited this part of file and when is useful. You can do that with git from terminal, but just seeing the former in editor, and getting the latter just by moving the mouse to the right spot can be helpful.
Of course, lot of the things IDEs do are about team cooperation, and won't really help single developer.
> Rope-based completion was always unreliable, slow or both.
I haven't used rope. Is the author wrong about this?
As for slowness? only on init. After that, it's as close to instantaneous as it gets.
I really like Jetbrains products though, and when I am on Windows those are my goto tools as I don't have the UNIX user space to leverage alongside Emacs or VIM.
They provide a great environment for those languages that don't have great support outside of commercial IDEs or for people turned off by Emacs/VIM.
My first experience was using IDEA for Java (both VIM and Emacs support for Java is an area where they are weakest somewhat surprisingly) and I was very happy with IDEA, so I tried PyCharm later on when I was on Windows and using Python there.
However, Emacs makes use of Python's REPL much more fluently than what I've experienced in PyCharm where the IDE has no interaction with the REPL outside of user engagement.
PyCharm in comparison seems entirely ignorant that it has a REPL it can exploit and integrating tightly with it would pay dividends.
Coming from Emacs where REPL integrations tend to have at least some sense of intelligence about them this was jarring.
PyCharm's intentions though are also very nice and isn't something I've found in Emacs or VIM to the same extent.
The IDE still has the same trait I've seen in Eclipse, VisualStudio, XCode, and Jetbrains' products though where it makes determining what the project entails into an overly complicated affair though, an area where VIM and Emacs have less red tape to get into.
There seems to be a great deal of improvement in that area for tools to get into where they are smarter without requiring so much user facing bureaucracy up front.
On one hand we have Emacs and VIM that largely pretend there is no such thing as a project and that tools could perform actions on that as a unit.
Then on the other side IDEs want to recognize that a project is an actionable unit and that it is a unit but then engage in 20 questions just to get started on a project and even after that get easily confused when moving files around.
Anyways, as far as IDEs go, Jetbrains' products have been the most enjoyable to use.
I do wish they were full open sourced though so that contributing improvements voluntarily wasn't a comparatively precarious trade off compared to VIM or Emacs or whatever open source tools you use.
Also, I wish IDEAVim was a lot nicer support of VIM's features than what it currently has so that I didn't have to want for some functionality at times.
Both the Emacs and VIM or typical IDEs have a lot of room for improvement in general though, tooling could be a lot nicer and homogenous across languages to the extent possible.
I really wish anyone would run with Bret Victor's idea of closing the feedback loop in programming (http://vimeo.com/36579366) adamantly and also implement Douglas Crockford's idea of scope based coloring everywhere (https://www.youtube.com/watch?v=dkZFtimgAcM), the latter of which I really want in functional languages like Haskell/OCaml.
Those two alone would add significant utility to the available tools.
After seeing Crockford's scope based coloring idea syntax based coloring seems incredibly superfluous even though I use it myself.
It really feels like we are in a tooling stone age with a great deal of retreading and regression in some respects despite having a lot more man-months thrown at the area.