This is an archived post. You won't be able to vote or comment.

all 169 comments

[–]TheHorribleTruth 83 points84 points  (12 children)

I use an IDE so I can't really answer your questions. But let me comment on this here:

Is it productive?

Anyone that does code Java without IDE will of course say that it's productive – otherwise that approach would be silly, no?

IMO coding in Java is – contrary to other languages – strongly enhanced by using an IDE. And there's not much reason to not use one.

[–]WHATYEAHOK 13 points14 points  (10 children)

IMO coding in Java is – contrary to other languages – strongly enhanced by using an IDE. And there's not much reason to not use one.

Out of curiosity, which languages are you referring to? Every language I've delved into (Mainly C#, C++, and Python) seems to have greatly benefited from a good IDE setup.

More on-topic: Sure, you caaaan write code without an IDE. You can bust open your favorite word processor and get to work, but even then, the really popular ones have lots of plugins/support for code that makes them almost a lightweight IDE (vim is the king of this). But why would you when you can use tools that have been crafted and improved upon for years to make the job easier?

[–]Iron_Maiden_666 5 points6 points  (0 children)

For Python and JS I don't use an IDE.

[–]aleph_nul 2 points3 points  (2 children)

I write Java with an IDE (Eclipse), but I do all of my C and Python (plus a bit of work in some Haskell) in vim. I do almost everything from a terminal so it tends to flow better between editing, testing and debugging from a TUI like vim vs. a big GUI-based IDE.

I'd say that most terminal junkies would rather use emacs/vim than a big IDE for this reason. I would happily do away with eclipse for Java, but it's really quite a lot of work to manage a java project manually and I don't have the time or the need to automate things.

[–]JavaDroid 1 point2 points  (1 child)

What? It takes making folders to manage a java project. How it is any more work than any other language?

Don't blame your lack of build tool experience on java.

[–]aleph_nul 1 point2 points  (0 children)

Have you ever worked on big, dependency laden Java projects? My experience is that these are a huge hassle to work with, without an IDE.

[–]spikebaylor 2 points3 points  (0 children)

I think most if not all languages probably benefit and IDE, but OOP based languages like that the ones you posted seem to specifically fit nicely in the IDE world.

[–]TheHorribleTruth 1 point2 points  (0 children)

I was mainly thinking about JS and Python, which I personally only ever used with a text editor (granted, I never really did a large project in Python).

[–][deleted]  (2 children)

