Looks like a nice implementation, and I really love JetBrains products, but for me I just don't 'get' this (or most code completion in general).
For me, and it is a personal thing, actually writing code - that is physically typing braces etc. is not the time consuming part of coding. Far, far more time is spent thinking about my code than actually typing it. Shaving off a few seconds when working in my editor feels like an optimisation too far, especially if it essentially means learning new syntax.
Like I said, it's a personal thing - I know others have good reason to love code completion tools. Now if someone could come up with something like this for when I'm writing in my notebook....
Autocomplete/parameter help isn't about "hey, look fewer keystrokes!". It's about context-aware lookup of what you need, and avoiding stupid mistaks (reordering parameters, typos in method names).
The time it takes to write a the first few characters of a method name and then hit the completion key is a tiny amount smaller than just typing the method name outright. But that isn't the point: if I didn't have autocomplete, I'd alt+tab to a browser with class documentation or start searching in the code for a previous invocation of a method with that name I only vaguely remember.
With autocomplete, I don't have to remember variable/property/method names, I can either list them or see a list that begins if I just remember a prefix. This is less unnecessary state in my head and thus more time to think about the actual problem.
It's an absolutely enormous difference in time spent, and considering the time it takes to context switch back to where you were, I'd say it saves me hours every day.
I use code completion all the time, even when navigating APIs I've written myself -- not because I don't remember what they do, or what the functions and methods are called, but because it serves as a check that what I expect to be doing is what I'm actually doing. As a simple example, say I need to write `user.getAddress()`. Now, it doesn't pain me that much to type 'getAddress', and I'm pretty certain that the method that returns the user's address is called 'getAddress'. But if code completion doesn't offer that method as a suggestion, I'm going to do a double-take because I probably have the wrong object.
I do the same thing on the command-line: if I'm going to cd into a long path, I'll often forget I've typed cd and try to tab-complete file names instead of just directory names. When hitting tab refuses to autocomplete the file (it only completes directories), I'm forced to rethink what I'm doing before I finish typing an invalid command.
I think code completion would be enjoyed the most by those who don't know how to touch-type, since for them inputting the code is quite time-consuming.
But working with others (and occasionally using it myself), I've also found that code completion tends to encourage a "I think this is the right method/class/variable because it's in the list, I'll use it" type of thought process; and while it makes for easy generation of code that has no syntax errors, it also feels like it increases making logic errors since there is less thinking about "is this really want I want to write here" - it tells you what you can write here, and the instinct is to just pick the one that seems to feel like it would work.
Without completion I already code in the 100-120wpm+ range (and can comfortably write prose in the 150-160 range), so I don't think I need to make that any faster...
I respect your personal opinion, but I find that these little things make programming a joy. Less time spent fixing and changing little things is more time you can spend thinking about the problem.
Perhaps completion is not the most important thing, but surely it is useful - or not detrimental. It's something that, for some languages, can be done automatically by your computer instead of yourself. I'm all for the computer doing stuff for me. Be it so small as finishing the method name so I don't have to type it, listing the method set for me so I don't have to look it up.
The more the computer does, the better.
of course some argue otherwise, usually blaming IDEs as being a crutch for poor programmers. Surely it can be, but otherwise I say it's a very convenient tool.
Less keystrokes make my fingers and wrists happy. That said, I also do not care about "writing code" because if I could have a programming language that could read my thoughts to figure out what I wanted to create I would be just as happy with that.
This is for enterprise Java developers I guess. Interfaces, templates, whatever, ... thousands of lines of code that does nothing so one guy at the end of it can write a few lines of logic.
Or even better for testers. Lots of code. Some initial thinking and then you need to write 50 lines of something before you have to think about it again.
I totally agree with you. For me more important would be to improve the way how I solve problems, how I think about problems. People tends to pay too much attention to the speed of coding.
I wonder if any tests were made about how much time is spend to actual thinking versus coding the idea? Which area is more worth to work on?
I have to disagree, code completion allows my typing to keep up with my thinking. Sometimes I have a "picture" in my head about how to implement something and the only thing slowing me down is how fast I can get it into code.
Holy hell, that's awesome. I was reading through the blog and saw the headline, immediately went to check out chronon and was about ready to throw down the $60 for a personal license. Now I guess I don't have to :)
What excites me is the fact that when IntelliJ gets something cool like this, that usually means its other language IDE's are not far behind (RubyMine for instance..)
AppCode is the reason I still have hair. If I had been using XCode for the last 2 years I'd have it all pulled out by now. Or I might have given up on iOS altogether.
I often write code backwards using the IDE capabilities. Say I instantiate an object, I'd write "[[Foo alloc] init]" (most of that auto-completed), then use the keyboard shortcut to assign it to an appropriately classed and named local variable.
It just seems redundant to write all of "Foo *foo = [[Foo alloc] init]". For one you're typing the class twice - clearly redundant. Secondly, this is a temporary local variable, it doesn't need a custom name. It shouldn't have a custom name.
It's not so much about typing speed, more like a general dislike of redundancy.
The theorem is the more redundant the language, the more IDE help it requires. Objective-C is the worst I know. Although they're adding more and more layers to the compiler to make it less so.
This is really cool. One problem (yeah I know, Vim and Emacs commands are useful here too!) I always had was going forward is easy in a text editor, but going backwards a few characters, or to wrap something like this, is inconvenient.
When I saw the headline the first thing I thought was April Fools had arrived early in the form of a Forth IDE.
It is an appropriate name however. After dabbling in Forth for fun, I became very aware how fleeting and unnecessary local variables are.
Since then I use these kinds of 'completions' by using the extract variable refactorings, and various intent transformations - they added a syntax to existing tools.
IntelliJ is great, but I personally have found this feature to be minimally helpful and non-intuitive. I hope others benefit more than I have. Perhaps I shouldn't knock it, but I think that the time could have been spent on more worthwhile efficitncy improvements.
[+] [-] benjamta|12 years ago|reply
For me, and it is a personal thing, actually writing code - that is physically typing braces etc. is not the time consuming part of coding. Far, far more time is spent thinking about my code than actually typing it. Shaving off a few seconds when working in my editor feels like an optimisation too far, especially if it essentially means learning new syntax.
Like I said, it's a personal thing - I know others have good reason to love code completion tools. Now if someone could come up with something like this for when I'm writing in my notebook....
[+] [-] alkonaut|12 years ago|reply
The time it takes to write a the first few characters of a method name and then hit the completion key is a tiny amount smaller than just typing the method name outright. But that isn't the point: if I didn't have autocomplete, I'd alt+tab to a browser with class documentation or start searching in the code for a previous invocation of a method with that name I only vaguely remember.
With autocomplete, I don't have to remember variable/property/method names, I can either list them or see a list that begins if I just remember a prefix. This is less unnecessary state in my head and thus more time to think about the actual problem.
It's an absolutely enormous difference in time spent, and considering the time it takes to context switch back to where you were, I'd say it saves me hours every day.
[+] [-] cytzol|12 years ago|reply
I do the same thing on the command-line: if I'm going to cd into a long path, I'll often forget I've typed cd and try to tab-complete file names instead of just directory names. When hitting tab refuses to autocomplete the file (it only completes directories), I'm forced to rethink what I'm doing before I finish typing an invalid command.
[+] [-] userbinator|12 years ago|reply
But working with others (and occasionally using it myself), I've also found that code completion tends to encourage a "I think this is the right method/class/variable because it's in the list, I'll use it" type of thought process; and while it makes for easy generation of code that has no syntax errors, it also feels like it increases making logic errors since there is less thinking about "is this really want I want to write here" - it tells you what you can write here, and the instinct is to just pick the one that seems to feel like it would work.
Without completion I already code in the 100-120wpm+ range (and can comfortably write prose in the 150-160 range), so I don't think I need to make that any faster...
[+] [-] jamesrom|12 years ago|reply
[+] [-] AYBABTME|12 years ago|reply
The more the computer does, the better.
of course some argue otherwise, usually blaming IDEs as being a crutch for poor programmers. Surely it can be, but otherwise I say it's a very convenient tool.
[+] [-] meddlepal|12 years ago|reply
[+] [-] taude|12 years ago|reply
When I had it available to me, I'd often use it to explore the class or object I'm working with.
[+] [-] rplnt|12 years ago|reply
Or even better for testers. Lots of code. Some initial thinking and then you need to write 50 lines of something before you have to think about it again.
[+] [-] thorn|12 years ago|reply
I wonder if any tests were made about how much time is spend to actual thinking versus coding the idea? Which area is more worth to work on?
[+] [-] bdavisx|12 years ago|reply
[+] [-] melling|12 years ago|reply
http://threevirtues.com
[+] [-] pkulak|12 years ago|reply
[+] [-] stevoski|12 years ago|reply
If I had a baby for every time I've said that, I'd probably have a sizeable brood by now.
[+] [-] Glide|12 years ago|reply
[+] [-] kodisha|12 years ago|reply
[1] http://youtrack.jetbrains.com/issue/WEB-11244
[2] http://youtrack.jetbrains.com/issue/WI-22350
[+] [-] fallinghawks|12 years ago|reply
[+] [-] jamesrom|12 years ago|reply
[+] [-] egeozcan|12 years ago|reply
[+] [-] unknown|12 years ago|reply
[deleted]
[+] [-] muteh|12 years ago|reply
[+] [-] Ygg2|12 years ago|reply
Also it seem Chronon debugger is free with IntelliJ IDEA 13.1 Ultimate http://blog.jetbrains.com/idea/2014/03/try-chronon-debugger-...
[+] [-] snuxoll|12 years ago|reply
[+] [-] Karunamon|12 years ago|reply
[+] [-] nikster|12 years ago|reply
AppCode is the reason I still have hair. If I had been using XCode for the last 2 years I'd have it all pulled out by now. Or I might have given up on iOS altogether.
[+] [-] Windwaker|12 years ago|reply
[+] [-] nikster|12 years ago|reply
I often write code backwards using the IDE capabilities. Say I instantiate an object, I'd write "[[Foo alloc] init]" (most of that auto-completed), then use the keyboard shortcut to assign it to an appropriately classed and named local variable.
It just seems redundant to write all of "Foo *foo = [[Foo alloc] init]". For one you're typing the class twice - clearly redundant. Secondly, this is a temporary local variable, it doesn't need a custom name. It shouldn't have a custom name.
It's not so much about typing speed, more like a general dislike of redundancy.
The theorem is the more redundant the language, the more IDE help it requires. Objective-C is the worst I know. Although they're adding more and more layers to the compiler to make it less so.
[+] [-] ctolsen|12 years ago|reply
[+] [-] agumonkey|12 years ago|reply
[+] [-] wtbob|12 years ago|reply
Neat idea, reminds me a bit of Reverse Polish Notation, Forth & friends.
Now it's got me wondering about a text editor built on RPN lines, kinda like an inverted emacs + ed...
[+] [-] odonnellryan|12 years ago|reply
[+] [-] grdvnl|12 years ago|reply
[+] [-] jonesetc|12 years ago|reply
[+] [-] acc01|12 years ago|reply
[+] [-] emp|12 years ago|reply
It is an appropriate name however. After dabbling in Forth for fun, I became very aware how fleeting and unnecessary local variables are.
Since then I use these kinds of 'completions' by using the extract variable refactorings, and various intent transformations - they added a syntax to existing tools.
[+] [-] NextUserName|12 years ago|reply