Thought I’d just put in a quick shout out for my favorite Python coding tool, ever. WingIDE from WingWare. WingIDE is by far the best Python coding environment I’ve ever used.
I know the first question that comes to mind when looking at the pricetag: "With all the free python IDEs and script editors, why bother buying one? They’re all about the same." Well, thats mostly true. Most python script editors I’ve used are about the same. They provide some mediocre code completion and code folding. Not bad… just not as good as it could be.
For me, its all about code completion. Smart code completion. The kind that reads APIs on the fly, knows what kind of object you’re working with, and tells you what is possible with that object. Its sort of a combination of code completion and an object browser. Visual Studio is renowned for its ability to do this on the fly. Most good python script editors attempt this level of completion but they’re confounded by pythons dynamic typing. I’ll give an example.
[code]
import xml.dom.minidom
def myFunction (doc, element):
pass
[/code]
So, here’s the question. Since python has dynamic loose typing (opposite of static typing), when I try to code with the objects doc and element, how is the editor to know what types of objects they are so it can tell me what I can do with them? It might be able to look at the code that is calling the function, but thats backwards. A function can be called multiple times from anywhere. Perhaps with completely different object types. And its possible both of those calls could be valid. The same problem shows up when trying to figure out what type of object a function returned. There’s no rule that a function always has to return the same kind of object. So how could the system know?
Its at this point that most script editors give up. Code completion stops working the moment you get outside the scope of objects you create yourself within a single function.
With WingIDE, you can hint the system and you get your code completion back. All you have to do is put in an particular type of assert statement. For example:
[code]
import FIE.Constraints
def myFunction(obj, const):
assert isinstance(const, FIE.Constraints.ParentConstraint)
[/code]
from the assert statement on down, code completion now works again. There’s also an added benefit, in that the script will throw an exception should the assertion fail. In python, my script could go for another 20 lines working on the wrong type of object and giving me a vague error without the assert check that cuts straight to the heart of the matter.
WingIDE will also parse source files for documentation and display it for you as you code, eliminating the need to constantly look up the API docs yourself.
Now, I know there’s a hardcore base of programmers out there who say all they need is a text editor and be damned with all these fancy IDEs and their crutches. Well, I simply disagree. I’m sure if you are a coder who has maybe 2 APIs to work with on a regular basis, perhaps that is all you need. But in my job, I am required to learn a new API within a few hours and repeat that as much a necessary. That can sometimes be 2-3 APIs a day. Do I know the full API? No. I know enough to get the job done. And thats what I’m paid to do. For that kind of coding (and scripting, I think lends itself to that kind of coding more that development does) there is no better tool than WingIDE. Call me a weak coder if you wish. I’ll just keep coding, getting the job done faster and better, and keep getting paid to do it. I have a job to do.