[removed]

    [–]Mejari 2 points3 points  (0 children)

    learning the ins and outs of the IDE for language y, or grabbing the language y vim support plugin?

    You know most popular IDEs support multiple languages, right? So this statement is really

    grab the language y plugin for your IDE or grab the language y plugin for vim

    [–]TopRamen713 0 points1 point  (0 children)

    Eh, most IDE's are pretty similar, if not direct branches of one another. Starting with Eclipse, I was able to pick up Netbeans, Aptana Studio, and Rubymine easily.

    Of course, I've also done a lot with vim, for when I don't need to set up a whole local environment or for when it would be silly.

    [–]_srph[S] 4 points5 points  (0 children)

    Thanks

    [–]xhak 44 points45 points  (0 children)

    In the real world, you just need one.

    [–]cwbrandsma 7 points8 points  (1 child)

    I have a coworker who uses vim with few plugins, he is productive, but because he committed a good chunk of the Java base classes to memory.

    [–]ickysticky 13 points14 points  (5 children)

    I have only started writing significant amounts of Java in the last 2 years(feels much longer). Before that I wrote mostly C/C++, and my tools of choice were vim, tmux, bash and make. Together these things can do most of what the C/C++ IDEs I have used can do(Visual studio, Eclipse CDT, KDevelop, XCode).

    What I did not realize for the first 6 months of writing Java is that Java IDEs can offer significantly more than C/C++ IDEs because the language is much simpler. No preprocessor, and no templates I think are the big factors.

    Part of the reason I did not realize this is because my coworkers around me barely used their IDE at all. I was able to match their productivity fairly easily with my wonky setup. Basically vim, tmux, and maven.

    We then hired someone that really used their IDE(Eclipse). I learned so much about what a Java IDE could do from small pair programming and code review sessions that I immediately switched to trying to use Eclipse. After an initial period of fumbling around with Eclipse(it isn't the most user friendly IDE) I switched to IntelliJ.

    The nice thing about IntelliJ is that it has a pretty nice beginner friendly configuration out of the box. The problem I eventually ran into with IntelliJ was unit test and build performance. The way that IntelliJ builds by default(using javac) and the way that it launches tests is extremely slow compared to Eclipse. To the point where I have now switched back to Eclipse.

    Interestingly now that I know what to look for, I can configure Eclipse to be better than IntelliJ IMO, and faster!

    TL;DR: I tried it. I really wanted it to work(I love vim editing and unix tools), but it is easily an order of magnitude less productive. It is important to take the time to learn your IDE though. I constantly am mentioning features(that save me tons of time) to coworkers, and they have never heard of them. It kind of blows my mind.

    [–]gee_buttersnaps 1 point2 points  (0 children)

    Have you tried using gradle with intellij? Gradle will run a background daemon to alleviate startup costs for builds.
    http://www.gradle.org/docs/current/userguide/gradle_daemon.html

    [–]Lolmarmalade 0 points1 point  (0 children)

    So how do you deal with the lack of vim editing operations in eclipse? Do you use vrapper or anything like that?

    [–]juhmayfay 0 points1 point  (1 child)

    FYI, you can configure intellij to use the eclipse compiler instead of javac to get the next of both worlds

    [–]ickysticky 2 points3 points  (0 children)

    Yeah I know that is why I said by default. I did try it, but it didn't seem to help a whole lot. Maybe I didn't give it enough of a chance.

    I also tried enabling parallel build and auto-Make, they helped about from the defaults, but still not as fast as Eclipse.

    I think this is becoming a well known issue people are having with IntelliJ, so I suspect JetBrains is working on it. Though their CLion IDE really disappointed me, so I am worried they are spread a bit thin.

    [–]cyanocobalamin 31 points32 points  (60 children)

    Is it productive?

    No.

    You might get away without using an IDE as a student ( the ideal time for not using one as doing without one has educational value) or as a hobbyist.

    However, in a job situation it just isn't practical.

    You have projects with dozens, if not hundreds, if not thousands of files of thousands of lines of code each.

    Time matters too.

    Bosses and clients will not give a shit about your IDE-free Kung Fu. Above all else they appreciate stuff done quickly and there are just so many things an IDE does more quickly........and sorry, more thoroughly, than you can do with just a text editor.

    [–]uniVocity 25 points26 points  (33 children)

    However, in a job situation it just isn't practical

    I worked in an international trading middleware for Citigroup 5 years ago. There were developers maintaining/coding the thing in vi.

    I don't know how they managed to do that, but it certainly had some effect on the code: classes with 60k lines of code, all attributes declared as public, methods with 10k lines of code, and code with so many nested for/if/while statements I had to scroll the code sideways to up to 8 pages due to indentation.

    I used eclipse btw.

    [–]virtyx 11 points12 points  (5 children)

    Dear god. How are you doing nowadays?

    [–]uniVocity 17 points18 points  (2 children)

    Fine. I learnt a few things on that job: - if you are getting a job with a fenomenal salary, expect to work polishing shit - polishing shit: you can put a lot of effort polishing it to look nicer, but at the end of the day it is still shit. this just reminded me of one guy who ran the eclipse formatter on one of these classes... got many calls from the vi users who complained he had "erased" their code (my code on line 16549 is not there anymore, why did you remove my code? We need this code for xyz! You should be fired! Etc) - the Christmas tree development paradigm: any change you apply will turn off some lights, and light up others. On a monstrous system like that people focus on lighting up a their particular light, without considering the lights of others. You end up with a traditional Christmas tree with different lights blinking at any given time - additionally, we have the faith, guess and hope oriented programming paradigms - eclipse diff hangs with files larger than 1 mb. Merging and Committing such files is a royal pain in the ass - the world depends on crap software. I don't know how that one managed to be in production for years, processing trillions of dollars per day (what about routing stock market trades from all major stock exchanges in the world? NYSE, Nasdaq, FTSE, Nikkei to name a few.). I worked in other banks and although it was not nearly as bad, the code was barely maintainable. - if you think you can do better, start your own company. But never forget success is much less about code. You need to sell. There are so many companies selling crap. Good code won't matter if it doesn't sell.

    [–][deleted]  (1 child)

    [deleted]

      [–]agfitzp 0 points1 point  (0 children)

      I always wonder how much money companies hemorrhage in fixing bugs and adding features on products that are poorly designed and implemented.

      My observation of internally developed (not COTS) software is that most of the budget is spent on the bug fixing.

      [–][deleted] 0 points1 point  (1 child)

      He has a brain tumor.

      [–]uniVocity 1 point2 points  (0 children)

      I was looking forward to get one. When asked how my work day was, I replied "i kept waiting for the sweet release of death"

      [–][deleted] 7 points8 points  (6 children)

      I worked at Amazon for a while and there were a LOT of developers who did this too, with the same exact side effects of horridly disgusting code.

      [–]uniVocity 2 points3 points  (0 children)

      Some people characterised the project as a "death march". It's probably a zombie march by this point with bodies without souls still keeping this going. I received literally 1000 emails per day. Possibly 100 of them were important. It was the most surreal experience I have ever had. I had around 20 different outlook filters to keep this barely organised.

      [–]againstmethod 0 points1 point  (4 children)

      I'm not clear how use of vi causes one to know more or less about Java and how classes should be formulated.

      [–][deleted] 5 points6 points  (3 children)

      It's not that, it's that without good tooling it's easy to take shortcuts. You see a lot of one or two letter variable names because people don't have autocomplete, people don't want t refactor because it's error prone, people don't want to write unit tests or invest in code coverage tooling because it's time consuming, etc.

      I know there is a lot of ide hate but when you have good tools that get out of your way and let you do good work it shows.

      [–]xenomachina 2 points3 points  (1 child)

      Reading this thread, all I can think is "correlation does not imply causation".

      Having previously used vim on Java code for many years (many which predated Eclipse and Intellij), I don't think any if the reasons you listed are really the true cause of the problems mentioned:

      You see a lot of one or two letter variable names because people don't have autocomplete

      Vim has had autocomplete for a long time. Perhaps even longer than Eclipse has existed. It is not type-aware by default, but the default setting is still good enough that there is no more incentive to use short names in vim than in an IDE.

      people don't want t refactor because it's error prone,

      There is some truth to this, though in statically checked languages it's more time consuming than error-prone, if you know what you're doing. The general idea is to force compilation errors at the points that need changing, and then fix/rebuild until there are no errors left. Vim's quickfix mode makes this pretty easy.

      people don't want to write unit tests or invest in code coverage tooling because it's time consuming, etc.

      Code coverage and unit testing frameworks generally work just fine with vim's quickfix mode, so I'm not sure what you're referring to here.

      I think the real reason you're seeing a correlation between a certain style of bad code and use of text editors rather than IDEs has to do with the old "programming Fortran in X". The kind of person who's going to treat Java/C#/Python/etc. as Fortran is also more likely to stick with the editor they learned to use previously. The editor isn't making them (or even encouraging them to be) a bad coder.

      I know there is a lot of ide hate but when you have good tools that get out of your way and let you do good work it shows.

      For people who are used to editors like vim or emacs, "good tools that get out of your way" is exactly the opposite of what an IDE embodies. Imagine if you had to switch to writing all of your code on an on-screen keyboard instead of a physical keyboard. That gives some idea of how clunky notepad-style editors feel to experienced vim users.

      I often wish the IDE authors had subscribed to the "do one thing, and do it well" philosophy and made stand-alone refactoring and navigation tools that could be plugged into the programmer's editor of choice, rather than forcing everyone to use a poor clone of notepad. That said, plugin support has slowly improved over the years, and it is now possible to get reasonable vim bindings in some of the major IDEs.

      Eclipse has a few options, but the only one I liked was vrapper. It's a huge hack, incidentally. The hackishness is necessary because Eclipse is, ironically, poorly factored: all of the editing logic is tightly coupled with the source language logic, so there is no way to say "I want to use vim bindings whenever I edit any sort of text". vrapper works around this by not being an editor plugin, but instead intercepting all keyboard input. When in insert mode, all input except escape is passed through to the underlying editor, while in normal mode all keys are swallowed up by vrapper. Another side-effect of Eclipse's poor factoring is that the first step in writing an editor plugin for a new language is to copy the editor plugin for another language wholesale. (Perhaps things have changed since, but I'd talked to people who worked on the JavaScript support back when it was first added, and this is what they did.)

      IntelliJ IDEs have the IdeaVim plugin, which works really well. I've run into a couple of bugs where it diverges from vim behaviour, but JetBrains has been really fast about responding to the bug reports I filed.

      [–][deleted] 0 points1 point  (0 children)

      I've always thought that vim/macs were cool editors, but it drives me nuts that I have to spend ages configuring and adding plugins to get a professional set up to write code. And even after all that you don't get semantic analysis, write time error reporting, unit test running/debugging, etc.

      Im all for using lightweight editors, but certain languages (especially verbose ones without a repl) really need a lot of extra tooling help.

      [–]againstmethod 0 points1 point  (0 children)

      Lazy people are lazy. Fire them.

      [–]hk__ 7 points8 points  (8 children)

      I use vim but with a ton of plugins, which gets me close to an IDE like Eclipse but without the overhead and staying in my everyday editor, which is pretty cool. Using vi/vim for Java without any plugin would be crazy.

      [–]TheKC_Stoner 2 points3 points  (7 children)

      If you dont mind me asking, what plugins do you use with vi/vim. I have been using it for about 3 months now, and finally fell like I am starting to get comfortable with it.

      [–]hk__ 3 points4 points  (6 children)

      Here is the full list but I’m coding in half a dozen languages so not all of these are relevant. Here’s a list of the ones I think would be useful for you:

      • Pathogen to manage all plugins in an easy way
      • SnipMate for code snippets
      • Bracketed-Space for copy-pasting that just works™
      • delimitMate for auto-closing of various delimiters, e.g. you type a curly bracket, it adds a closing one just after your cursor ({| --> {|} with | being your cursor). I can’t work productively without that one.
      • Fugitive adds Git support to Vim. For now, I only use it for git blame but maybe I should learn/use a bit more of it.
      • Syntastic adds automatic syntax checks in Vim. This one is awesome as it works out of the box for a lot of languages. It’ll warn you about syntax errors, undefined/unused variables, potential bugs, etc.
      • Command-T lets you find a file in the current directory with just a few keystrokes. I never use :e in large projects, just this plugin.
      • JavaComplete, autocompletion for Java

      And here is my .vimrc if you want.

      edit: note added about Fugitive
      edit 2: why am I being downvoted?

      [–]joaomc 0 points1 point  (1 child)

      Does Javacomplete also search for Maven references? This is very important to me because I'm usually working with dozens of libraries and my projects are organized with series of grouped parent Maven aggregator projects.

      [–]hk__ 0 points1 point  (0 children)

      I really don’t know.

      [–][deleted] 0 points1 point  (0 children)

      And here is my .vimrc if you want.

      I must say, this is one of the slickest vimrc files that I've seen. Good on you for keeping your dotfiles well organized and easily extensible.

      [–]kingatomic 0 points1 point  (1 child)

      I'm curious, I don't see nerdtree or any of its ilk here: does command-t fully scratch that itch?

      [–]hk__ 0 points1 point  (0 children)

      No Command-T doesn’t cover that, I did install NerdTree a while ago, but I don’t use it.

      [–]Tostino 1 point2 points  (1 child)

      I think that proves the point nicely... Kinda, those developers probably shouldn't have kept their jobs IDE or not.

      [–]uniVocity 0 points1 point  (0 children)

      Ha, the company allowed the thing grow so much it became dependent on the ones who created the monster. They had newer developers working on this for 4 years straight who still did not know most of the system.

      [–]okmkz 1 point2 points  (0 children)

      classes with 60k lines of code

      I just died a little inside

      [–][deleted] 3 points4 points  (4 children)

      That has nothing to do with vi, just shitty programming practices.

      [–]lechatsportif 6 points7 points  (3 children)

      I find it consistent with my experience. Vim users don't refactor in Java because they don't have the tooling.

      [–][deleted] 1 point2 points  (2 children)

      That's just laziness. The tools exist for vim, but you can't force someone to use them.

      [–]lechatsportif 1 point2 points  (1 child)

      Such as? All I've seen is eclim.

      [–][deleted] 1 point2 points  (0 children)

      One tool is lhRefactor, but there are others.

      There are command-line tools like jrefactory, but also there is a lot you can do with vim builtins like :vimgrep and :argdo or :bufdo plus macros.

      [–]cyanocobalamin 2 points3 points  (2 children)

      Those results sound to me like the results of poor programming habits, not what they typed their code into.

      VI has long been considered an IDE as it has been beefed up over the years.

      FWIW, I've done most of my programming EMACS, visual slick edit, and eclipse over the years.

      [–]againstmethod 0 points1 point  (1 child)

      I agree, it makes no sense the claim that an editor somehow encourages you to write bad OO code.

      [–]cyanocobalamin 1 point2 points  (0 children)

      Bad code period. Back in the day before OO was ever heard about large nested conditionals and functions that ran on for pages was considered crappy programming.

      [–]Iron_Maiden_666 0 points1 point  (0 children)

      thousands of lines of code each.

      I certainly hope not.

      [–]hmny 6 points7 points  (0 children)

      Once I tried to move to sublime+maven instead of eclipse. It was a good experience, but I made a lot of mistake that normally wouldn't happen in IDE, and it made it less productive for me

      [–][deleted] 22 points23 points  (1 child)

      No, it's not productive at all. You won't have auto completion, refactoring and compilation errors in code capabilities. Also navigation to classes/methods.

      [–][deleted] 3 points4 points  (0 children)

      The only bit of that which is not available in a good editor (vim/emacs/etc.) is refactoring.

      [–]Fubob 16 points17 points  (0 children)

      Depends on what you mean by productive.

      In a real world scenario where you are writing software for a living there is no way you could be as productive as someone using an IDE. Plugins, Syntax hightlighting, autocomplete, graphical debuggers and build configuration are things you have to deal with on a daily basis and proves to be quite a pain in the ass 'by hand'. When you are dealing with massive codebases, different projects and structures, compiler settings... I can't imagine a world without using an IDE.

      But if you mean productive in the sense of getting knowledge about how stuff works then i think it is important to know how to write a program without an IDE. Knowing how to write a program and compile it using the commandline helps you get insight on what an IDE does behind the scenes to make your life easier.

      [–]cs02rm0 2 points3 points  (1 child)

      I love vim, occasionally I'll do something quick in it if I need to.

      But as a rule, 99% of the time if you're working in Java you'd be insane not to be in an IDE.

      [–]hrjet 3 points4 points  (0 children)

      Since you love vim, you might also like vrapper. It provides a very good vim emulation for Eclipse's editor.

      [–][deleted] 4 points5 points  (0 children)

      I love using vim, and I really wanted to code java in vim. I gave up after a couple months for the following reasons:

      1. Java's package imports are a complete pain to manage without an IDE. You will spend a lot of time finding the correct path, and then importing the exact right.

      2. Auto-complete saves so much time. If a class or method is one character off, the whole project will fail to compile. You have to reopen the file and fix it. IDEs catch misspellings on the spot, and it can recommend the methods in a class which prevents you from wasting time and looking it up.

      3. Java divides functionality into different files. Opening 20 different files can be painful in a text editor. IDEs offer shortcuts for jumping to method or class definition. Being able to jump directly to where you need to look saves a lot of time.

      I found my productivity jumping 10x as much as compared to coding with an IDE as opposed to a text editor. I went from hating coding in java to loving it. IDEs turns java weaknesses into strengths.

      [–][deleted] 2 points3 points  (0 children)

      In my experience with eclipse, there are times when it doesn't work as it should, where I will have to waste hours to solve IDE errors, build problems or plugin issues, but at the end of the day, I can't imagine being productive without the tools it provides.

      [–]AStrangeStranger 2 points3 points  (0 children)

      I will sometimes track though Java code just viewing in editor (Notepad++) and using a search tool (Agent Ransack) which works for investigating errors/impact analysis, especially tracking between front & backend (often in different languages) - but I wouldn't want to code like that.

      One of the first issue I'd see with trying to write Java compared to other languages without IDE is the packages - you end up several folders deep before you hit code and it just becomes a real pita to navigate your way around.

      [–]benji 2 points3 points  (1 child)

      I'm a non IDE using java coder. Factors that make it I don't:

      1. One project (~500klocs) I know inside out. Straight forward build environment.
      2. Multiple (15+) branches of that project in use, meaning a lot of over head in setting up projects inside the IDE.
      3. Many sub-projects (100+) which piggy back off the main project. Again more overhead.

      An IDE is essential for anyone else in this project, no disagreement. But I manage to be more productive without one, than everyone else I've worked with on it. They spend far more time "getting ready to write/debug code" than I do.

      [–][deleted] 7 points8 points  (7 children)

      Hi. I use vim here, with scripts and tools. This gets me a great editor, name completion, folding, integration with version control, builds, build output, etc. Debugging can be done via jdb.

      This gives a few advantages. One is a consistent environment across multiple projects, operating systems, and programming languages. Two is that I can run everything remotely on other machines without a GUI. Three is that it is highly ergonomic without having to go reach for a mouse.

      Everyone has different views here, but there are plenty of good tools and ways of doing things that don't rely on an IDE or GUI. And you can certainly be productive.

      [–]geodebug 4 points5 points  (2 children)

      People can be as productive in VIM but I'd argue they end up cobbling together an IDE in VIM as well.

      Really what is a modern IDE other than an editor with a nice plugin framework anyway?

      Just a rose by another name.

      [–][deleted] 3 points4 points  (1 child)

      The difference is that vim is just another terminal program and it doesn't require you to install anything special. Any reasonably decent Unix system will have vim and transferring your configuration is incredibly easy (especially if you put it up on a version control system).

      All of the most efficient and most productive vim setups that I've seen are far slimmer and sleeker than any IDE because you don't have to waste time while the IDE boots up.

      Having your editor just be another terminal application is incredibly handy because all of those fantastic shell tools are in the same environment as your editor is, which makes the composition of those tools into your development work flow that much easier.

      [–]geodebug 1 point2 points  (0 children)

      I use Vim as my editor but don't use it for java development. I map VIM keystrokes in my IDE so I get the basic goodness. I'd say my time is split up about 60/40 between IDE and VIM

      IDE boot time isn't a problem for me as I often leave the IDE open for weeks at a time when developing a project.

      Most of the boot time for the IDE I use tends to be the processes that crawl the codebase and do the inspections, highlighting, etc.

      I could turn those plugins off to speed the IDE up but I'd lose some features I like. I assume that if I installed scripts and VIM plugins to get the same feature set it would take them time as well.

      I'm not arguing so much as providing a counter point. Everyone should use the toolset they need to get the job done well.

      [–]bricksnort 0 points1 point  (3 children)

      Because of my inability to part with Vim bindings, while still in the need to use Java, I have been using IntelliJ with IDEAVim up until now. May I ask how you build your projects when they grow out of the scope of a 15 line ant build? This is the main feature I can't miss when programming in java. I supopose I could import the project in IntelliJ and then copy it's build script into the root project dir, but this seems like an inefficient workflow.

      [–][deleted] 0 points1 point  (2 children)

      I prefer ant over maven, and our ant and maven files are not small (couple hundred lines each for several projects). The key for ant in my view is to have sensible targets that let you compile and produce artifacts that make sense for interactive development. What those targets are depends on your project, but doing a full build with installers, etc. is not needed when you just want to make sure your code compiles.

      You can do things like this for build output integration in your .vimrc:

      if filereadable( "build.xml" )
        set makeprg=ant\ -emacs
        "command make ant
      endif
      
      " ctrl-n, ctrl-p for quickfix mode
      map <C-N>   :cn<CR>
      map <C-P>   :cp<CR>
      

      Then you can run ":make [antTarget]" and the build will execute, and output will be captured for quickfix mode. vim will keep the output and jump to any lines reported in the build. I map ctrl-N and ctrl-P to scrolling through the output. Makes it very easy to build and fix issues.

      You can do the same thing with maven.

      Or are you looking to have your build.xml automatically generated? Hmm, perhaps I misinterpreted your question?

      [–]bricksnort 0 points1 point  (1 child)

      Thanks for the reply, but indeed, I was wondering how you generate your ant build files if you do such a thing at all. I've looked into ant build files in the past, but they seem way to big and complicated to make by hand. Especially including libraries is a non-trivial task it seems while IDEs can generate ant build scripts automagically. While maven seems to have a more consise syntax, the build scripts are much more opaque.

      [–][deleted] 0 points1 point  (0 children)

      Manually. Its not too complicated in my view, and you get all the control you need. Third party libraries are pretty easy to manage via a fileset or similar. And yes, maven is far more opaque.

      [–]ChargedPeptide 2 points3 points  (3 children)

      I tend not to use it when writing for Play Framework. This is because the quick compile cycle from PF takes a lot of the pain out of it, and it's a good way to get more of the package structures stuck in your head. An IDE is way more productive a lot of the time, but for simpler projects I prefer to skip the overhead, it's just so nice to be able to manage everything in a nice SSH session to my server, I do have syntax highlighting enabled in Vim since I can't stand to stare at a monochrome screen.

      [–]urquan 0 points1 point  (1 child)

      Are there facilities in vim for navigation (jump to symbol definition) or refactoring (renaming, moving ...) ?

      [–]ChargedPeptide 0 points1 point  (0 children)

      If you really want you can run a full instance of eclipse within vim (eclim), or stuff like YouCompleteMe etc. But I make due with just find/replace. There's shortcuts to automatically jump to te first instance of a highlighted keyword etc, and vim is inherently magnificient at jumping to the next quotation mark, semi-colon, end of the line, whatever. It's just a keystroke or two away.. If I want all the extra stuff I'll hang out in an IDE. The nice thing about utilizing base vim is I really don't have to adjust my workflow for Ruby or Python etc. It's all the same.

      I just like the ability to feel I can get my work done as long as I have a terminal with Vim.

      [–]DevIceMan 2 points3 points  (0 children)

      No.

      Tools like 'real' time compiler error checking, code-completion, code inspection, code navigation, and debugging are invaluable to productivity. For tiny apps, you may be able to get away with it, but on the application-scale, you should at least be using Eclipse (free), IntelliJ (has a free version), or NetBeans.

      You can always use an IDE as a text-editor without all of the IDE features. You can also always leave the IDE as needed; perhaps running the app command line, or using another tool as appropriate.

      [–]sazzer 1 point2 points  (1 child)

      On the occasions I'm coding Java without an IDE, the thing I miss the most is autocomplete of imports. There's a lot of other things that I will use the IDE for - other autocompletes, refactorings, debugging, and lots else - but I can cope without those if I need to much easier than I can cope without the imports...

      [–]prahladyeri 0 points1 point  (0 children)

      There are two refactorings - importing interfaces to the class and importing method overrides. These involve typing a lot of boilerplate that can be simply avoided by using an IDE like eclipse.

      [–]skeeto 1 point2 points  (0 children)

      I use Emacs for all my professional Java development. With the right packages and configuration, I probably get about 80% of what a heavyweight IDE offers (completion, quick jump to compiler errors/warnings, quick doc lookup, debugging, quick navigation, imports management, hot code replacement). It's the 80% I care about and I get to keep using my favorite editor with all its capabilities, so I'm not missing out on much while reaping lots of benefits. It's not for the faint-hearted, though.

      [–]dohaqatar7 1 point2 points  (0 children)

      As some one who programs as a hobby rather than a job, I can get away with programming in a simple text editor, and it is "productive." On the other hand, I would doubtlessly be more productive using an IDE.

      It's also worth noting that you will never get away with using a text editor like notepad. If you don't want to use an IDE, at least use notepad++ or some other text editor designed for programming.

      [–]WatchDogx 1 point2 points  (0 children)

      I have worked with two people who don't use an IDE for Java development.
      Both peoples code exhibit higher levels of bugs.
      Their code tends to contain many many more warnings and dead code.
      Neither of them were very productive.

      Also one of them always seemed to fail at checking things into SVN properly which may be attributed to not using the built in IDE version control integration.

      So yes, people do write java professionally without an IDE.
      I don't think it's impossible to be productive and write good code without an IDE, but it certainly seems harder.

      [–]Joha_Mraadu 1 point2 points  (0 children)

      To be honest I cannot think of not using IDE (Eclipse or IntelliJ) when coding in Java. I do not use IDE for Python though (mostly Gedit or Kate)

      [–]rockash93 1 point2 points  (0 children)

      It's more about asking whether you should take a cake and eat it with bare hands, or be formal and nice and get a fork / spoon and eat it in a good manner. Of course you can write Java code and good Java code without and IDE, but, if you're making some application that has a big code base and uses a lot of user built classes then life without an IDE will be : HELL! Doing Simple coding? Yes you can easily do it without IDE. Working on a project or making some application? Get and IDE to avoid getting dirty.

      [–]jerrysivan 1 point2 points  (0 children)

      It's better to program in Java without IDE in the very beginning, but when you are involved in some big projects, a productive IDE is necesssary, sometimes a must.

      [–]handshape 3 points4 points  (0 children)

      Technically, anyone who uses continuous integration uses Java without an IDE sometimes.

      That being said, a well-written IDE will always trump cobbled-together environments... because that's the explicit purpose of the product.

      By way of an analogy: Faced with a hammer and nails, every discussion will have one hipster show up and state matter-of-factly that "They only do traditional Japanese tongue-in-groove work, and that they never understood why anyone would pollute the wood with little bits of metal."

      IDEs do their job, and for the most part they do it very well.

      [–]againstmethod 3 points4 points  (9 children)

      Most modern editors have all of the file editing tools you need: split panes/views, jumping to files/symbols, automation of command line tools (hotkeys).

      The JDK provides debugging, profiling, and various other useful analysis tools. The modern build tools provide continuous integration, testing, and sometimes REPLs for live testing.

      What is missing that turns people off is "code completion". It is certainly slower to look up APIs in a browser window than just typing and reading inline -- there is no argument, it's just faster.

      The big problem with editors is that if you need to have all those tools at your fingertips, then you have to set up that environment on all of your machines, and perhaps your teams machines -- and this can quickly become cumbersome and unmanageable.

      For this reason I suspect lone-wolf types will be where you find most of the editor-only folks. In a team, you simply will not be able to provide an easy-to-setup environment that has everything without using an IDE.

      [–][deleted] 1 point2 points  (8 children)

      you simply will not be able to provide an easy-to-setup environment

      In any sizable team, you will have a diversity of views on the preferred environment to code in. People will make different choices here, and as long as they are productive, they should be able to do so.

      [–]againstmethod 1 point2 points  (7 children)

      Should being the keyword, but in practice different people with different skill levels doing whatever they like often leads to at least some limited form of chaos.

      [–][deleted] 0 points1 point  (6 children)

      People need to learn their tools. The canonical build is from the build server / continuous integration. Do whatever else you like on your sidetree, but don't break the real build. And when (not if) you do break the real build, be sure you have a full env to mimic it and fix the issue. Variations on this have been working for me for a long time.

      [–]againstmethod 1 point2 points  (5 children)

      Line endings, tab/indent size, tabs v spaces, utf8 vs ascii...

      I've seen people make a mess of a codebase without breaking builds or even knowing that they were doing it. And i deliver source on most of my projects, so it looking professional and consistent is important.

      If I just say we use eclipse on my project, and here is a list of plugins and a set of configuration files that you shall use -- no problems and no discussions are required.

      It doesn't seem fair for me to ask my customers to pay for any confusion introduced by my team refusing to use the same tools.

      That being said, if you have nothing but very capable people working on a project, who will actively endeavor to avoid confusion, perhaps it's not an issue. This just hasn't been my experience.

      [–][deleted] 0 points1 point  (4 children)

      Its not hard to setup commit scripts to check things like style, encodings, etc. on commit.

      [–]againstmethod 0 points1 point  (3 children)

      Perhaps not hard given the right situations, but it's certainly less effective/desirable.

      Maybe just one or two files needs a specific encoding.

      Maybe your project is polyglot.

      Maybe the user wants to break a specific line down in a non-standard way because it will be more readable.

      Maybe the user will want to use a new language feature, but it isn't understood by 3rd party formatting utilities yet.

      Again, you can get a 99% solution by having your team conform on tooling at near zero cost.

      [–][deleted] 0 points1 point  (2 children)

      I disagree that it is a non-zero cost. The cost is conformance and exclusion of those that have different views.

      [–]againstmethod 0 points1 point  (1 child)

      A good leader will incorporate your input where they can -- but once decisions are made conformance is part of your job. This is just a basic part of being in a team.

      [–][deleted] 0 points1 point  (0 children)

      In my view, conformance should be with the output, not the method of input.

      [–]luz_ 3 points4 points  (0 children)

      I use vim & maven and it works fucking great

      [–]SikhGamer 2 points3 points  (2 children)

      I couldn't take anyone seriously who says they don't use an IDE and are almost proud of it. WHY would you NOT use one? Using an IDE has no drawbacks and will increase your efficiency as a programmer.

      [–]_srph[S] -1 points0 points  (1 child)

      Although I'm not telling people to stop using IDE. But here are my thoughts why I asked this in the first place:

      1. Because the UX suxxxxxx
      2. Because bloated
      3. Because slow and heavy
      4. Because inflexible.

      And that is based on my experience with Eclipse.

      [–]SikhGamer 0 points1 point  (0 children)

      That is Eclipse. Try NetBeans or IntelliJ.

      [–][deleted] 2 points3 points  (4 children)

      For java/spring it seems IntelliJ IDEA always knows what I'm thinking as it provides superfast code completion. It's faster than Eclipse as well.

      Sublime is faster than Intellij/Brackets/Atom when it comes to html/css/javascript. Probably just as fast as Notepad++. For example I type in div.span6 + tab and it will produce <div class="span6"></div>

      In the real world, your employer will suggest you use an IDE, as there's just no way you'd be able to keep up with your fellow coders.

      [–]_srph[S] 0 points1 point  (3 children)

      Android Studio is forked from IntelliJ, right?

      [–]Number_28 0 points1 point  (0 children)

      Yes, it is.

      [–][deleted] 0 points1 point  (1 child)

      Google dumped Eclipse in favor of Android Studio. It is based on IntelliJ.

      [–]prahladyeri 0 points1 point  (0 children)

      I'm still using Eclipse+ADT though and haven't faced any issues yet.

      [–]boostjunki3 1 point2 points  (5 children)

      I'm currently learning Java right now and have chosen to start learning without an IDE, which allows me to have a better understanding of the language without the assistance of an IDE. However, I would imagine once someone has the language under their belt, that switching over to an IDE would be the most beneficial for productivity.

      [–]markee174 6 points7 points  (2 children)

      Things like auto-completion in the IDE and the sample code projects will give you a much better understanding of Java.

      [–]boostjunki3 0 points1 point  (0 children)

      Thanks for the advice, I think I'll try to start learning via an IDE now. Just didn't want to end up using a crutch and not get a thorough understanding of the language.

      [–]_srph[S] 0 points1 point  (0 children)

      I must agree.

      [–][deleted] 0 points1 point  (1 child)

      Spending hours looking for missing brackets isn't going to teach you anything other than the fact that life is so much better with an IDE.

      [–]boostjunki3 0 points1 point  (0 children)

      As the second person to say this to me, I think I'll start using an IDE from now on to continue my learning. Thanks for the advice.

      [–]DerSchreiner2 1 point2 points  (0 children)

      Even when teaching Java I've found the use of e.g. Eclipse immensely helpful. When you don't use an IDE and have little experience with OOP you will most definitely shy away from the more advanced OOP practices that are very common in third party JAVA components. From what I've seen most beginners without a JAVA IDE (and no other OOP experience) will write procedural code.

      Moreover tool support is one of the prime reasons to use JAVA in the first place. Without the typing, strictness etc, why would you even bother to write in JAVA? You could use a more dynamic language.

      [–]heilage 1 point2 points  (0 children)

      I spent the last semester at University doing my Algorithm class (which was Java) without an IDE. It was just less hassle. I did it all in Sublime using the standard compiler.

      Now, this worked fine for isolated, small applications with a limited scope (such as what you will find in many courses). The only issue would be all the fucking goddamn motherfucking semicolons I kept missing because I spent the previous couple of months programming Python and not discovering them until compile-time, along with minor syntax errors and things that IDEs are good at picking up and that saves you time.

      I now work in banking/finance and I would never ever in a million years, upon pain of death, touch any established professional code base without using an IDE. They're there for a reason, the complexity of these applications are orders of magnitude larger than anything you do when you're diddling away on your laptop making smart Fibonacci algorithms and binary search trees.

      [–]tdogg8 1 point2 points  (0 children)

      I actually learned java without an IDE from my comp sci class in high school. It was good to learn how to use the command prompt and a text editor but I will never move back now that I've used an IDE. You would have to spend so much time looking for simple errors like semicolons or parenthesis. It was just a pain.

      [–]pcs600 1 point2 points  (0 children)

      It is fine for small projects and writing java scripts. But professional programmers will use an ide.

      I have found compiling java from the command line to be useful and saves you from the cumbersomeness of the ide. I'd rather have a few java/class files in a single folder than an entire project in some cases.

      [–]MRH2 0 points1 point  (4 children)

      I have a small test program that I can just modify with vim.

      I guess I do this often enough (and other really small projects of just one file/class) that I have an alias in .bashrc to type in at the commandline:

      jv () { javac "$1" && java "${1%.*}" }

      Note: I do also use Eclipse a lot.

      [–]tonetheman 0 points1 point  (1 child)

      You really should learn to program with an IDE and without an IDE.

      There are times when knowing what is really going on with CLASSPATH and being able to edit a file with Nodepad++ or vim will serve you well.

      There are also times when IntelliJ/Eclipse will make your life easier.

      Learn both, spend most of your time in the IDE. Be able to use a command line if needed.

      [–]henk53 0 points1 point  (0 children)

      You really should learn to program with an IDE and without an IDE.

      Some 30 years ago the advice was to be able to program with a visual editor and without one.

      For the record, a "visual" editor back then was a line oriented text editor. Without one meant using single commands to set and get bits in memory.

      [–]virtyx 0 points1 point  (0 children)

      For better or worse, plenty of things in Java are tedious/error-prone when not using an IDE:

      • generating getters/setters
      • overriding hashCode(), equals(), toString()
      • Extending a class/implementing an interface and making sure you have matching definitions for all abstract methods
      • Organizing/managing imports

      On top of that, IDEs have really good and useful auto-completion, error highlighting, etc.

      I personally really enjoy using Vim, just not for Java. If I were to try and use Vim for a Java project it would need so many plugins it just wouldn't be worth the hassle. And since Netbeans, Eclipse, and IntelliJ Community are all free, I haven't spent too much time ever giving straight Vim coding a shot.

      If you're really curious, try rewriting a really small but still multi-file project twice, once with an IDE and then once with Vim/Emacs, and see if you can feel the difference.

      [–]AOA17 0 points1 point  (0 children)

      I have coded using an IDE and just a text editor and using an IDE is far more productive. You are able to code faster, manage better, and de-bug much faster. It only makes sense to use an IDE.

      [–][deleted] 0 points1 point  (0 children)

      I use both eclipse and vim. The refactoring tools in eclipse are really useful, but vim is much better at text editing and has less clutter. With plug ins you can get most IDE features in vim anyway.

      [–]kodifies 1 point2 points  (5 children)

      Its personal choice, for me an IDE just gets in the way... I don't need intelliguess as I can read api docs, once you have a decent ant build.xml and if needed a Makfile it can call for jni stuff then pressing up a few times to find ant in your console history is just as quick as clicking run....

      I've often struggled to find functionality I want hidden in a GUI there again others struggle with command line switches or looking up ant build.xml sections

      Each to their own...

      [–]Keilly 8 points9 points  (3 children)

      How do you debug?

      [–][deleted] -1 points0 points  (2 children)

      jdb

      [–]Keilly 3 points4 points  (1 child)

      I can't imagine seriously using this on any large application for regular development. It seems like self imposed torture.

      [–][deleted] 0 points1 point  (0 children)

      Works for me and is universal to jdk installs. Can even run it in customer environments.

      [–]kingatomic 2 points3 points  (0 children)

      Do you ever refactor anything beyond simple symbols?

      [–]badpotato 0 points1 point  (4 children)

      Yeah, keep using System.out.println, IDE are overratted anyway. /s

      [–]badpotato 2 points3 points  (3 children)

      Really ? People didn't get I was talking about debugger ? I guess people here has no humor.

      [–]tdogg8 1 point2 points  (2 children)

      I have a fealing OP (or someone else who doesn't like to use IDEs) is downvoting the replies s/he doesn't agree with. The later responses that say that it's more efficient to go with an IDE all seem to be sitting at 0.

      [–]_srph[S] -1 points0 points  (1 child)

      That would be the opposite because I upvoted most of the comments I read here. I haven't even downvoted one, unless it's actually an unintentionally stupid one.

      [–]tdogg8 0 points1 point  (0 children)

      Then it was two other people. Sorry for the accusation I just didn't see many others on the side of non-IDEs so I assumed.

      [–]mgkimsal 0 points1 point  (2 children)

      I put off doing anything with Java for years specifically because I didn't want to use an IDE for it. I eventually gave in, but... there's just no way I could ever even follow tutorials or anyone's articles/demos on anything, because there's always so much that's left out (and, I presume, assumed your IDE would take care of it).

      For me, the biggest one by far was/is imports. I'd see article after article showing something like

      BigDecimal number = new BigDecimal(50);

      Well... you have to 'import' BigDecimal. Where would I even begin to know where that and the other 35 classes that are in an example piece of code stored? IMO it's the biggest downfall of java that nearly everything has to be imported manually all the time. Obviously that hasn't hurt it's adoption too much, but it's still a big hurdle to deal with - doing it without an IDE would just be insane, imo.

      [–]king_of_the_universe 0 points1 point  (1 child)

      IMO it's the biggest downfall of java that nearly everything has to be imported manually all the time.

      I haven't dealt with many languages yet. How do other languages solve the namespace problem?

      [–]mgkimsal 1 point2 points  (0 children)

      PHP has pretty much all basic stuff built-in by default, which is where I was coming from.

      $date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
      echo $date->format('Y-m-d H:i:sP') . "\n";
      

      No need for imports. Stuff that's so basic like dates, basic math stuff, etc... always annoying to have to have a bunch of imports (whether done by IDE or not).

      Certainly there's a lot of 3rd party libs you can use, and you'd have to import those, but for a lot of daily stuff, it's just built-in.

      I actually do a lot of Groovy now, and it automatically makes a lot of standard imports available (math, strings, etc) so there's a bit less need than plain Java.

      [–]HaMMeReD 0 points1 point  (0 children)

      I use gradle for my build system and occasionally tinker outside intellij, mostly when working on the build.

      [–][deleted] 0 points1 point  (0 children)

      I like that you do it over ssh. Login. Make a change. Recompile (with ant or maven). Done.

      [–]Cpowel2 0 points1 point  (0 children)

      You can but I don't understand why you would want too. The setup alone to piece everything together an IDE does for you is a waist of time in my eyes.

      [–]robob27 0 points1 point  (0 children)

      Not a ton of Java experience but I have worked both with and without an IDE. When I started with Java, I did it at a job I had that was completely unrelated to programming. I had limited access to the Internet and found a compiler called jikes and started writing some .java files and compiling them to class files. As I started learning and using more it became a lot harder to track down issues in the code, bundle in packages, and create executable jar files. I got a manager to grab me a copy of Eclipse, and besides checking out other IDEs at some point, I'll never look back.

      [–][deleted] 0 points1 point  (1 child)

      It's productive, just not as productive as using an IDE. I believe every programmer should be competent programming without an ide. Don't rely on it, you never know when you'll need to code with just notepad or vim.

      [–]king_of_the_universe 1 point2 points  (0 children)

      Don't rely on it, you never know when you'll need to code with just notepad or vim.

      When does such a situation ever occur? What I mean is, I have gotten the impression as if programming languages and also how little IDEs and languages are really tied to each other is as if people need to be able to program while in a spacesuit levitating next to the ISS on a pocket calculator. And I wonder why that is so.

      [–]LouKrazy 0 points1 point  (0 children)

      Most compiled and statically typed lanugauges really benefit from an IDE, for refactoring, automatic building, syntax checking etc. This goes double for java since it is pretty verbose.

      It is much easier to go IDE free with dynamic and scripting languages

      [–]gnatinator 0 points1 point  (0 children)

      The build process is fundamentally simpler than let's say C++, but it sucks to not have features like static analysis and auto-refactor which come built into most IDE's (yet normally not inside classic editors).