TextMate vs AptanaStudio
integratechange.com
integratechange.com
I would honest-to-god rather be using Notepad then Aptana. Being slow loading text files is just unacceptable.
If something has a steep learning curve, it's easy to learn to use. Look at the vi graph: Assuming the x axis is time and the y axis is knowledge, according to its chart you know how to use virtually all of vi as soon as you start using it.
Things that are hard to learn have shallow learning curves: it takes a long time to become proficient.
vi is easy, you only need to know ~5 commands to be useful in it.
But ofcourse when read like that it lacks the absolute time reference (notepad can be learned in a day whereas vi takes months) and generally yes, this is just a tongue-in-cheek sketch. - Still, not too far from reality, imo.
I've been using Ruby Mine some lately and am pretty impressed. Has a debugger that works well, auto-completion, rake integration, click thru to declaration, etc.
It's not going to be free ($79), but given JetBrains track record with IDEs I think it's a good investment.
I tried NetBeans last year and it seems promising, but haven't used it in 6 months.
As he says in the post, that kind of decision ends up being very personal anyway. I settled on Textmate recently but I'm not sure that will be the case forever. (personally, I'd go for something in between: the speed and simplicity of Textmate with functions like the navigation between classes, auto-completion but without the slowness shown by Eclipse et al)
It's a good enough editor, but I wish it'd just stop trying to do things for me (Inserting closing brackets/quotes, auto-indenting, etc etc). It's taken a long time to disable all these irritations and I'm not sure I have them all yet.
I feel like you're missing the point of TextMate. These things might seem like annoyances now, but they're there for a reason. Once you get the muscle memory for TextMate it'll become an extension of your body, like a prefix-keyless emacs or vi.
Your profile says you're not new here, so I have to assume you know what you're talking about -- I don't want to get the viemacstextmate holy war started, but if you're from one of the other editors, give TextMate a chance in terms of adapting to it, and I think you'll be surprised. Don't try and force it into the emacs mold; it's not emacs, it's TextMate, and it's loved widely for a reason.
My gripes come for instance when I go back to do something, and TextMate adds in extra idiocy eg
a = 9+6
// Oops, need to double all that - (9+6)*2, lets bracket it up...
a = ()9+6
// WTF TextMate added a close bracket that is clearly useless
My remaining gripe with TextMate is that I have soft tabs enabled, so pressing tab inserts 4 spaces. But when I press left arrow, it skips over 4 spaces at a time, or sometimes just 1 space if it's not at a tab boundary! I want it to only ever move by one space... (Any ideas welcome on this one).I've disabled all the 'insert extra random characters' shenanigans now.
As for moving around, I just use shortcuts such as ALT+left/right or CMD+left/right (CTRL+a/e).
And you bought TextMate because... it's cool? I seriously don't understand, why you would buy TextMate, if you don't like using the very things that make it great.
Auto-complete is a lovely way to learn a new language.
Yes, you may see results quicker, but I've found all that happens is you become reliant upon auto-complete to do the thinking for you. All too often I have seen people use auto-complete as a tool to help them just mindlessly code away rather then taking the time to actually figure out what it is they are trying to achieve. Forcing yourself to actually look at the API and type out a function name cements a concept so much more then autocomplete.
Agreed. Back in college I remember reading a book about effects of various computer aids on our cognitive development [the users in question were mostly teenagers/students]. Programmers were mentioned too. Relying on compilers to catch syntax errors or auto-completing IDEs to suggest method names we're basically refusing to pay attention/memorize things, which ultimately leads to a much poorer skill quality. Ever since then I've been training myself to expect my code to compile at 1st try, i.e. I would do a quick reviews before hitting the "build" hotkey.
From my experience: I think most Microsoft developers will feel completely lost if left with a command line compiler and notepad.exe Even if you take coding out of the equation, many don't have a good understanding of what makes an executable, i.e. they wont' be able to build a project without an IDE.
Where auto complete comes in is when one wants to port knowledge from one programming language to another. For example while I'm a computer science student I moonlight as a PHP developer and I don't really care to memorize PHP's perverse (idiosyncratic if you prefer) functions. But I know that array_ CTRL-Space in eclipse will tell me that array_filter takes the list as it's first while array_map takes it as it's second argument. One can blame that on PHP's designer but at the end of the day auto complete saves me from memorizing something I really don't need to know. (Ok now that I've looked it up and written it down that bit of knowledge will probably stay with me forever)
Haskell is way more consistent in that regard, but I still couldn't survive without Hoogle.
And Java without auto complete takes not only twice the time to write but would also force me to remember that Collection is in java.util while Iterable is in java.lang. I think anyone would be hard pressed to explain to me why I need to know that.
So I think I made my case that skills are not dependent on rote learning of a function's argument order or a class's namespace.
Furthermore it seems to me that auto completing IDEs actually help with remembering often used "phrases".
But I agree with your point about learning. The trade-off is always that it takes more time to learn without help than with but later, one tend to rely too much on the help. The difficult thing is to know how to go back to basics at some point.