Slashdot Mirror


The IDE As a Bad Programming Language Enabler

theodp writes "When it comes to monolithic IDEs, Wille Faler has lost that loving feeling. In IDEs Are a Language Smell, Faler blogs about a Eureka! moment he had after years of using Eclipse for Java development. 'If the language is good enough,' Faler argues, 'an IDE is strictly not needed as long as you have good support for syntax highlighting and parens matching in the case of Clojure, or indentation in the case of Haskell.' So why do Java coders turn to Eclipse? 'Because [of] a combination of shortcomings in the Java compiler and Java's OO nature,' explains Faler, 'we end up with lots and lots of small files for every interface and class in our system. On any less than trivial Java system, development quickly turns into a game of code- and file-system navigation rather than programming and code editing. This nature of Java development requires IDEs to become navigation tools above all.' Yes, only an IDE could love AbstractSingletonProxyFactoryBean!"

586 comments

  1. But eclipse is terrible at navigation by MichaelSmith · · Score: 0

    I wrote a simple file system indexer at my last job. Enter part of a class name and it loads the source file in an editor. Eclipse failed because projects have to be small. This application had > 200 projects and any non-trivial tasks would have required working with 100 projects at a time.

    1. Re:But eclipse is terrible at navigation by santax · · Score: 5, Funny

      I wanted to ask you about non-trivial tasks that need 100+ projects, but then I noticed your signature. Congrats btw, being head developer of Apple Maps must earn really good!

    2. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 5, Interesting

      Eclipse failed because projects have to be small.

      Curious. My Eclipse project is the Linux Kernel. Works fine.

      Tip for young players: Eclipse runs on the JVM, the important bit is the last two letters "VM" - "Virtual Machine". The out of the box configuration gives Eclipse ~128MB of memory.... how many VMs do you run with that much memory? Change the default values to something sane (ie 2GB) and suddenly Eclipse is fast, responsive and useful. Remember VM = Virtual Machine.

    3. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      I must say this is my favorite feature of Slickedit - quick open even with projects with 1000s of files.

    4. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      Emacs could do that already in the last century.

    5. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      But in Eclipse you would just ctrl-T, then enter the initials (or name, or wildcarded name) of the class you want, and it'll show up for opening. Or ctrl-R for resources search.

      Eclipse works excellently with large projects comprised of multiple sub-projects. But you do need to learn how to use it effectively.

    6. Re:But eclipse is terrible at navigation by hcs_$reboot · · Score: 5, Funny

      being head developer of Apple Maps must earn really good!

      Well, he's just been fired. So now he has enough time to spend on slashdot, lucky him. And welcome!

      --
      Slashdot, fix the reply notifications... You won't get away with it...
    7. Re:But eclipse is terrible at navigation by thammoud · · Score: 2

      Really want to meet the moron that modded you insightful.

    8. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 2, Informative

      Why Eclipse and NetBeans and all that crap? Because refactoring and autocomplete.

    9. Re:But eclipse is terrible at navigation by kiddygrinder · · Score: 5, Funny

      i hope none of your decisions matter to anyone

      --
      This is a joke. I am joking. Joke joke joke.
    10. Re:But eclipse is terrible at navigation by kasperd · · Score: 1

      any non-trivial tasks would have required working with 100 projects at a time.

      I don't think the IDE is to blame for that.

      --

      Do you care about the security of your wireless mouse?
    11. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      Don't worry, they don't.

    12. Re:But eclipse is terrible at navigation by deKernel · · Score: 1

      I am thinking that you might want to revisit your build system. Using an IDE as your "master" container really isn't smart with that many projects. There are many, many solutions out there like CMake and its family or ANT and its family. I have used both on large projects and each should work but mileage does vary.

    13. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      The point was that if you use a language without leaky abstractions, then you don't need autocomplete and automatic refactoring. Java and by extension C# are very productive but you need an IDE to write tons of boilerplate code for them to work as intended. Autocomplete-oriented programming is not a feature but a workaround to alleviate language limitations. I wouldn't call it a smell, but it certainly encourages the use of libraries one doesn't really understand. Type . and wait to see what happens.

    14. Re:But eclipse is terrible at navigation by Waffle+Iron · · Score: 2

      Change the default values to something sane (ie 2GB) and suddenly Eclipse is fast, responsive and useful.

      Maybe they should rename Eclipse to be called "tgacs". This would bring consistency with how emacs was originally named for being "Eight megs and constantly swapping".

    15. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 0

      Different AC.

      Eclipse indexes the kernel just fine, and it's quite easy to set it up so that the config is expressed properly in the index. It's also easy to get it to build for you or whatever else you might do using make, including cross compilation. My favourite feature is the multi-level define expansions - very useful for quickly grokking a huge bunch of C written in kernel style.

      It's not very good at understanding the function pointer pattern, which is a little disappointing since its so widely used in C. I'd like it if Eclipse could figure out calls to a function via function pointers. You can still find the calls, but the automatic call graphs miss them out.

      Maybe I have Stockholm Syndrome because Eclipse has been the only supported IDE for a number of projects I've worked on over the last 5 years or so, but IMO it's honestly not as bad as its reputation says, especially if you follow GP's advice and give the VM plenty of RAM to play with.

    16. Re:But eclipse is terrible at navigation by nitehawk214 · · Score: 3, Informative

      Curious. My Eclipse project is the Linux Kernel. Works fine.

      I hope, none of your code is included and enabled on any of my systems.

      Commas, will be misplaced.

      --
      I'm a good cook. I'm a fantastic eater. - Steven Brust
    17. Re:But eclipse is terrible at navigation by ifrag · · Score: 1

      but it certainly encourages the use of libraries one doesn't really understand

      Depending on how obvious and well designed the library is, just seeing the function and parameters in auto-complete might be enough to go on and could even produce workable code if you are lucky.

      Of course this will be influenced by how well assumptions about the behavior line up with actual use, hopefully if it's similar to a number of other libraries it will offer up functionality with about the same results. If not, then it could lead some obscure bug which will be difficult to find if everyone uses the same set of assumptions or until someone with intimate knowledge happens to take a look at it.

      Also, this is really what I'd like to see in a programming reference book, just a quick outline and typical use cases and then a listing of possible pitfalls in using it. The books we used in school were not really at all geared toward the quick reference style I'd like to have on hand now.

      --
      Fear is the mind killer.
    18. Re:But eclipse is terrible at navigation by harrkev · · Score: 1

      I don't think the IDE is to blame for that.

      Maybe true, but I did read TFA, and I think that the point is that any language that almost forces you to use and IDE is doing something wrong.

      For the record, my primary languages are Verilog and Perl (plus TCL if I am forced to), so I really do not use any OO languages. But I still read these articles with facination.

      --
      "-1 Troll" is the apparently the same as "-1 I disagree with you."
    19. Re:But eclipse is terrible at navigation by Anonymous Coward · · Score: 1

      I wrote a simple file system indexer at my last job. Enter part of a class name and it loads the source file in an editor.

      cmd-shift-t in Eclipse does that for me. Congrats on reinventing the wheel rather than learning your IDE's capabilities.

    20. Re:But eclipse is terrible at navigation by H0p313ss · · Score: 2

      Eclipse failed because projects have to be small.

      Curious. My Eclipse project is the Linux Kernel. Works fine.

      Tip for young players: Eclipse runs on the JVM, the important bit is the last two letters "VM" - "Virtual Machine". The out of the box configuration gives Eclipse ~128MB of memory.... how many VMs do you run with that much memory? Change the default values to something sane (ie 2GB) and suddenly Eclipse is fast, responsive and useful. Remember VM = Virtual Machine.

      Word up. At IBM 100 projects is a small workspace.

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    21. Re:But eclipse is terrible at navigation by dotancohen · · Score: 2

      Maybe they should rename Eclipse to be called "tgacs".

      Have you never used Ctags? Works great with that other bit of software that has the letters VM in it: VIM.

      --
      It is dangerous to be right when the government is wrong.
    22. Re:But eclipse is terrible at navigation by kelemvor4 · · Score: 2

      Mine is "Beatify Code." That feature is the reason I bought slick. I don't use it as my main editor, though.. I paste code in, beatify, copy and paste back out in most cases.

    23. Re:But eclipse is terrible at navigation by UnknownSoldier · · Score: 1

      So I need 2 GB for a stupid IDE just to code??

      After 20 years of using IDEs I've switched to (g)vim and ctags. The text editor feels like an extension of my mind plus I don't have to put up with some IDE choking due to background tasks such as parameter matching, parameter completion, etc.

      And we wonder why software is slow and bloated these days ... no one gives a fuck about small and efficient anymore.

    24. Re:But eclipse is terrible at navigation by Nivag064 · · Score: 1

      -startup
      plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
      --launcher.library
      plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.100.v20110505
      -product
      org.eclipse.epp.package.jee.product
      --launcher.defaultAction
      openFile
      -showsplash
      org.eclipse.platform
      --launcher.XXMaxPermSize
      256m
      --launcher.defaultAction
      openFile
      -vmargs
      -Dosgi.requiredJavaVersion=1.5
      -XX:+UseParallelGC
      -XX:ParallelGCThreads=2
      -Duser.name=”XXX Y. ZZZ”
      -XX:MaxPermSize=512m
      -Xms2g
      -Xmx2g

    25. Re:But eclipse is terrible at navigation by MichaelSmith · · Score: 1

      I have worked on Java for many years without IDEs. I was recently put on this project where the software development environment was built around eclipse and I am the first to admit that eclipse was being used incorrectly. But its my only experience of using eclipse so I am reporting it as I see it.

    26. Re:But eclipse is terrible at navigation by ZenShadow · · Score: 1

      Oddly, I run a number of VMs that only have 128MB RAM and run just fine. They're complete Linux installs running web servers, NFS servers, custom apps, and more.

      Oh wait, you meant JVMs...

      Yeah, I think I'll not bother with Eclipse, thanks.

      --
      -- sigs cause cancer.
    27. Re:But eclipse is terrible at navigation by Pseudonym · · Score: 2

      I would far sooner write Java using Eclipse, and I would far sooner write C++, Perl or Haskell using gvim.

      Admittedly this could just be my limited experience, but Java seems pretty hard to write effectively if you don't have a refactoring editor. You could spin it as a shortcoming of the language, or you could spin it as a symbiosis between the language and the IDE. Which way you choose to interpret it largely depends on what barrow you're pushing.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    28. Re:But eclipse is terrible at navigation by delt0r · · Score: 1

      And you of course develop on these 128M RAM VMs right, and don't run them headless or anything... No.. Right. Its a stupid comparison.

      --
      If information wants to be free, why does my internet connection cost so much?
    29. Re:But eclipse is terrible at navigation by UnknownSoldier · · Score: 2

      > Java seems pretty hard to write effectively if you don't have a refactoring editor.
      That is exactly the problem! Any language that depends on having a good IDE is badly designed IMHO.

      Part of the problem is that the "standard" libraries are "invisible" APIs. You don't know them until you either
        a) memorize the function names along with the parameters, or
        b) rely on a tool to do it for you: either book-form, or electronic form.

        You can see this quite easily in C++ with all the bloat of the STL. While it is a beautifully designed API you still need a "reference" page in order to use it until you become familiar with it. In the pre-C++ days the problem wasn't as exasperated since all it was relatively easily to look up a function. With namespaces you can easily have many false positives due to lack of a _unique_ function name; you effectively only have a relative name.

    30. Re:But eclipse is terrible at navigation by Pseudonym · · Score: 2

      That is exactly the problem! Any language that depends on having a good IDE is badly designed IMHO.

      Alternatively, the IDE is properly thought of as part of the language.

      --
      sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
    31. Re:But eclipse is terrible at navigation by tuck182 · · Score: 1

      So if I pray in the name of your code, it can intercede? Sweet!

  2. Word by genocism · · Score: 5, Insightful

    I prefer writing in a word processor why should software development in an IDE be any different. Refactoring, code, memory, and performance analysis... All good things. Ohh and that little thing called debugging.

    1. Re:Word by equex · · Score: 5, Funny

      i code with a battery, a resistor and hit the cpu pins with it

      --
      Can I light a sig ?
    2. Re:Word by santax · · Score: 0

      I think it depends on what you are doing. Are you writing or debugging code? If you're writing it (and the language is supported) do it in Vim. You'll save lots of time. If you are debugging? Use a debugger! Then again, if you write in C#, use VS, because it is the best tool for the job. But in any case, think about what you are doing. Writing software, or debugging your code. Think about the language your code is written in. Then pick the right tool for that job.

    3. Re:Word by Anonymous Coward · · Score: 1

      Emacs is the right tool for every job!

    4. Re:Word by lattyware · · Score: 4, Insightful

      The article isn't saying IDEs are a bad thing, just that when an IDE is doing things that should be negated by the language (generate getters/setters anyone?) then it's a sign there is an issue.

      --
      -- Lattyware (www.lattyware.co.uk)
    5. Re:Word by santax · · Score: 3, Funny

      (obligatory) I run emacs on my mainframe, great OS and desktop-environment but I can't understand why Stallman didn't put a decent editor in it.

    6. Re:Word by gmhowell · · Score: 5, Funny

      i code with a battery, a resistor and hit the cpu pins with it

      Still haven't mastered butterflies, n00bz?

      --
      Jesus was all right but his disciples were thick and ordinary. -John Lennon
    7. Re:Word by daem0n1x · · Score: 5, Insightful

      Quite often I get the task of being the mentor of interns or newbies, many of them completely clueless. I also have given basic programming training for college students, usually C/C++ and Java.

      I always tell them to code using a text editor with syntax highlighting and then compile using the command line (in Windows, but preferably Linux).

      That way they can start building up knowledge about how the whole thing works from the ground up. If people start with a nice and cozy IDE they tend to think it's all magic going on. And then, when they need to solve any problem, they have no idea where the files are, their formats, their contents, etc.

      After getting acquainted with the bloody guts of the whole thing, they can start using tools to make it easier and faster. Using a good IDE has nothing wrong about it, if you really know what's going on under the hood. Magical thinking is an enemy of good engineering.

    8. Re:Word by mwvdlee · · Score: 3, Insightful

      So basically his entire argument boils down to "My programming language is better than yours"?

      --
      Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
    9. Re:Word by Anonymous Coward · · Score: 0

      How will I save the time using vim? I know my way around that UI, I just do not see any time saving features I can not get in Eclipse.

    10. Re:Word by RobinH · · Score: 5, Insightful

      There was an interview in the latest issue of Make Magazine with one of the creators of the Arduino. He said he's been trying to teach fundamentals of electronics to students (ohm's law, etc.) and they just weren't getting it, and he realized that wasn't how he learned it. He'd just started building stuff with the tools available, and when something didn't work, he was motivated to dig deeper and figure out why. He helped create the Arduino to be an easy way to get a light blinking without really having to know everything about how it worked, and then as you wanted to do more, you had to figure it out. The Arduino seems to be very successful with this strategy. That seems to fly completely in the face of your theory.

      --
      "I have never let my schooling interfere with my education." - Mark Twain
    11. Re:Word by lattyware · · Score: 4, Insightful

      No, "Java has language flaws that force you to use an IDE to work around them." is the argument. Yes, some other languages do it right and make for an easy way to show the flaws, but that's not the point. The point is that Java could be a better language.

      --
      -- Lattyware (www.lattyware.co.uk)
    12. Re:Word by WillKemp · · Score: 1

      The toggle switches on the front panel are broken from overuse, i guess?

    13. Re:Word by MartinSchou · · Score: 1

      Serious question:
      If the language itself is generating setters and getters, how do you differentiate between truly private variables and variables that should be accessible from outside (but through verified inputs/outputs)?

    14. Re:Word by Anonymous Coward · · Score: 5, Funny

      i code with a battery, a resistor and hit the cpu pins with it

      Still haven't mastered butterflies, n00bz?

      What did you think where Sandy came from?

    15. Re:Word by WillKemp · · Score: 1, Informative

      If you're writing it (and the language is supported) do it in Vim.

      If you've got a clue about programming, it doesn't matter if the language is supported or not. All you need is a text editor. But not vim, not unless you're doing a quick fix of something. I use vim heaps, but not for programming. I use geany for that. Gui text editors are so much more convenient than vim for anything other than editing config files.

    16. Re:Word by WillKemp · · Score: 4, Funny

      So basically his entire argument boils down to "My programming language is better than yours"?

      Of course. My programming language is always better than yours. This is slashdot after all!

    17. Re:Word by lattyware · · Score: 2

      Properties - you create your getter and setter as you would, but Java layers them onto the attribute so you don't have to actually use getblah/setblah everywhere. C# does it (as do many other languages, but as we are talking Java, C# is the obvious comparison to make).

      --
      -- Lattyware (www.lattyware.co.uk)
    18. Re:Word by chrismcb · · Score: 1, Troll

      That is pretty hard core. Throw them in the deep end, AND take away their useful tools?

    19. Re:Word by daem0n1x · · Score: 3, Interesting

      According to the Wikipedia page: "It is designed to introduce programming to artists and other newcomers unfamiliar with software development".

      I train engineers, not artists.

    20. Re:Word by daem0n1x · · Score: 1

      Please explain to me: In what way I'm throwing them in the deep end and taking away their useful tools?

    21. Re:Word by petermgreen · · Score: 1

      Personally I like the delphi approach. When you declare a property you tell the compiler how to read and write it. You can either use a field directly or use a function. So there is no need to generate loads of boilerplate gettters and setters but if you later need to change a property to add verification or side effects or whatever you can add a getter or setter at that stage without needing to change the code that uses the property.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    22. Re:Word by SerpentMage · · Score: 5, Insightful

      Oh this is fucking bullshit, there I said it! I have been coding since I have been 13 years old, which means I have been writing code for 30 years, and 20 years professionally. The idea that you don't need an IDE is a hair brained idea. How on earth are you supposed to keep track of the several thousand files? When I work on projects I like to keep the entire architecture and structure in my head. I use the intellisense system to find for me the proper class. I am not talking about documentation as that goes without saying. I am talking about using a naming convention so that you can easily find functionality. I personally hate code where I cannot understand what the functionality represents due to a bad naming convention.

      If I have to keep track of every method name, and its parameters then I am definitely wasting time on stuff that does not need thinking about. I would be wasting time trying to get the right word, or type, or some little buttwipe problem. If you say, "oh but wait you should be able to keep track of the methods." I reply, "yeah please write some professional code!" Let's put it this way. How come JetBrains makes money from providing IDE's that do exactly what the article author is bad?

      BTW as one other commentator said, "you could apply a google principle" and that I don't discount. That could be interesting.

      --

      "You can't make a race horse of a pig"
      "No," said Samuel, "but you can make very fast pig"
    23. Re:Word by sproketboy · · Score: 1

      Except properties at the language level is a bad idea since it hides performance deficits and there's no good convention for it.

    24. Re:Word by lattyware · · Score: 1

      Please clarify those comments, I don't see what you mean at all there.

      --
      -- Lattyware (www.lattyware.co.uk)
    25. Re:Word by Anonymous Coward · · Score: 5, Funny

      The point is that Java could be a better language.

      That is not really something we question. The thing that is up for debate is if Java could be a worse language.

    26. Re:Word by Anonymous Coward · · Score: 0

      If you feel that an IDE is how you best program, then good for you, keep using it. However, a swiss army knife (IDE) isn't always the best tool for the job -- I've been comfortably developing for Wordpress and PHP using little more than a console shell and Vim, and I get away with it because my corner of the application isn't monolithic. There will indeed be times when you don't know the nature of a function, which is why I also keep a browser window handy with which I can pull up docs on whatever feature (e.g. PCRE) I'm interested in. And for those adventurous enough to explore the feature, Omnicompletion is a component of Vim (and perhaps Emacs, which I've never taken the time to learn), or you could always use grep or Select-String.

      I probably couldn't pull the same act on a 20+ project Visual Studio solution, for the reasons you describe, but there does get to be a point where reliance on an IDE for simple tasks is positively stupid. I won't discount the value of a particular approach simply because it doesn't mesh with my day-to-day activities, but instead argue that there's a time and place for everything. Perhaps the nature of your work is such that your statement holds true, or perhaps you simply don't have a full understanding of all the tools at your disposal (which, considering the plethora of editors and IDEs out there, is a reasonable expectation).

    27. Re:Word by sproketboy · · Score: 4, Interesting

      In Java since properties are explicit it's obvious for example that the following would be problematic.

      for (int j = 0; j getCount(); j++) {
      }

      I'm calling a method which is more expensive but worse the method's result is not deterministic. What if this method is a part of a web service or using a database call? Again, it's obvious when code-reviewing that this should be written like:

      int count = getCount();
      for (int j = 0; j count; j++) {
      }

      Unfortunately C# would use:

      for (int j = 0; j Count; j++) {
      }

      which is less obvious.

      In fact there's so much bad code like this in C# that they had introduce the strange "yield" keyword to help alleviate the issues caused by this feature.

      Properties at the language level was a bad idea.

    28. Re:Word by lattyware · · Score: 3, Informative

      That is an issue that is solved by documentation and naming properties well, as far as I see it. As to yield being anything to do with this, I don't see it, a quick google seems to show that yield does a similar thing in C# to Python, which is generators - lazy computation of iterables - which is an awesome language feature I love.

      --
      -- Lattyware (www.lattyware.co.uk)
    29. Re:Word by kiddygrinder · · Score: 1

      if you have to worry about other people's stupid code messing with yours you're already fucked.

      --
      This is a joke. I am joking. Joke joke joke.
    30. Re:Word by YttriumOxide · · Score: 3, Interesting

      I train engineers, not artists.

      Depending on what you're aiming for, this might be your problem.

      Turning out the necessary "code monkeys" to produce stuff to a spec written by someone better than them; sure... but if you want a software developer that produces something great, you need an artist.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    31. Re:Word by daem0n1x · · Score: 1

      I train engineers, not artists.

      Depending on what you're aiming for, this might be your problem.

      When did I exactly said I had a problem?

    32. Re:Word by Simply+Curious · · Score: 1

      In addition, you then do not need to have the deadly fear of public attributes that permeates Java programming. If I want a boolean configuration for some class, I can just make a public boolean value to be modified. If I later decide to add some extra processing whenever that value is changed, I can make it into a property, without changing the outward-facing interface. This change from publicly accessible variable to a function is impossible in Java without changing the calling code, and so you end up with the common wisdom that everything must be accessed through getters and setters in case you want to change it later.

    33. Re:Word by wed128 · · Score: 1

      Damn right. Works pretty good even for C#! (the MSVS users i work with think i'm eccentric and annoying)

    34. Re:Word by lattyware · · Score: 1

      Exactly, that's why it's a language feature that can reduce the boilerplate generation IDEs currently have to do for Java.

      --
      -- Lattyware (www.lattyware.co.uk)
    35. Re:Word by wed128 · · Score: 2, Funny

      Java could be worse. It could be Ruby.

    36. Re:Word by i · · Score: 3, Interesting

      When I started coding I had to punch my programs in punchcards. A pity if You drop them and didn't have numbered them... :)

      Then I advanced to filling in the code in forms to be delivered to the girls in the punching department. As they were young and sweet I often delivered the code forms myself. :)

      After a Year we got these marvellous 3270 terminals where we could code in green on black - and could correct errors without Tipp-Ex (http://en.wikipedia.org/wiki/Tipp-Ex) !! I felt I was on the technical frontier!! :D

      --
      Mundus Vult Decipi
    37. Re:Word by YttriumOxide · · Score: 5, Insightful

      When did I exactly said I had a problem?

      Personally, I'd say here:

      Quite often I get the task of being the mentor of interns or newbies, many of them completely clueless.

      And here:

      If people start with a nice and cozy IDE they tend to think it's all magic going on. And then, when they need to solve any problem, they have no idea where the files are, their formats, their contents, etc.

      In my opinion, if your students end up being like this due to usage of an IDE, the problem lies with you as a teacher, not the IDE.

      Software Development is a rather "odd" thing in many ways. It's highly technical; painfully unforgiving in the rigidity of language syntax; and generally visually extremely unattractive (the code itself). However it's also something where you are creating something, from nothing, with your own unique style and way of doing things. That is almost the very definition of art.

      When teaching, you need to remember both sides; otherwise you're - as I stated - churning out code monkeys and not software developers.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    38. Re:Word by WrecklessSandwich · · Score: 2

      According to the Wikipedia page: "It is designed to introduce programming to artists and other newcomers unfamiliar with software development".

      I train engineers, not artists.

      It sounds like you don't deal with embedded systems much. What it does a great job of for engineers is to act as an API that abstracts away all of the stuff specific to the particular AVR chip involved. Things like setting up a timer interrupt without having to know the specific configuration registers inside and out. However, that's all still 100% accessible if you want/need it. The editor itself is most certainly not a full-fledged IDE either.

    39. Re:Word by wed128 · · Score: 0

      You've made the insulting assumption that engineering is not an art. Do you think the engineers building bridges are not artists? do you think that engineers do not come up with elegant (and even interesting) solutions to the problems they face? The "Artists" you speak of produce great things, no doubt. But to make those great things scalable and maintanable, you need an engineer.

    40. Re:Word by marcansoft · · Score: 0

      It's successful itself, but not that successful for its users, though. One of the chronic problems of Arduino is that many people become mentally attached to it and exhibit extreme reluctance to ever move beyond it, learn how it really works, or (gasp) build a project that isn't an Arduino shield. When they find a problem that the Arduino isn't great at, they go to great lengths to solve it while keeping the Arduino (using e.g. more external logic, more than one Arduino, or, in extreme cases, throwing an FPGA on top of the Arduino - and implementing a coprocessor on it that is more powerful than the Arduino itself).

      Very often, these problems can be solved much more efficiently by building your own hardware from a bare microcontroller, which is actually a very easy task - the Arduino is little more than a breakout board. Alas, while some Arduino users do realize this (and use bare AVRs, both the ones on Arduinos and other models, or even other brands, to great effect), most do not. Now that Arduino is moving to ARM, this will get marginally worse - if people aren't taking the plunge and figuring out how to use a bare AVR (which is completely trivial to bring up on a breadboard), moving to a surface-mount part that has slightly more complex requirements is not going to make things better.

      The same thing happens, to a different extent, on the software side. I've seen many projects that are coded as a humongous unreadable Arduino sketch, when by that point the authors really ought to have learned how to modularize their code (and format it properly, too). It doesn't help that the Arduino IDE isn't a particularly great text editor.

      The Arduino is a great learning platform, but it does the "make it easy" experience so well that people are very afraid of moving beyond it, and this ends up creating an artificial learning curve further down the line that is hard to get past. If you're forced to experience bring-up of a micro on a breadboard from the first day, you quickly figure it out (it's really easy), but if you've been comfy in Arduino land for months/years, it feels a lot scarier than it really is. (What do you mean I have to provide my own regulated power supply? And the pins, they don't have labels! Where is the USB connector?). I don't even blame the authors of Arduino; for example, they do include code that can program a bare AVR using an Arduino as a programmer (with visual wiring diagrams even, IIRC), which is exactly the kind of thing that you want to help people bootstrap themselves, but people still just aren't doing it.

    41. Re:Word by SuricouRaven · · Score: 1

      My method involved measuring resistance finger-to-finger and across the tongue, then calculating why licking a 9V battery tingles but just touching it doesn't.

    42. Re:Word by neokushan · · Score: 3, Insightful

      Shocker of the day: Some software is good for some things but not others.

      --
      +1 IDisagreeSoHeMustBeATrollOrAnAstroturferOrAShill
    43. Re:Word by elbobo · · Score: 3, Informative

      I've been programming since I was 8, which makes 28 years of programming (probably more than half of that time professionally). I've only started using IDEs in the past few years, and only because they're pretty much not optional for a lot of platforms these days.

      I think I was better off before IDEs. I don't write less bugs now, and I don't feel like my programming is qualitatively better because of the IDEs. I find my work environment is now far more cluttered, and I spend more time navigating my tools rather than navigating my code.

      Perhaps you're mistaking "tab completion" for IDE? You don't need an IDE for tab completion. I've had that for over a decade in vim.

    44. Re:Word by i_ate_god · · Score: 1

      I like Groovy for this.

      class Foobar {
              String hello;
              String world;
      }

      will compile into:

      public class Foobar {
              private String hello;
              private String world;

              public void setHello(String prop) {
                      hello = prop;
              }

              public String getHello() {
                      return hello;
              }

              public void setWorld(String prop) {
                      hello = prop;
              }

              public String getWorld() {
                      return world;
              }
      }

      --
      I'm god, but it's a bit of a drag really...
    45. Re:Word by YttriumOxide · · Score: 1

      You've made the insulting assumption that engineering is not an art.

      Actually, I'd say daem0n1x made that assumption with his statement "I train engineers, not artists".

      If he'd instead said something more like "I train engineers - artists with analytical skills" I would've had no beef with him.

      But to make those great things scalable and maintanable, you need an engineer.

      As a software developer that prides myself on the scalable, maintainable, elegant code that I write; I completely agree with you. I don't however accept that elegance can be achieved with the mechanical act of coding (or any other kind of engineering) alone... a level of art is needed to make it great.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    46. Re:Word by hcs_$reboot · · Score: 1

      M-x emacs

      --
      Slashdot, fix the reply notifications... You won't get away with it...
    47. Re:Word by Anonymous Coward · · Score: 0

      Naw, that's just old fashioned human laziness. If blame can be shifted, blame will be shifted. Just don;t let the buggers shift the blame to the IDE. There you go. Same for you, too. Don't shift the blame for other people's inability to learn onto an IDE. If they don't want to learn to do their jobs, fire them. It will do everyone a favor.

    48. Re:Word by Anonymous Coward · · Score: 0

      Cannot recommend this approach enough, especially with beginning programmers or ones
      needing weaned off of an IDE.

      'Hey, do you know Visual C++? I heard it's harder than Visual Basic - why bother?'

      No, there's no such language as Visual C++.
      It's just a product

    49. Re:Word by Anonymous Coward · · Score: 0

      How on earth are you supposed to keep track of the several thousand files?

      It's called git/perforce/svn and midnight commander.

      When I work on projects I like to keep the entire architecture and structure in my head.

      It's called git/perforce/svn.

      I use the intellisense system to find for me the proper class.

      It's called cscope/ctags.

      I am talking about using a naming convention so that you can easily find functionality. I personally hate code where I cannot understand what the functionality represents due to a bad naming convention.

      It's called doxygen and a browser or pdf reader.

      Hope that settled your needs.

    50. Re:Word by javaxjb · · Score: 2

      By lengthening the round trip time from coding to compiling you're decreasing the rate of repetition (and success). It would be better to get the fundamentals of the language down first and then work on scenarios where you might want to make patches on a remote console-based system. Then go through some exercises where the students patch bugs using a console-based editor and compile/build commands.

      --
      Programmers in mirror are brighter than they appear
    51. Re:Word by doti · · Score: 1

      you don't know 10% of vim features.

      I'm using vim *exclusively* for more than a decade, and I'm sure I don't use half of its power.

      --
      factor 966971: 966971
    52. Re:Word by DrXym · · Score: 0

      Vim and / or emacs are rarely ever the right tool for the job for development any more. I can't think of many reasons I would suffer either of them unless I was stuck in a terminal and had to edit a file.

    53. Re:Word by crazyjj · · Score: 5, Funny

      When I was in college there was a poster that hung in one of the professor's offices. It was a picture of a stern looking old fart glaring at the camera, with the caption "Programming: You're doing it all wrong." Every time one of these discussions comes up on /. I think about that poster. Everyone chimes in with why you have to use X language, why assembly is the ONLY way to program, why all IDE's are evil and you're a terrible programmer unless you use a text editor/VI/punch cards. Blah, blah, blah.

      I am a nerd. But sometimes my fellow nerds REALLY get on my fucking nerves. Thank god I don't have to hang out with you lot at parties.

      --
      What political party do you join when you don't like Bible-thumpers *or* hippies?
    54. Re:Word by crazyjj · · Score: 3, Insightful

      The point is that any computer language could be a better language.

      FTFY

      --
      What political party do you join when you don't like Bible-thumpers *or* hippies?
    55. Re:Word by crazyjj · · Score: 1

      "Everyone else but me is doing it wrong" should be the official /. motto.

      --
      What political party do you join when you don't like Bible-thumpers *or* hippies?
    56. Re:Word by Anonymous Coward · · Score: 0

      What the hell are you talking about? The optimization "int count = getCount()" is incorrect in the exact cases you highlight.

      Having said that, I don't see why j.getCount() is better than j.Count. It's syntactic sugar. Are you saying it's harder to grep for j.Count than j.getCount()? Except, it isn't, if you use \. in the regexp.

    57. Re:Word by Anonymous Coward · · Score: 0

      (obligatory) I run emacs on my mainframe, great OS and desktop-environment but I can't understand why Stallman didn't put a decent editor in it.

      You asked... http://emacswiki.org/VimMode

    58. Re:Word by betterunixthanunix · · Score: 1

      How on earth are you supposed to keep track of the several thousand files?

      With a directory hierarchy?

      When I work on projects I like to keep the entire architecture and structure in my head

      If you can do this, then what is your IDE doing for you?

      I use the intellisense system to find for me the proper class. I am not talking about documentation as that goes without saying. I am talking about using a naming convention so that you can easily find functionality.

      You use a system to find the proper class, but you also have a naming convention to make that easy? Why not just use grep -rl "class SomeUsefulClassName {" (or whatever your preferred curly brace placement is)?

      If I have to keep track of every method name, and its parameters then I am definitely wasting time on stuff that does not need thinking about.

      See, now you are finally talking about something that an IDE can help with. Why even bother with the other stuff? You need a system that shows you the interface of a class and what parameters the methods take, and most IDEs will have that in one form or another.

      My own take on IDEs is this: their utility is inversely proportional to the power of the language. Thus a C++ or Java IDE is absolutely necessary, whereas a Lisp IDE is just nice to have available. In a language where you are able to redefine methods or classes at runtime, where getting a REPL is easy, where you have the ability to change the way method calls are dispatched, and so forth, the number of useful things an IDE does is dramatically reduced. Sure, I use SLIME in my day-to-day work, but if for some reason I couldn't use SLIME I would still be OK.

      --
      Palm trees and 8
    59. Re:Word by BasilBrush · · Score: 4, Insightful

      I train engineers, not artists.

      Ahem. There's a reason Knuth named his series of books "The Art of Computer Programming".

    60. Re:Word by Coriolis · · Score: 1

      That is not the only thing that "yield" is for; it can be used to perform just-in-time execution of memory- or CPU-intensive operations, but it can also be used to make composable chains of list iterators that only process as much of the list as they need to satisfy the caller's requirements. Microsoft's own guidance explicitly states that properties should avoid side effects. Anyone dumb enough to code like that is not smart enough to think of using "yield", or to use it correctly.

      --
      Rgasuya aata! : I have been coding Perl and cannot tell where my fingers are now!
    61. Re:Word by pjt33 · · Score: 3, Informative

      ... they had introduce the strange "yield" keyword to help alleviate the issues caused by this feature.

      Or, from a different perspective, they reintroduced a concept (coroutines) that BCPL had but C dropped, forcing people to use obscure hacks. What that has to do with properties, I don't know.

    62. Re:Word by Anonymous Coward · · Score: 0

      You deserve to be fired for making their work harder than it needs to be. Another give them a hard time jerk?

    63. Re:Word by Anonymous Coward · · Score: 0

      Having said that, I don't see why j.getCount() is better than j.Count.

      j.getCount() = 4 will throw a compiler error in most languages. If you use j.Count, then you can do bad things like that with relative ease.

    64. Re:Word by squiggleslash · · Score: 2

      Perhaps I'm misunderstanding, but getters/setters isn't a programming language thing, it's a programming pattern thing. I'd expect an IDE to help with that. I can't see how a better language would deal with not having to put in a particular pattern.

      Yes, a major problem with the whole JavaBeans concept is that it requires you code like that. And I'm equally sure Sun could have standardized on an entirely different implementation that would have been less verbose, but they didn't, and that has nothing to do with Java.

      --
      You are not alone. This is not normal. None of this is normal.
    65. Re:Word by Anonymous Coward · · Score: 0

      Any real programmer knows the emacs command C-x M-c M-Butterfly.

    66. Re:Word by lattyware · · Score: 1

      Of course, by why not talk about it and potentially see those changes happen?

      --
      -- Lattyware (www.lattyware.co.uk)
    67. Re:Word by Anonymous Coward · · Score: 0

      Even better, you could use a notepad a pen to keep track of everything! I mean, seriously, who needs a power drill when there are screwdrivers and hammers?

    68. Re:Word by lattyware · · Score: 1

      Because you can have a language feature like a property (see C#, Python, D, etc...) which allows you to produce getters and setters that act like an attribute, meaning you don't have to pre-generate them to ensure your interface remains the same when you decide you need your attribute to do something.

      --
      -- Lattyware (www.lattyware.co.uk)
    69. Re:Word by Greyfox · · Score: 2
      You organize your code into libraries along functional lines and manage them separately. If you have "several thousand" files, you farm each library out to a separate team. I've never run across a company where one person has been responsible for managing hundreds of files, much less thousands. I've been on projects with 40-50 individual files that have had teams of 4-6 people working on them. Start getting up into the hundreds, even if they're bloated java projects, and you'll start running into projects with 4-5 person teams managing individual libraries of functionality, and several such teams company-wide. Usually such teams will have architects and project leads who know how the entire thing fits together.

      I've gotten to the point, in code bases where I've been on such teams, where I actually do know the functionality contained in each file of the code I'm responsible for, maybe 40-50 files at most. And I know most of the functions therein as well. It's not uncommon for me to get a bug report and know the name of the function the problem's in. Since I have the entire design in my head, I can push it around and have a pretty good idea of how things will fit. This is not hard, but it's easier to make excuses about how hard this is. Anyone claiming to have to deal with thousands of files in such a disorganized fashion is probably doing something horribly, horribly wrong.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    70. Re:Word by mark-t · · Score: 1

      I might suggest that what differentiates an artist from someone who builds things is that artists actually create something that didn't exist previously. This is not the same thing as building in that an imaginative and creative process is involved (although building can definitely be a major part of creating)

      What creative process do engineers generally practice as a part of their job function, exactly? They are certainly building bridges, but it's pretty hard to argue that they actually *create* them. That said, an engineer who *designs* a bridge could reasonably be considered an artist by the notion I've presented above, however.

    71. Re:Word by Anonymous Coward · · Score: 0

      You seem to completely miss the point of properties in the C# language and have absolutely no idea what the yield keyword is for. From your post, you get off track very early, so I think it might be easiest to explain where you have gone wrong at the start and hopefully the rest falls into place.

       

      In Java since properties are explicit it's obvious for example that the following would be problematic.

      for (int j = 0; j getCount(); j++) {

      }

      The problem: it is not obvious that the above example would be problematic. It is only obvious that it could be. If getCount() has to do work, that is, exhibits behavior, it would be problematic. If getCount(), on the other hand, simply reflects the state of a value the object holds, it would not be. The point of poperties is to allow there to be a syntactic difference in getting values from an object's state and from an object's behavior. Calling a method GetCount() implies work must be done to return the value and a property named Count implies no work needs to be done, it is simply a reflection of the object's state. And that is the manner in which properties should be used. This can be used improperly, and indeed getCount() could actually just return a random number. If you feel this distinction between state and behavior is too easy to abuse, you should avoid languages that allow it. If you feel it is unnecessary, you should avoid languages that implement it. But to display such a poor understanding and call it a categorically bad idea is foolish.

    72. Re:Word by BonThomme · · Score: 4, Funny

      you did that wrong

      "Everyone else is doing it wrong."

    73. Re:Word by dotancohen · · Score: 1

      As another VIM user who is always looking at IDEs but can never commit, which IDE did you switch to? And how do you get by without VIM's navigation, macros, custom mappings, etc? Serious question, I'm looking for suggestions. I've tried all the Eclipse and Netbeens VIM plugins and they all have me running back to VIM.

      --
      It is dangerous to be right when the government is wrong.
    74. Re:Word by box4831 · · Score: 2

      "Everyone else but me is doing it wrong" should be the official /. motto.

      I notice this is particularly true here on the topic on how to be a parent.

      "You let your kid watch tv for 30 seconds unsupervised while you took a leak? What a terrible parent. I set my kids up on a OLPC to read various news sources and wikipedia within view of the bathroom so I can supervise them. I care about my children enough to raise them to be Educated, Well-Informed, Critical-Thinking (TM) adults. I feel sorry for your kids. I may give them a bigger tip when they pump my gas, but don't count on it."

      --
      Miller Lite tastes like water that's somehow managed to rot.
    75. Re:Word by Anonymous Coward · · Score: 0

      Or you could just show them where the files are instead of torturing them.

    76. Re:Word by elbobo · · Score: 1

      If you're working with Java, I've got no suggestions. I'm living in an Objective-C world at the moment, so I primarily work with AppCode. AppCode has vim keys built in, so I feel mostly at home. It's still way too bulky though. IDEs feel like trucks, when I'd rather be riding a bike.

      Presumably JetBrain's Java IDE also supports vim keys.

    77. Re:Word by Anonymous Coward · · Score: 0

      40 or 50 files for 4-6 people? Man color me jealous my project team is 6 people for 40k~ files.

    78. Re:Word by drinkypoo · · Score: 1

      Gui text editors are so much more convenient than vim for anything other than editing config files.

      It's called gvim, and it's really quite nice. The menus tend to show you the keyboard shortcuts, too, so you can learn them by osmosis. It also has a tardmode so you don't have to remember which mode you're in.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    79. Re:Word by zakkudo · · Score: 1

      Vim is a power drill. An IDE is more for a Dremile. You better hope you can find the correct attachment...

    80. Re:Word by Anonymous Coward · · Score: 0

      Just because you are unable to know that, it doesn't mean that others can't.

      By the way, an IDE is an integrated development environment. It's nothing more than a glorified text editor with a series of embedded features. Meanwhile, you are quite free to use development environments which aren't integrated, and still get stuff done without absolutely any hastle. There are debuggers which aren't built into a glorified text editor, along with code profilers, source code analyzers, stream editors, versioning systems, scripting tools... essentially everything.

      Your complain boils down to whining that it is impossible to ride a bicycle without the training wheels. Well... Others manage to do that quite well.

    81. Re:Word by Anonymous Coward · · Score: 0

      The arduino is a hobby product. The GP trains professionals. Two VERY different groups of people.

      This isn't a discussion that can be settled in a binary fashion. Both approaches work depending on the people involved.

      In my experience, a lot of professional coders just do the job because it's a job. They only care about meeting their project requirements and their output works well enough to pass the tests. There is no motivation to understand what goes on underneath.

      If you treat all coders in the same way you'd treat a group of motivated enthusiasts, you're going to have sub-par results.

    82. Re:Word by Anonymous Coward · · Score: 0

      Damn right it's better than yours;
      I could teach you, but I'd have to charge;

    83. Re:Word by geminidomino · · Score: 1

      K-k-k-kamikaze Koding!!!!

    84. Re:Word by Anonymous Coward · · Score: 0

      If you think yield is strange, you should really delve further into IEnumerable and Language Integrated Query. It was introduced for very good reasons.

    85. Re:Word by Anonymous Coward · · Score: 0

      I've been writing software since I was 14 a long, long, long time ago in a place far, far, far away. I started with BASIC, then taught myself first Fortran, and then 8080, Z80, 6800, and 6502 assembly while still in high school. I even wrote a primitive editor in assembly to convert/disassemble assembly into machine language for me. I took a summer class on Pascal in the summer before my senior year. I took a mandatory class on Fortran in college and then stopped programming until 1996 when I discovered Linux and have been using Linux ever since.

      The last 16 years I have been on Linux with a mixture of C,C+,Python,Bash and recently rediscovered the awesomeness that is Fortran. Fortran 90/95 is *not* the Fortran that I remembered.

      It wasn't until I discovered Linux and more specifically POSIX that I finally understood the difference between excellent documentation and craptascular documentation. Before Linux I had to essentially code up my own implementations of functions to do stuff for me as I didn't know of any documentation.

      Based on your personal experience I'm going to guess that you're coding on a Windows platform with colleagues who only know Windows and it's design. Based on your description most of the functionality you need is stuff that you and your team have to implement because it's not provided by your operating system. I get why you really **need** an IDE to run interference for you.

      My experience on Linux has been: I need a function that can do "foobaz" for me. I wonder if there is such a thing? (open a terminal, apropos "foobaz", oh look there's a POSIX function that will do that for me. I just need to include foobaz.h and call function foobaz with arguments foo & baz.). For the languages that I use (C,C++,python,bash, and now fortran) most of the documentation is excellent and easy to find (man,info,html) and emacs is only editor I want or need to do my coding.

      The best thing to ever happen for me as far as programming goes is having a well thought out standard like POSIX, or ANSI C/C++/FORTRAN or a well designed self documented language like Python or BASH.

    86. Re:Word by Anonymous Coward · · Score: 0

      Oh yeah, well, I've been programming since I was 1, when I started putting IDEs in my mouth and spitting them up a few seconds later.

    87. Re:Word by Beezlebub33 · · Score: 2
      I occassionally copy the code out of Eclipse, paste it in Emacs, do what I want to do, and then copy and paste it back into Eclipse.

      I coded in emacs for a good 15-20 years. The usefulness of macros is so strong that it is really hard to part with. That said, Eclipse is my now main tool because it is integrated. Everything is right there, with a nice source code tree (showing me what things I've changed relative to svn), obvious what things are in the classpath, what maven is doing (built-in pom editor), checkstyle integration, autocompile, live debugging (i.e. change the code during debugging and it restarts the function you were in, sweet!), etc.
      emacs is better for text editing. For most programming tasks, I'm only editing text for some of the time and Eclipse is much better for those non-text editing things.

      --
      The more people I meet, the better I like my dog.
    88. Re:Word by kenorland · · Score: 0

      The idea that you don't need an IDE is a hair brained idea

      If you code in Java or C++, you definitely do need an IDE, because those are really badly designed language.

    89. Re:Word by daem0n1x · · Score: 1

      The round trip time is negligible. Setting up the project is trickier without an IDE, but you only have to do that once.

    90. Re:Word by daem0n1x · · Score: 1

      WTF?

    91. Re:Word by daem0n1x · · Score: 1

      Of course, and wipe their asses too, why not?

    92. Re:Word by daem0n1x · · Score: 1

      If you want everything to be nice and easy all the time, don't be a geek. Go flip burgers, that's pretty easy.

    93. Re:Word by Anonymous Coward · · Score: 0

      If you haven't created a setter, then j.Count = 4 will throw a compiler error as well. (Assuming, of course, your language and compiler actually support properties, and aren't otherwise brain-dead.)

    94. Re:Word by assertation · · Score: 1

      You may laugh, but people actually did that.

      Back in my student lab assistant days I had a patron taking Ada programming classes and he used WP 5.0 ( pre gui ) for coding.

    95. Re:Word by Anonymous Coward · · Score: 0

      Sort of. Visual C++ is a distinct dialect of C++.

    96. Re:Word by betterunixthanunix · · Score: 1

      I can't see how a better language would deal with not having to put in a particular pattern.

      Actually, there are a number of design patterns that exist solely to deal with deficiencies in languages. The pattern to comes to mind for me is the Visitor pattern -- it is basically pointless in a language that has multiple dispatch.

      --
      Palm trees and 8
    97. Re:Word by Anonymous Coward · · Score: 0

      > How on earth are you supposed to keep track of the several thousand files?

      That's the point. Using a language that allows you to do the same without having several thousand files to start with.

    98. Re:Word by Half-pint+HAL · · Score: 2

      I'm calling a method which is more expensive but worse the method's result is not deterministic.

      Hold on, the whole point of using getters and setters in OO is that (theoretically) all properties should be private. This is so you can completely re-engineer the internals without negatively affecting the program that owns the object instance.

      Methods are not necessarily non-deterministic, and getters and setters should be entirely deterministic.

      HAL.getHeightInInches() should give the same result as HAL.getHeightInMetres(), except using a different scale. The programmer shouldn't need to know whether the internal representation is metric or imperial.

      OK, so in the real world, we need to be able to optimise code, but that's actually another weakness in the language. No, not because the compiler should optimise it, but because languages don't enforce optimisation as the final stage. If you're chosing between properties and methods at the outset, you're optimising too early, and you're making your optimisations part of the fundamental architecture of the system, which doesn't help maintainability.

      An integrated development system (not "environment") that folded away optimisations until the last stage would be a wonder indeed.

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    99. Re:Word by Half-pint+HAL · · Score: 1
      Or to translate:

      object_instance.property = 1

      Doesn't need to set a property -- it can call a function or procedure that will change the internal state of the object such that it appears that property is a property.

      eg object.length = 5 actually calls the hidden function object.length.assign()(or similar) which stores the length however it sees fit.

      Getters and setters really annoyed me at uni (at the turn of the century), and I never understood why Java didn't work like C# does now. But I didn't know Python did that... must dig deeper into the docs....

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    100. Re:Word by Anonymous Coward · · Score: 0

      Most of the "buttwipe" problems you mention are symptoms of using a braindead language. That was the whole point of the article. If you use a smart language correctly, it simply does not result in an explosion of classes and methods that necessitate an IDE to keep track of everything for you. On top of that, Emacs has solved the "get the right word" problem since forever ago, and I cannot begin to comprehend how an IDE fixes the problem of a bad naming convention.

    101. Re:Word by Chris+Walker · · Score: 2

      Well I've been programming for 40 years (since I was 14), and resisted IDE for a long time until I realized that I was being an idiot and embraced Eclipse. It's a tremendous productivity booster, I can't imagine not having the wonderful refactoring tools it offers, and I have no interest in navigating folder hierarchies. But it's a personal choice, use whatever you prefer and don't worry about what others are using.

    102. Re:Word by Bob9113 · · Score: 4, Insightful

      I have been coding since I have been 13 years old, which means I have been writing code for 30 years, and 20 years professionally.

      9, 33, and 18 here.

      The idea that you don't need an IDE is a hair brained idea.

      I have worked on large systems using IntelliJ IDEA and Eclipse, and have written Eclipse plugins. I currently use Emacs without any of the bells and whistles, just syntax highlighting and paren matching.

      How on earth are you supposed to keep track of the several thousand files?

      Well designed project components and rational directory structure.

      I am talking about using a naming convention so that you can easily find functionality

      Yeah, that's a good example of one of the things professionals do to keep large systems manageable. It is one of the habits that keeps your system in a place where an IDE is not required.

      If I have to keep track of every method name, and its parameters then I am definitely wasting time on stuff that does not need thinking about.

      You are making an implicit statement that with an IDE you don't have to do that, and without an IDE you do. The latter is not the case. When coding a class that calls other classes, you have the other classes or their documentation on screen (rotating through buffers if you are using several in rapid sequence), and they (or their documentation) is cleanly structured so you can find the calls that fit your context quickly.

      It is definitely a different way of doing things than using the IDE to autocomplete, but it means you have the target code on screen. That makes it faster to verify fine points of the target functionality when you are not sure what it should be doing and gives an opportunity to catch bugs or mismatches in intent. It essentially inlines code review into the standard workflow, with the most often-used code getting reviewed most often.

      I'm not saying it is objectively better for everyone and every context than using an IDE. It's a tradeoff, but it is a valid one with upside that is worthy of consideration.

      If you say, "oh but wait you should be able to keep track of the methods." I reply, "yeah please write some professional code!"

      Well, I don't think you should keep every method in your head, but to address the latter part of your statement: The system I'm working on at the moment is written in Java, Javascript, Python, Perl, SQL, and some shell scripting, has custom coded EC2 cluster management, does load testing at up to a million calls per second using our standard in-house ten slave cluster, has been run with one hundred of Amazon's largest nodes, and aggregates the results into a central database where they are accessed and charted as they happen.

      The fact that you prefer to do it a different way and can write a dandy appeal to ridicule is hardly a compelling argument.

      How come JetBrains makes money from providing IDE's that do exactly what the article author is bad?

      Presumably because a lot of people like to use IDEs and are willing to pay for a good one. But that does not mean that is the only way to program. McDonald's makes a lot of money selling hamburgers, but plenty of people make their own and some people don't even eat meat. The mere fact that something sells well is no argument that it is a requirement for some task for which it can be used.

    103. Re:Word by CodeManBob · · Score: 1

      This would eliminate the expense of calling the getCount n times and limit the scope of your loop control variable to the loop itself. The concept is the same in C#.

      for (int j = 0, n = getCount(); j < n; j++) { ...
      }

    104. Re:Word by Anonymous Coward · · Score: 0

      More like, "if you're not programming in Clojure, Haskell, or Scala, you're an idiot. Because I use those languages, and I'm smart - TOO SMART to use an IDE, in fact. IDEs just get in the way of my giant, dangling balls - they're the size of grapefruit, my friend. From this, we may safely conclude that anybody who uses an IDE has small balls, and is probably only half a man."

    105. Re:Word by elbobo · · Score: 1

      I haven't done much Java work, but it sounds like it greatly benefits from an IDE (which is the argument the linked article is making against Java and IDEs, I guess).

      For the work I do at the moment (Objective-C), I don't think the IDE is providing any great benefits, and in many ways I think it gets in the way. Although perhaps the refactoring tools would be the exception, as you say. Being able to quickly rename methods/variables/etc or change method signatures without fear is a big gain. But I'd probably be more productive if I got those refactoring tools through a vim script.

      I think a big part of the problem for me is the monolithic nature of IDEs. They're conceptually a collection of separate tools, but visually they're one massive blob of UI. Perhaps I'd be more comfortable if I could strip the IDEs down to just a couple of code windows and nothing else.

    106. Re:Word by Kjella · · Score: 2

      And the ratio of artists to engineers is roughly the same as the ratio of people who've read it to those who have not.

      --
      Live today, because you never know what tomorrow brings
    107. Re:Word by Anonymous Coward · · Score: 0

      ... I have been coding since I have been 13 years old, which means I have been writing code for 30 years, and 20 years professionally...

      Wow, you've been 13 for a long time.

      In general, I agree with what you said. The point of an IDE, in my opinion and experience, is one of convenience rather than necessity.

    108. Re:Word by rabtech · · Score: 4, Insightful

      In Java since properties are explicit it's obvious for example that the following would be problematic.

      This comment is a great example of supposed "wisdom" that really isn't wise at all.

      The compiler/runtime in C# will optimize your example away if it can prove the property isn't calling a webservice or generating side-effects, which is true 99.9% of the time.

      Secondly, there is nothing preventing you from doing the exact same thing in C# as you did in Java and good design would dictate that expensive values shouldn't be calculated in properties, they should be methods.

      I'm much more interested in the fact that C# treats functions as first-class objects (plus delegates and events) so I don't have to write lots of useless boilerplate to do extremely simple operations. When I can actually get a Java developer to sit down and use LINQ in the real-world, they always come away amazed at how useful it is and how easily it eliminates several methods, nested for loops, etc by simply allowing you to express your intent.

      Of course the Lisp guys are standing off to the side screaming "WE'VE BEEN SAYING THIS FOR YEARS!!!" but I would wager that the latest versions of C# have done more to introduce functional programming concepts to a wider variety of programmers than all the functional languages put together.

      --
      Natural != (nontoxic || beneficial)
    109. Re:Word by betterunixthanunix · · Score: 1

      Sure, but some of the things that would make Java a better language, the lack of which necessitates an IDE, are already available in other languages.

      --
      Palm trees and 8
    110. Re:Word by Anonymous Coward · · Score: 0

      Your code is syntax errors unless you use '<' which apparently you either forgot or don't know how to do in HTML. It's &lt;. Now, how did I enter the ampersand to explain that it was the escape, instead of using it as an escape? Why, &amp; of course. And so on and so forth.

    111. Re:Word by phantomfive · · Score: 1

      How on earth are you supposed to keep track of the several thousand files?

      There are lots of ways. Using directories is one way. Look at the Linux kernel for one example.

      I use the intellisense system to find for me the proper class.

      I remember when I first encountered Intellisense. I thought, "wow, this is nice." I liked it. Then I came to the horrifying realization, "someday I will work on code written so poorly that it cannot be read without Intellisense. It will be that poorly organized."

      If you can't write code that can be used without Intellisense, you are bad at organizing code. This is your problem, not a problem of IDEs.

      --
      "First they came for the slanderers and i said nothing."
    112. Re:Word by gbjbaanb · · Score: 1

      as everyone will say - you modularise your code so you have a hundred components each with 100 source files (a number I pulled out my ass but serves to describe how you can maintain a grokkable number in your head) and you have a system with 10,000 source files!

      Naming conventions are good, as are logical separations, but another approach is to have a language that requires fewer files! I look at the .NET code in my IDE and see the simplest of simple projects has a multitude of crap scattered all over it - assemblyinfo.cs, app.config, app.manifest, and that's before I even see code (I'm ignoring the special files created by VS itself, like the .sln, .csproj, .vssscc etc).

      I've been coding for years, and I managed perfectly fine with a bog-standard editor that didn't have any kind of lookups, intellisense, etc. I had "find in files" and that was enough :)

    113. Re:Word by Anonymous Coward · · Score: 0

      That's what happens when somebody programming with butterflies forgets to increment their loop counter...

    114. Re:Word by paraax · · Score: 1

      Maybe for software in active development. I've dealt with million line projects where small teams may have developed a part of the project (a library in your case), but had subsequently brought it to maturity and left. The people who came later, such as myself, could fall back on domain experts to tell us what the code should do but might be expected to learn an area to maintain it that we'll not likely touch again.

      I wouldn't say horribly horribly wrong... just a different type of a software project at a different level of maturity than yours. In those cases any kind of tools that help navigating and understanding the system are most welcome. Falling back to windows textual find tools is a bit painful.

    115. Re:Word by jeremyp · · Score: 3, Funny

      It could be C++

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    116. Re:Word by inputdev · · Score: 1

      Works pretty good even for C#!

      do you get intellisense? (or whatever it should be called?) - I use aquamacs on OsX for non-c# projects and monodevelop for c#, but would be happy to abandon monodevelop, but it's just so much faster for me to code and explore classes and things with intellisense.

    117. Re:Word by Anonymous Coward · · Score: 0

      -1, Forgot To Call Someone A Hipster

    118. Re:Word by Anonymous Coward · · Score: 0

      That 'old fart' is John McCarthy, the inventor of lisp.

      http://mithil.me/wp-content/uploads/2011/10/John-McCarthy.jpg
      http://pic.mpb.li/mccarthy-lisp.jpg?thumbnail=900

      One could make the argument that the 'original' java was LISP, and the original IDE was emacs,
      which is now implemented in a flavor of LISP. Lisp as well as emacs had huge and direct influence
      on the creation of java. and some argue are still 'a better java than java'.

      See also:

      http://en.wikipedia.org/wiki/Gosling_Emacs
      http://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule

      "
      Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of CommonLisp.
      "
      and their relation to e.g. AspectJ, Spring/Hibernate/'Managed Beans' etc.

      Clearly you could stand to learn a few more things.

      Or, continue to not understand and miss the point, thereby embarrassing yourself.

    119. Re:Word by platypusfriend · · Score: 1

      Couldn't agree more!

    120. Re:Word by Anonymous Coward · · Score: 0

      Please read this: http://msdn.microsoft.com/en-us/library/ms229054.aspx

      Your comment about the "strange" yield keyword is mistaken as others have already pointed out.

    121. Re:Word by ahabswhale · · Score: 1

      In my experience, people who don't use IDEs almost never refactor their code. So if they come up with some crappy name for they method, it stays that way forever because renaming across multiple files (and the filename itself) is too much of a pain in the ass. I used to work with a VIM guy who never refactored anything. I ended up rewriting over 80% of his code because it was complete crap. Anyone I interview that doesn't use an IDE, simple won't get a recommendation from me. Good code requires relentless refactoring and it doesn't take but 10 seconds to figure out what kind of developer you're dealing with when you read their code.

      Text edit guys are cowboys and lack professionalism. In the Air Force I was taught to use the right tool for the right job. Apparently the cowboys never learned that.

      --
      Are agnostics skeptical of unicorns too?
    122. Re:Word by jnork · · Score: 1

      When I was your age, we had to carve our own ICs out of wood!

      --
      Cleverly disguised as a responsible adult.
    123. Re:Word by jnork · · Score: 1

      I've been programming since I was 16, which means writing code for almost 40 years, which means I'm older than you two guys. I probably also weigh more and have less hair, but I'm better-looking.

      I've been using IDEs for the last few years because the development packages I have come with IDEs, and it's simpler to use them than try to invent my own tools. My opinion is firmly that they're definitely development tools. Yep.

      --
      Cleverly disguised as a responsible adult.
    124. Re:Word by elbobo · · Score: 1

      > In my experience, people who don't use IDEs almost never refactor their code.

      Sounds like limited experience to me :)

      I'm usually in the architect role, and deciding the larger whens and whats of refactoring is my domain. Young programmers tend to be weak on the experience necessary for recognising what to refactor, how, and when.

      If you're going to paint all vim users with the same brush, you should remember that any programmer with 20+ years experience will almost certainly have been a vim or emacs user for a considerable number of years. You really can't make any sweeping generalisations about a group that broad.

      > Text edit guys are cowboys and lack professionalism.

      Plain code editors were the entirety of programming for a very long time. When I first started out, the *ed* editor existed (http://en.wikipedia.org/wiki/Ed_text_editor).

      If we're going to throw wild generalisations around, I'll throw mine in:

      Old timers who earned their chops in plain editors tend to have a better sense of the overall app architecture, and are more intuitively aware of the scope and interconnectivity of subsystems. Changing a method signature across multiple files is trivial when you grew up on Unix tools, and people who did so tend to have a far better conception of the impacts of such changes.

      That was fun, wasn't it.

    125. Re:Word by Zalbik · · Score: 1

      WTF? I don't see how this post could have been more wrong.

      in C#, if Count was a method it would look like:
      for int j=0;j<Count();j++) {
      }
      If it's a property, it looks like:
      for int j=0;j<Count;j++) {
      }
      Java is actually slightly worse in this case, as I have no way to tell whether getCount() is a true method, or just a property getter/setter. This can lead to unnecessarily cumbersome code as I must always assume the worst-case. Providing properties at the language level provides a very convenient mechanism to indicate to other coders whether the code being executed can introduce side-effects or not.

      Yes, you can in theory write side-effect code inside properties in C#, but (a) I'd smack anyone who does so upside the head (b) it's fairly trivial in VS2010 to configure a compiler error for properties that contain code blocks.

      Also, yield has nothing to do with property access. It's used to provide for lazy return of IEnumerables...

    126. Re:Word by elbobo · · Score: 1

      > I probably also weigh more and have less hair, but I'm better-looking.

      I resent that accusation. I demand a scalp nudity comparison, to reclaim my honour.

    127. Re:Word by buchner.johannes · · Score: 1

      There is JRuby ;)

      Actually, JRuby is quite awesome, they really put a lot of thought in seamless interaction with Java code (e.g. converting between the different naming conventions).

      --
      NB: The message above might reflect my opinion right now, but not necessarily tomorrow or next year.
    128. Re:Word by Zalbik · · Score: 1

      The compiler/runtime in C# will optimize your example away if it can prove the property isn't calling a webservice or generating side-effects, which is true 99.9% of the time.

      No.
      for (i=0;i<SayNo();i++) {
      }
      private int SayNo() {
      Console.WriteLine("No");
      return 1000;
      }

      The C# JIT compiler DOES optimize bounds-checking on for loops, but only when checking the length of an array, and only when using the length directly (i.e. not someArray.Length + 5).

      It does not automagically check if your code is calling a web service or generating "side effects" (how the heck would it do so anyways)?

    129. Re:Word by crazyjj · · Score: 1

      Humor: You're doing it completely wrong.

      --
      What political party do you join when you don't like Bible-thumpers *or* hippies?
    130. Re:Word by wed128 · · Score: 1

      I messed around with an extension that provided code completion (like intellisense) but it didn't really work right. I generally do without.

    131. Re:Word by Anonymous Coward · · Score: 0

      Tangential to your point, but I think I know this poster as well .... if it is the same one, the "old fart" is actually John McCarthy.

    132. Re:Word by wed128 · · Score: 1

      What creative process do engineers generally practice as a part of their job function, exactly? They are certainly building bridges, but it's pretty hard to argue that they actually *create* them. That said, an engineer who *designs* a bridge could reasonably be considered an artist by the notion I've presented above, however.

      You're confused. Most of the people "building" the bridge are not engineers, they're contractors. Just like most of the people "building" your smartphone are not engineers, they're technitions. Most of what engineers do is *designing*.

    133. Re:Word by ahabswhale · · Score: 1

      I hate to blow your argument out of the water but I'm 47 and I've been programming since I was 14. I was raised on text editors and used to write my own linked lists and hash tables by hand in C, from memory. So, I don't really need a lecture about the old days. Just because text editors made sense at one time, doesn't mean they do anymore. By your logic, I shouldn't bat an eye at anyone walking around with one of those old brick cellphones. We also don't hand-crank our engines to start them but I'm sure you'd make the argument that if we did, I'd be a lot more knowledgeable about car engines...

      --
      Are agnostics skeptical of unicorns too?
    134. Re:Word by elbobo · · Score: 1

      > By your logic, I shouldn't bat an eye at anyone walking around with one of those old brick cellphones.

      Reading this statement, I don't believe you've managed to grasp my logic. In fact, I haven't even presented any logic. I've stated a belief.

      If you want logic, you could ask. But if you're going to throw wild denigrating generalisations at me that have no connection with my own experience (which is not limited), then you'll have to ask nice.

      You seem to be presenting some logic, but to me it looks infirm. If your hand-crank metaphor had strength, it would be true that an IDE is inherently more capable than a vim or emacs based dev environment. Which isn't true.

    135. Re:Word by Safety+Cap · · Score: 1

      Still haven't mastered butterflies, n00bz?

      Pffft, amateurs.

      I code with cosmic rays.

      --
      Yeah, right.
    136. Re:Word by bondsbw · · Score: 1

      And don't forget about complex logic. A yield-style coroutine with complex branching and internal loops and exception handling could be a monster to write with a for loop.

      --
      All my liberal friends think I'm a conservative, all my conservative friends think I'm a liberal.
    137. Re:Word by Darinbob · · Score: 1

      My first editor was essentially an IDE, back in 1981. UCSD Pascal. Very easy to use but not dumbed down terribly, it was the editor, compiler, debugger, and runtime system. Even earlier they had Lisp Machines which were the ultimate in IDEs, with editor, operating system, GUI, and command line all integrated.

      However since then the IDEs have gone downhill.

    138. Re:Word by dotancohen · · Score: 1

      Thanks, I'll take a look at IntelliJ. I seem to remember it not being terribly expensive and running on Linux, too.

      --
      It is dangerous to be right when the government is wrong.
    139. Re:Word by elbobo · · Score: 1

      The Pascal days! I really liked that language, but recently realised I have absolutely no recollection of the syntax.

      I guess I used Turbo Pascal for a while in the 80s. But back then an IDE seemed to mean a code editor that was tailored to the language, and had some navigation, but was mostly just you and your code and nothing else.

      These days an IDE seems to mean you, your code, and 900 buttons and tabs and everything else imaginable that a programmer might possibly need. They put emacs to shame when it comes to trying to cram everything into one app.

    140. Re:Word by Anonymous Coward · · Score: 0

      I'm on a team of 4, one of whom is a brand new hire. We have 4 thousand files in the main project, plus 2 thousand in the 2nd largest project, plus another 2 thousand-ish in the other 10 projects. I'm surprised daily that any of it holds together.

    141. Re:Word by martas · · Score: 1

      Actually one could make the argument that Java is worse, since at least C++ voodoo can allow a highly trained programmer to accomplish some really cool and unusual things. Of course that doesn't change the fact that at least in Java tiny changes in whitespace won't result in two valid but entirely different meanings...

    142. Re:Word by Archenoth · · Score: 1

      Still haven't mastered butterflies, n00bz?

      Dammit Emacs.

      --
      The arch foe.
    143. Re:Word by bored · · Score: 1

      Uh you of course know that emacs can act as an "IDE" too. Its not as well integrated for Java but for most languages the edit/compile/debug/version control/etc functionality is there. I guess the diffrence is that with emacs you have to spend a few hours hacking lisp and .emacs files to make it work the way you want. On the other hand, I have a remote build/debug cycle (edit, build, and run are all on different machines) and I find that emacs actually works better than just about everything else in that case. Of course I have a ~2KLOC .emacs config file.

      Not that I would ever recommend emacs... But I felt like a complete dope when I told the new guy here to use eclipse and then had it crash like a dozen times while I was trying to show him how to checkout/edit/build.

    144. Re:Word by jgrahn · · Score: 1

      Actually one could make the argument that Java is worse, since at least C++ voodoo can allow a highly trained programmer to accomplish some really cool and unusual things.

      Cool and unusual things are *not* something to strive for, and it's not what C++ is for.

      More on topic, C++ at least doesn't have the "everything is a class and each class is one file" paradigm Java used last time I checked. I imagine it's slightly harder to work with Java using a normal text editor because of that. On the other hand, you should structure your code in a natural way, not write 50 kloc files just because you don't know how to navigate between files.

      Of course that doesn't change the fact that at least in Java tiny changes in whitespace won't result in two valid but entirely different meanings...

      Did you change the topic to Python now? I don't recall any such problem in C++.

    145. Re:Word by OhSoLaMeow · · Score: 1

      In my day, we carved our ICs out of wood.

      --
      They can take my LifeAlert pendant when they pry it from my cold dead fingers.
    146. Re:Word by ahabswhale · · Score: 1

      Sorry, but I can run circles around anyone with a text editor. I always have.

      We do agree on one thing, though: you haven't presented any logic.

      --
      Are agnostics skeptical of unicorns too?
    147. Re:Word by mvdw · · Score: 1

      Falling back to windows textual find tools is a bit painful.

      That's where cygwin is useful. find, grep, sed, awk all there on your windows box - makes navigating projects or library codebases much easier.

    148. Re:Word by elbobo · · Score: 1

      Seems age hasn't tempered your ego or gifted you wisdom. I'm sure you're a prized possession of whichever outfit you work for.

    149. Re:Word by Anonymous Coward · · Score: 0

      I guess I'm using source control wrong, because I can't see how you use git to understand the architecture of a project. I know how you'd use it to view how things had changed over time, but is there some other method of using it that I'm not aware of? Or are we just thinking of different things?

    150. Re:Word by mvdw · · Score: 1

      By lengthening the round trip time from coding to compiling you're decreasing the rate of repetition (and success).

      I would argue that by lengthening the round trip time you're encouraging them to think about what they're doing rather than just try random things and see if it works.

    151. Re:Word by Anonymous Coward · · Score: 0

      "That seems to fly completely in the face of your theory."

      Not really. Getting to know the guts of the system and ad-hoc learning are two complementary ways to learn new things quickly.

      The slow crawl that spawns clueless and confused individuals would be theoretical memorizing and formalized tests, which is the way of the latest and greatest fad in education.

    152. Re:Word by Anonymous Coward · · Score: 0

      To be fair, he stated his students had problems, he offered a reasonable explanation (removed from the details) and even offered a solution (introduce them to programming without an IDE).

      You then go on with accusing him, for something in the next paragraph even you state programming is "odd" and "unattractive", while trying to convey it is an "art".

      Excuse me, but you come off as condenscending and accusing, while offering no real practical solution (what is an "artist" in software engineering? how would you begin to train "artist engineers"?)

      Many students will make it. Some will become code monkeys, a few will fail. Even fewer may become "artists" in what they love to do, but who gets to judge that?
      Blaming the teacher seems silly for programming. If kids can teach themselves. So can any student.

      I have to conclude I disagree 100% with everything you said in your post.

    153. Re:Word by Anonymous Coward · · Score: 0

      An IDE is not needed! Look at the entire open source world. The linux kernel and many other large projects. Keeping track of the files is not a problem, and why should it?

    154. Re:Word by ahabswhale · · Score: 1

      Says the ivory tower architect...

      Funny stuff. As for being a prize possession...I've been contracting at the same place for over 3 years now. Do the math.

      --
      Are agnostics skeptical of unicorns too?
    155. Re:Word by jlechem · · Score: 1

      As a C# programmer I would take 2x4 to someone for doing any kind of non trivial code in a property. It violates all the C# good practices. Just like in C++ you can do some stupid shit. Does that make it a bad language? No it makes you a somewhat douchebag programmer.

      --
      Hold up, wait a minute, let me put some pimpin in it
    156. Re:Word by jnork · · Score: 1

      OK, OK, I'll concede your scalp's honor. I'm only "balding" and "receding" (and silvering on the temples).

      But I bet I still win the weight competition! ... Or lose, come to think of it. :/

      --
      Cleverly disguised as a responsible adult.
    157. Re:Word by dudpixel · · Score: 1

      I read it as "OMG the world isn't perfect!" and lots of hand-waving.

      Who cares if X or Y language isn't as good as you'd like. Just stop whining and write some software, or otherwise pick one of the billion other languages that does stuff better. Surely there's at least one language out there that's good enough for this guy?

      I'll go back to not caring now.

      --
      This seemed like a reasonable sig at the time.
    158. Re:Word by HornWumpus · · Score: 1

      Engineering is the union of applied science, business and art.

      If he's got an engineer he's already got an artist. Like all artists s/he might not be a good one.

      That said engineering school is very different from art school. Not as much acid, more beer, about the same amount of pot, much more math IIRC.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    159. Re:Word by Rockoon · · Score: 1

      In fact there's so much bad code like this in C# that they had introduce the strange "yield" keyword to help alleviate the issues caused by this feature.

      uh, what?

      Yield has nothing to do with that "feature" as you call it. Yield is extremely useful because efficiently iterating over a data set is not always as simple as repeatedly incrementing an index, and in fact trying to shoehorn index methodology into it is sometimes one of the least efficient ways to do it.

      The canonical example is probably iterating over permutations or combinations of indexed items. How do you efficiently index combinations? For instance, index all combinations of 7 of 52 items?

      int count = 133784560 // (52 choose 7)
      for(int j = 0; j < count; j++) {
      your turn, convert j into 7 values from 0 to 51 in such a way that all 133 million combinations are visited
      }

      Clearly, shoehorning this indexing methodology onto the problem is terribly inefficient.

      Yield allows a single routine to be written to produce such an iteration efficiently, without any of the consumers of the iterator having to worry about its peculiar methodology. So instead of having the obvious *7* nested for loops in your code wherever you need to produce this iteration, you can just implement it once, and the consumer can just go visit each combination with absolutely no way to bug up the iteration.

      --
      "His name was James Damore."
    160. Re:Word by Anonymous Coward · · Score: 0

      One may note the C# is exactly like that. More I learn the more I think C# is really delphi with curly braces.

    161. Re:Word by YttriumOxide · · Score: 1

      That said engineering school is very different from art school.

      Essentially my point was that it probably shouldn't be if you want to turn out the best possible engineers... There are many aspects of engineering that art students don't need to concentrate so much on (however; the technical side of art like music theory; colour theory; and so on can get pretty hardcore); however I find that most engineering students aren't given anywhere near enough grounding in philosophy, human behaviour and so on.

      Not as much acid, more beer, about the same amount of pot, much more math IIRC.

      More acid and less beer would make for better engineers.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    162. Re:Word by Anonymous Coward · · Score: 0

      I'd recommend giving a decent IDE a fair shake before you write it off.

      That said, I think your ability to hack without an IDE is both a rare and valuable skill (like when you need to change some code on a server somewhere from a hotel and only have an SSH connection, etc).

      If you pair the strengths of your current abilities with the best of what an IDE gives you (of which there is a lot to like, and sure there's also a lot of crap), and especially when you focus on optimal efficient use of these IDEs, you'll freakin fly. It's pretty sweet when you get in the uber-flow. Yeah, minimal tools do that easier, but pushing around a giant codebase efficiently is pretty fun too.

      Assuming your tools give you quick feedback, that's pretty much a sweet place to be.

    163. Re:Word by sproketboy · · Score: 1

      Yeah that's why we see this kind of code often in msdn examples.

    164. Re:Word by delt0r · · Score: 1

      since at least C++ voodoo can allow a highly trained programmer to accomplish some really cool and unusual things.

      Stop being a pussy and use assembly already. x86 assembly no less... the best kind.

      --
      If information wants to be free, why does my internet connection cost so much?
    165. Re:Word by martas · · Score: 1

      Cool and unusual things are *not* something to strive for

      I never disagreed with that, I think that's bad programming.

      and it's not what C++ is for.

      No, but C++ makes such things possible more than most other languages.

      Did you change the topic to Python now? I don't recall any such problem in C++.

      That was an exaggeration. I was referring to problems like these.

    166. Re:Word by hackula · · Score: 1

      I have no problem with IDEs, but I will dispute your claim. Pretty much everyone in the node.js community these days is using a command line text editor combo these days. Having to stop the server and run "node app.js" everytime you made a change is a huge pain in the ass, so most are using tools like nodemon these days. Essentially, you just run "nodeomon [main js file] -w [directory/to/watch]", and forget about it. The program watches all of your files and if any of them change, it will rerun the script. This works really well for web development, where you are updating a rest service or something, and for api work, where you hook it up to your tests.

    167. Re:Word by HornWumpus · · Score: 1

      Engineers are plenty busy in their years at school. If they want to study underwater basket weaving their is plenty of time after graduation.

      Personally I think Art school should be a lot more like engineering school. You can't teach talent (so don't try). Teach them techniques. Make them work. Right now art school is a four year dead show. Waste of the parents money.

      And I can't let the human behavior line pass. We were required to take a 'humanities focus area' (15 credits in any humanity). The only subject that was not allowed was psych. Apparently psych had the best ratio, so prior to the ban all Engineers choose psych. It ruined the curve in the first 3 classes. They had to ask us to leave so psych majors could get As in psych.

      Regarding acid and beer. Can't we have both? My experience is engineering is 50/50. Half straight, half party hounds.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    168. Re:Word by YttriumOxide · · Score: 1

      You can't teach talent (so don't try)

      That's I think where we disagree. A bad teacher - one that teaches "facts" - can't teach talent; but that doesn't mean it can't be taught.

      I believe people can be taught to be creative. It's a different kind of teaching, and significantly more involved than simply getting people to memorise a bunch of facts and formulae. In my experience, the usual way it goes is simply do a lot of creative things; hand-holding significantly at the start and less and less with each task. The reward/grading system also needs to be tailored to novelty rather than meeting specific goals.

      Right now art school is a four year dead show. Waste of the parents money.

      Not having studied arts, I couldn't say for sure, but I get the feeling you may be underestimating what goes in to it. It's possible you simply don't see the creativity that they're instilling in the students and are focusing on raw measurable results; in which case something focused primarily on creativity will indeed seem like a waste of time as the measurable results (by standard metrics) will be lesser.

      It's also worth pointing out that I'm not from the US. As I understand it, higher education is somewhat different there to the rest of the world both due to cultural differences and the fact that there, people pay excessive amounts of money for schooling, so a monetary return on investment isn't just a "good idea" but basically required in order to have any kind of decent life after education.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    169. Re:Word by HornWumpus · · Score: 1

      I used to occasionally hang with the kids from the KC art institute. Great parties. Not much learning going on. Did I mention great parties?

      Like I said a four year dead show. Many of the kids had talent though. Like most other abilities, it is grown very early in life. College is _way_ to late to teach talent (same as you can't _start_ teaching math in college and get anywhere).

      Weather it is government or parents that pay for education they need a return on investment. It is simply economic reality. For education to make society better it has to make people better. Those students that squander their opportunities (by flunking out or taking super easy 'party' schedules) are wasting resources that they will, mostly, never see again.

      --
      John McAfee 'It was like that time I hired that Bangkok prostitute; to do my taxes, while I fucked my accountant'
    170. Re:Word by Anonymous Coward · · Score: 0

      The point is that if your language REQUIRES an IDE, it is a bad language.

    171. Re:Word by Anonymous Coward · · Score: 0

      If you can't manually compile and build your project you aren't a programmer, you are relying on magic.

    172. Re:Word by anonymous_wombat · · Score: 1

      Thank god I don't have to hang out with you lot at parties.

      What are these "parties" of which you speak?
      What kind of hardware do they bring?

    173. Re:Word by Anonymous Coward · · Score: 0

      We do?

    174. Re:Word by Anonymous Coward · · Score: 0

      When I was in college there was a poster that hung in one of the professor's offices. It was a picture of a stern looking old fart glaring at the camera, with the caption "Programming: You're doing it all wrong."

      Just to let you know, that poster is of John McCarthy, the inventor of LISP and father of AI. That "stern old fart" unfortunately died earlier this year after having had a magnificent career of groundbreaking thought in CS.

      RIP.

    175. Re:Word by Anonymous Coward · · Score: 0

      See the Evil extension.

    176. Re:Word by Anonymous Coward · · Score: 0

      There is a line that language design crosses from good language design to design to be retard proof. Programming languages have no business trying to cross that line. IDEs shouldn't either, but its a better place to put it than bloating the language.

    177. Re:Word by MaxToTheMax · · Score: 1

      I'm not saying for a moment that if you use an IDE, you're being lazy. On the contrary, not using an IDE is the lazier (and thus better) way to do it. When I tell people I don't use an IDE, they assume I don't use a build system, debuggers, profilers, static analysis, or language documentation. In some extreme cases of ignorance, people think I don't even use a compiler. Nonsense. I use all of these things. I just find them easier and faster to use when they aren't lumped together in one cancerous mass. The only features that really need to be built into the editor are multiple tabs per window, syntax highlighting, and auto-indent (matching paren highlighting and a shortcut to comment out the selection are nice too, but not mandatory.) The rest of my development environment can go in separate programs which are purpose-built to do one thing well.

    178. Re:Word by Anonymous Coward · · Score: 0

      This is how Eclipse combined with active forum discussion taught my basic Java development. I went straight for what I actually wanted to do using the resources available from that community, and then kept stabbing at it until I learned what I was doing wrong. Doing stupid things and then learning why they were stupid and how to fix them was way more productive, interesting, fun, educational, and beneficial to community I contributed back to than "Read the documentation, learn good practice, and write everything in straight plain text because IDEs are evil" ever would have been.

      I may not be some university-groomed candy-eyed perfect little schoolboy with eye-shatteringly beautiful code, but I can do everything that I actually want to and care about, and don't plan on becoming a professional programmer anyway, so to hell with it all. I make an effort to keep things readable in case I ever have to show it to others or look at it in the future, too, which seems to be the biggest thing the people that complain about people not doing in the first place (honestly I don't understand why you wouldn't. do that anyway).

    179. Re:Word by Anonymous Coward · · Score: 0

      <Tangent alert>
      "Programming: You're doing it completely wrong"

      Quick web search shows it was the late John McCarthy, of AI and Lisp fame. There are two slightly different flavors. Man, shame that I did not recognize the guy's name, after the obligatory slashdot story I know I vaguely must have read when he died last year... and having used lisp flavors in 3 different college courses...

      < / Tangent >

    180. Re:Word by Ingenimus+Prime · · Score: 1

      [...]

      Magical thinking is an enemy of good engineering.

      That is the most insightful comment I've read yet. It succinctly describes what I've been feel for years about IDE's and tools like VS/BDT.

  3. Who the fuck is Willie? by thammoud · · Score: 4, Insightful

    /. Must have been hacked with this worthless article from a programmer that is still deciding between emacs and Eclipse.

    Yo Willie, you can write shit code in any language, any IDE when you are a crappy programmer. IDEs help you better debug, code complete and refactor you crappy code.

    1. Re:Who the fuck is Willie? by Anonymous Coward · · Score: 0

      Ah. So emacs is an IDE now?

    2. Re:Who the fuck is Willie? by Hognoxious · · Score: 1

      Groundskeeper Willie out of The Simpsons, who is a true Scotsman?

      Which brings us nicely, and why not, to this from TFA:

      'If the language is good enough,' Faler argues, 'an IDE is strictly not needed as long as you have good support for syntax highlighting and parens matching in the case of Clojure, or indentation in the case of Haskell.'

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    3. Re:Who the fuck is Willie? by 91degrees · · Score: 5, Funny

      Almost.

      Just needs a good editor.

    4. Re:Who the fuck is Willie? by bhaak1 · · Score: 1

      Ah. So emacs is an IDE now?

      No, it's always been one. Certainly for Emacs Lisp, with additional code (that is included nowadays) also for other programming languages. Surprisingly even Wikipedia agrees with that.

    5. Re:Who the fuck is Willie? by DoofusOfDeath · · Score: 1

      Pretty cranky tone, but I agree completely.

    6. Re:Who the fuck is Willie? by pjt33 · · Score: 1

      The GPP was hidden, so I had to display it to see whether it was talking about Emacs or Slashdot.

    7. Re:Who the fuck is Willie? by H0p313ss · · Score: 1

      Ah. So emacs is an IDE now?

      About 15 years ago I was doing C++ on Solaris, our team was split between vi and emacs using the oobr (Object oriented browser) extension.

      It was one of the nicest C++ environments I've seen. (I've been doing mostly Java in Eclipse for the past decade. I can't imagine working without a feature rich extensible editor that integrates project and file managment. Inline versioning with git rocks.)

      --
      XML is a known as a key material required to create SMD: Software of Mass Destruction
    8. Re:Who the fuck is Willie? by frosty_tsm · · Score: 1

      /. Must have been hacked with this worthless article from a programmer that is still deciding between emacs and Eclipse.

      Yo Willie, you can write shit code in any language, any IDE when you are a crappy programmer. IDEs help you better debug, code complete and refactor you crappy code.

      IDEs are supposed to make software engineers more effective and efficient. Yes they help get past certain rough spots in languages, but should I go to a simpler IDE just because it makes me more manly (as TFS almost suggests)? Give me whatever tool makes me more efficient and effective at my job. If it's a heavy-weight, 2G of memory tool that kicks ass and isn't slow then so be it.

    9. Re:Who the fuck is Willie? by Anonymous Coward · · Score: 0

      Emacs is for network engineering (Cisco Internetworking Operating System) and Eclipse is for Java

  4. Not sure I agree with the conclusion... by MadKeithV · · Score: 4, Interesting

    I understand the train of thought, but I feel the conclusion is wrong. The correct conclusion is that OO design following accepted "best" practices (the SOLID principles) makes for difficult-to-navigate code. That doesn't necessarily mean that I think OO design is bad, it just has some pretty major downsides when it comes to navigability if you don't have good support from your development environment.
    I remember reading somewhere about a system that does away with the concept of "files" entirely, and the whole coding process is based around smart navigation - what's on your screen could be pulled from many different locations at once without you having to know where from - shame I can't recall where I read that exactly.

    1. Re:Not sure I agree with the conclusion... by lattyware · · Score: 2

      I believe you are thinking of light table.

      --
      -- Lattyware (www.lattyware.co.uk)
    2. Re:Not sure I agree with the conclusion... by bickerdyke · · Score: 3, Informative

      I remember reading somewhere about a system that does away with the concept of "files" entirely, and the whole coding process is based around smart navigation - what's on your screen could be pulled from many different locations at once without you having to know where from - shame I can't recall where I read that exactly.

      Smalltalk?

      --
      bickerdyke
    3. Re:Not sure I agree with the conclusion... by Nerdfest · · Score: 1

      The whole 'all these files is a problem' part of the article (well, summary) seems a little silly since all of the VCS tools I'm aware of use files to separate units of work between different people. Until we get a version control system that works some other way, a large number of files is pretty much required for a project consisting of more than one person.

    4. Re:Not sure I agree with the conclusion... by Anonymous Coward · · Score: 0

      Sounds like you should try a real VCS tool. I suggest Git.

      Seriously though, a proper VCS tool should not care if two people make changes to the same file. As long as those changes do not conflict (i.e. they don't come within a couple lines of each other), it should automatically perform the merge. Git does this just fine, but even non-fancypants-non-distributed systems like Perforce manage to merge changes at sync time reasonably well.

    5. Re:Not sure I agree with the conclusion... by Anonymous Coward · · Score: 0

      You are thinking of Code Bubbles. I was a beta tester for them and it was "almost" extraordinary, but in the end not very usable.

    6. Re:Not sure I agree with the conclusion... by thoth · · Score: 1

      I remember reading somewhere about a system that does away with the concept of "files" entirely, and the whole coding process is based around smart navigation - what's on your screen could be pulled from many different locations at once without you having to know where from - shame I can't recall where I read that exactly.

      Smalltalk?

      Or perhaps Light Table?

    7. Re:Not sure I agree with the conclusion... by Anonymous Coward · · Score: 0

      I remember reading somewhere about a system that does away with the concept of "files" entirely, and the whole coding process is based around smart navigation - what's on your screen could be pulled from many different locations at once without you having to know where from - shame I can't recall where I read that exactly.

      Sounds like you need an IDE for your thoughts :)

    8. Re:Not sure I agree with the conclusion... by Darinbob · · Score: 1

      Haha, could be. I like Smalltalk but always found it a bit painful in that I was forced to use their tools only to work on the code. I would find myself doing a fileOut often just so that I could pull up the code in Emacs and browse it that way sometimes. The microscopic view of seeing one tiny method at a time felt clumsy, even if I filled up the screen with multiple browsers. Sometimes to understand the code I just need to stare at a big chunk of it without typing or clicking the mouse.

    9. Re:Not sure I agree with the conclusion... by Anonymous Coward · · Score: 0

      Code bubbles?

      http://www.andrewbragdon.com/codebubbles_site.asp

    10. Re:Not sure I agree with the conclusion... by Anonymous Coward · · Score: 0

      Light Table IDE?

      http://www.chris-granger.com/2012/04/12/light-table---a-new-ide-concept/

  5. Did he already heard about integrated debugger ? by Anonymous Coward · · Score: 5, Insightful

    He says that IDE usage is " 'Because of a combination of shortcomings in the Java compiler and Java's OO nature..."

    I use an IDE because it has an visual debugger as I tend to develop aloways in debugging mode (see Hotspot dynamic class update and other JRebel features)...

    But the guy must be a great fan of gdb, coredump, vi and edlin ;-)

    We are not in 1970 anymore IMHO ...

    Rgs,
    TM

  6. Exaggeration quite much? by Anonymous Coward · · Score: 0

    I would still use an IDE when given the chances (if it's easy enough to set up), even if a simple one. I use Code::Blocks for C programs for editing, the projects (it keeps tracks of source files and build options) and for the build button (so, text editor and make all-in-one). Granted, I don't use many of the features, such as autocompletion (which always gets in the way) or smart tabs (sometimes gets in the way, I'm happy enough with just copying the indentation of the previous line).

    1. Re:Exaggeration quite much? by mrbluze · · Score: 4, Insightful

      I find that an IDE is usually better than no IDE! The premise of the article is that Java is broken so it needs an IDE. This is like saying that flat screen displays are no good because they fail to represent three dimensional objects adequately. You could solve this by inventing a holographic display - good for you - but few people will shoot themselves in the foot and not use a flat screen display in the interim.

      --
      Do it yourself, because no one else will do it yourself. [beta blockade 10-17 Feb]
    2. Re:Exaggeration quite much? by Anonymous Coward · · Score: 0

      IDE's have a bunch of problems for new people. Here's a couple:

      tabs: I'm so sick of getting tab characters from an IDE in my code. This will fuck you up in python.
      exceptions: I'm guilty of this.. eclipse helpfully gives you a quick fix for catching every exception. This leads to really bad design. I spend a lot of time cleaning up business logic twisted into catches and changing functions to "throws Exception".

    3. Re:Exaggeration quite much? by Anonymous Coward · · Score: 0

      The premise of the article is that (metaphorically) the holographic display is already here, so why does everybody still insist on using the LCD?

  7. Good luck with that by Kergan · · Score: 4, Insightful

    only an IDE could love AbstractSingletonProxyFactoryBean.

    Uh huh? Naturally, class names such as ASPFB and GDMF and RSAP are evidently more lovable. So much simpler to write...

    1. Re:Good luck with that by Anonymous Coward · · Score: 0

      Methinks the issue is more that in Java we need to proxy a lot of stuff, and it isn't exatcly a oneliner to do anything related to proxies, there are actually no language features to help here.

    2. Re:Good luck with that by 91degrees · · Score: 2

      Why does the class name need to tell you it's abstract, a singleton and a Bean?

    3. Re:Good luck with that by Robert+Zenz · · Score: 4, Funny

      Uh huh? Naturally, class names such as ASPFB and GDMF and RSAP are evidently more lovable. So much simpler to write...

      MyClass, MyConn and MyFunc come to mind...*shudders*

    4. Re:Good luck with that by deKernel · · Score: 1

      I am not sure if you are joking or serious here, and I REALLY hope you are joking because if you aren't, please stop writing code NOW and go back to school for a Poli-Sci degree.

    5. Re:Good luck with that by robmv · · Score: 1

      because some idiots think the language force a naming convention. in Java you can even use you native character set (for example Japanese) to name your classes (not that I recommend that) but dumb people like the grand parent still blame the language instead of the programmers that use names they don't like

    6. Re:Good luck with that by 91degrees · · Score: 1

      Does Beans also have classes called SingletonProxyFactoryBean, ProxyFactoryBean, AbstractProxyFactoryBean, AbstractProxyFactory, and ProxyFactory then? Evidently these need to be distinguished.

    7. Re:Good luck with that by Anonymous Coward · · Score: 1

      Argh fucking hell you just gave me a flashback. I worked for a company that some utter asshat used the naming convention of theType i.e. theInteger, theDouble so you ended up with for (int theInteger = 0; theInteger 200; theInteger++) { ... } . Not a single soul knew what the hell was stored in the integer but it was THE integer and it was an integer...

    8. Re:Good luck with that by Anonymous Coward · · Score: 0

      Look on the bright side. It could have been a weakly typed scripting language, where theInteger was only an integer *sometimes*!

      Been there, seen that, it was causing some *really* weird behavior, because the value was always *numeric*, but was sometimes a string, so you'd poke through the values, and see 2+13 return 213, or .01+12 return .0112. (And, strangely, in certain circumstances this was the *desired* behavior.)

    9. Re:Good luck with that by Just+Some+Guy · · Score: 1

      Uh huh? Naturally, class names such as ASPFB and GDMF and RSAP are evidently more lovable. So much simpler to write...

      I think the point that you missed is that the existence of such a descriptively-named class is a giant WTF in itself. As in, what utter perfect storm of enterprisiness, slavish devotion to "Design Patterns" (that is, the blessed set from the Gang of Four and not the general concept), premature abstraction, and inner-system design led someone to think that this was a class that should be written and released out of its cage in the dank basement?

      --
      Dewey, what part of this looks like authorities should be involved?
  8. 100% by lattyware · · Score: 4, Insightful

    If you have ever written code in Python, you realise how much trivial stuff you have to do in Java which is hell without an IDE. I'm not saying IDEs are useless, they are great and can do awesome stuff for a developer, but Java has a serious problem where it's practically unusable without a massive IDE.

    --
    -- Lattyware (www.lattyware.co.uk)
    1. Re:100% by digitalchinky · · Score: 2

      I've been churning out Java, c++, c, and unfortunately PHP for more years than I can remember using only vi. With Java specifically, even on huge projects, I've yet to find an IDE that increases my productivity, just the opposite actually. What could be better than a dozen virtual desktops and an unlimited supply of teminals? :-) I like Java myself, never found it hell at all.

    2. Re:100% by Anonymous Coward · · Score: 0

      But at least three major IDEs exist for Java, so there is plenty to select from. It is a little like criticizing a language for the amount of work it would take to manually translate the code to native code if no compiler existed.

    3. Re:100% by lattyware · · Score: 2, Insightful

      You enjoy pumping out those getters/setters, writing that boilerplate main class rubbish, etc... then? These things simply are not needed, and can be avoided by giving the programmer the right language features.

      --
      -- Lattyware (www.lattyware.co.uk)
    4. Re:100% by lattyware · · Score: 1

      That's not the point - I'm not saying that needing an IDE is a problem exactly, but it's a sign of a problem - I use an IDE for Python, where I definitely don't need one. The issue is, wherever you are generating boilerplate, that's more code to maintain and making your codebase harder to read, that is a real, big problem.

      --
      -- Lattyware (www.lattyware.co.uk)
    5. Re:100% by Anonymous Coward · · Score: 0

      Exactly the same here. Not problem coding Java like that, using a simple Makefile and ant to compile. Moreover I stay right away from syntax highlighting, with simple brace and bracket matching being sufficient.

    6. Re:100% by Teckla · · Score: 1

      If you have ever written code in Python, you realise how much trivial stuff you have to do in Java which is hell without an IDE. I'm not saying IDEs are useless, they are great and can do awesome stuff for a developer, but Java has a serious problem where it's practically unusable without a massive IDE.

      And if you have ever written something nontrivial in Python, you realize how much it sucks because you cannot refactor it easily, and too many dynamic typing bugs are left for you to discover (possibly at the customer site) at run time rather than compile time.

      With all due respect to the article's author, he makes baseless assertion after baseless assertion. He is just another irrational Java hater.

    7. Re:100% by lattyware · · Score: 1

      That really isn't true. Typing bugs show up with even the most trivial testing. I have written nontrivial stuff with Python, and it works fine as long as you have sane design.

      --
      -- Lattyware (www.lattyware.co.uk)
    8. Re:100% by Teckla · · Score: 1

      That really isn't true. Typing bugs show up with even the most trivial testing. I have written nontrivial stuff with Python, and it works fine as long as you have sane design.

      Unit tests rarely, if ever, have 100% coverage.

      It is the lazy programmer that uses dynamic typing so he can write less source code. Do the right thing by your users: write the extra (statically typed) code so your programs are more robust.

      Plus, as I mentioned, it then allows for easy refactoring, to help keep your code base sane even after it has grown large and you realize some of your design decisions were wrong. And that happens in every nontrivial project, unless you are claiming you have some kind of super human design and coding ability.

    9. Re:100% by lattyware · · Score: 2

      Typing bugs just don't really happen. I don't throw objects around my program like a madman into slots they don't fit. Seriously, even in large projects typing just doesn't really become a problem, and I don't know why everyone is so obsessed with it. Typing bugs are generally trivial, easily spotted bugs, that rarely (if ever) happen.

      As to refactoring, I really don't see it makes refactoring any easier, if anything, it makes it harder as you can't swap things out as easily, and increases the size of your codebase meaning you have more to deal with.

      --
      -- Lattyware (www.lattyware.co.uk)
    10. Re:100% by Anonymous Coward · · Score: 0

      Well, getter/setters are a sign of bad code. The whole point of OOP is that nobody touches the insides. If you have getters and setters, you're doing it wrong and your code is shit.

      How is a main class (or main function in C++) really any different than in a Python script? You should still have a main function even in Python so that you can include your script in other scripts to do automated testing.

    11. Re:100% by Anonymous Coward · · Score: 0

      So how do you do code refactoring in VI :-)
      Not that I like Eclipse, I prefer Idea.

    12. Re:100% by lattyware · · Score: 1

      How is modifying an attribute a bad thing? That is something that will need to happen in any code.

      Actually, you don't need a main function as it's easy enough to execute it without - even if you didn't, it's about boilerplate - in Java, the main class is x lines of code plus a new file.

      --
      -- Lattyware (www.lattyware.co.uk)
    13. Re:100% by Anonymous Coward · · Score: 0

      Refactoring in static code is faster, because if you rename methods, fields and classes, all calling places changes automatically. If you move a method from one class into another or rewrite, you immediately know about all places that got broken by the change.

      The bigger the refactoring is, the bigger time saving benefits of static typing. When you refactor dynamic code, you have to be much more conservative about it. It is not true that such errors does not happen in dynamic code, they happen and we run into them. Refactoring on dynamically coded projects are usually smaller and done less often then refactorings on statically typed code.

      The range of changes I can safely and quickly do in our Java project is much bigger then the range of changes I can risk in our python project. The range of refactoring features my IDE has is much bigger in Java.

    14. Re:100% by robmv · · Score: 4, Insightful

      I don't call programmers that like dynamic typing so much lazy, but something I noticed in the developers I have known is that a lot of them are the group of developers that are contracted to build something, deploy, and jump to a new contract. How many Ruby programmers have you know than talk garbage about legacy code? a lot, simple, they don't like to maintain old code, It isn't easy with dynamic typing. I grown up as a developer using a dynamic language (Smalltalk), with our own application (own business), I love Smalltalk but we switched to Java long time ago (now using Scala too), and it is not because of the language by itself, it is because long term maintenance is easy for us with static typing

    15. Re:100% by lattyware · · Score: 1

      I still disagree, as in a dynamic language, I think you'll find refactoring causes less breakage as stuff will generally continue to work due to the duck typing. Regardless, however you feel about dynamic languages, my point was that Java can be improved by adding in features to do stuff that currently force users to use IDEs to generate boilerplate code, not that Python is a better language than Java.

      --
      -- Lattyware (www.lattyware.co.uk)
    16. Re:100% by Anonymous Coward · · Score: 0

      As to refactoring, I really don't see it makes refactoring any easier, if anything, it makes it harder as you can't swap things out as easily, and increases the size of your codebase meaning you have more to deal with.

      Dynamic typing makes some kinds of change and refactoring easier: if you decide that X should be a different type, you need to change only the points where X is created and where it is actually used, not the passages where X is merely passed along (as a field, parameter, etc.)
      The same applies to allowing method inputs to have other types (e.g. changing from a certain object type to either a collection or a single value or that type): without cooking up exotic parameter types, old callers remain unchanged and only the method needs to be updated with simple type tests.

    17. Re:100% by Anonymous Coward · · Score: 0

      In my experience, refactoring in a dynamic language usually causes less _obvious_ breakage. As a compensation (when used all but scarcily) it loves to dish out those mofo dragon-impersonating-a-duck bugs.

    18. Re:100% by pjt33 · · Score: 2

      Pumping out getters and setters can also be avoided by writing object-oriented code. They're a code smell which warns of a lack of encapsulation.

    19. Re:100% by ByOhTek · · Score: 1

      So you are very much into being the M in S&M then?

      --
      Self proclaimed typo king, and inventor of the bear destroying coffee table (patent not pending).
    20. Re:100% by lattyware · · Score: 1

      I just never see those. I don't have dragons in a place to be impersonating ducks in my code. I mean, how often, when you are sitting with a static language, do you start doing something with the wrong type? Hardly ever, and when you do, it's generally just because the type needs to implement an interface, for example, and would work if you did. Given that, why would you suddenly start doing it in a dynamic language?

      --
      -- Lattyware (www.lattyware.co.uk)
    21. Re:100% by Anonymous Coward · · Score: 0

      It is also that IDE for Python is a way less powerful than the one for Java - thanks to static typing. It is not only code generation (but I do not use that often), it is code analysis, refactorings those are searches, javadoc on mouse hover, quick fixes and so on.

      This may be only a personal anecdote, but when I started to code in dynamic language (javascript and python) it was as if somebody tied one my hand behind my back. I could not learn new library API just by browsing it in IDE. I could not see all available methods with docs on ctrl+space. I could not do so many refactorings so fast. I could not just find all (and I mean all) places where some method is called.

    22. Re:100% by lattyware · · Score: 1

      That hasn't been my experience - try PyCharm, it's my personal choice and it does extremely well with inspections and analysis. That said, I generally find that due to the nature of it's dynamic style (and other language design choices), Python tends to encourage a better coding style to begin with, which helps you to avoid needing such tools (obviously, nothing could negate them entirely, but it's surprising how well one can do without them).

      --
      -- Lattyware (www.lattyware.co.uk)
    23. Re:100% by dotancohen · · Score: 1

      I currently code mostly PHP in VIM, but I have to do the occasional Java, Mono, or Python. I would love to know how you have found to effectively handle Java code across multiple files in VIM. For me, Nerdtree, Ctags, and Ctrl-P were nowhere what I need. What solutions have you found?

      --
      It is dangerous to be right when the government is wrong.
    24. Re:100% by Fwipp · · Score: 1

      I haven't used it for Java, but I find Tagbar http://majutsushi.github.com/tagbar/ to be quite nice.

    25. Re:100% by mean+revision · · Score: 5, Interesting

      Echo that emotion.

      I worked on a web-app that was done in Groovy and Grails. First release was fast and fun, we got lots of functionality out quickly and it was a delight to work with. Fast forward a year to when we had to maintain the code. Every little thing took a lot more work than it should have. Reading code to discover interfaces, scanning backwards to see what types we were working with, dozens of open source files which we'd always have to check because Intellisense wouldn't help with simple function/variable naming. It was a nightmare.

      In the end we scrapped it all and rewrote it in Scala. It's not quite as fun at first but it's quite nice and maintenance is a delight. That one experience totally soured me on dynamic languages for any serious applications.

    26. Re:100% by assertation · · Score: 1

      I have been programming in Java for 12 years. I came to programming as an adult, with a life, in my late 20s. I did not grow up as a geek spending all my free time pouring over computer stuff. I have never found Java difficult and I have never understood complaints to that end.

    27. Re:100% by LizardKing · · Score: 1

      Typing bugs just don't really happen.

      Utter rubbish - in any dynamically typed language you will have many such bugs. I used to code a lot of Perl, and lately I've been forced to use Groovy. There is little chance of refactoring anything, combined with endless cycles of compile, test, fix dynamic language related bug. It's pissing me off so much that quitting my current job and going back to working with Java.

    28. Re:100% by Anonymous Coward · · Score: 0

      On the other hand, dynamic typing makes those kinds of changes *harder* in any non-trivial project because if you miss one place where you assigned the value using the old type, your program continues to run, giving you subtly incorrect results. With a strongly-typed language, the compiler will let you know that a type mismatch has occurred before you even get to run the code.

    29. Re:100% by DickNanger · · Score: 1

      Pumping out getters and setters can also be avoided by using all public attributes. They're a code smell which warns of a lack of trust in others.

    30. Re:100% by betterunixthanunix · · Score: 1

      It is the lazy programmer that uses dynamic typing so he can write less source code.

      Nonsense. Programmers who are prototyping a high-level algorithm (which would be most programming work in this day and age) use dynamically typed languages so that they can focus on the high level logic of what they are working on. That is a good thing, as it makes programmers overwhelmingly more productive.

      Now, prototypes often wind up becoming finished products, and so what is really needed is an optional static type declaration that programmers can use to increase robustness once their are satisfied with the high level logic. That is what I personally do (in Lisp, which has less than type declarations), and I do it for the very reason you mention:

      help keep your code base sane even after it has grown large and you realize some of your design decisions were wrong

      I have found that that usually happens after functions and data structures have been prototyped. Of course, too many type declarations can get in the way here -- if I am refactoring something, that means I have to prototype some new function or data structure, which means I want dynamic typing there until I am done refactoring (but static typing elsewhere, so that I know what else will need to change). This is one of those cases where "best of both worlds" would be great (but I am not familiar with languages that actually allow it -- Common Lisp comes close with type hints, but something that is better enforced would be nice).

      --
      Palm trees and 8
    31. Re:100% by betterunixthanunix · · Score: 1

      As to refactoring, I really don't see it makes refactoring any easier

      Sometimes refactoring means changing what sort of values are returned by a function. This can lead to type bugs pretty quickly if the new type is not compatible with the old type (and sometimes, it really isn't). Type declarations can help you catch this sort of problem before it gets out of hand.

      --
      Palm trees and 8
    32. Re:100% by betterunixthanunix · · Score: 1

      I did not grow up as a geek spending all my free time pouring over computer stuff. I have never found Java difficult and I have never understood complaints to that end.

      Try writing a Java program that solves this problem:

      https://en.wikipedia.org/wiki/Nurse_scheduling_problem

      Then, compare that to the effort needed to solve that problem using Prolog:

      http://www.ncbi.nlm.nih.gov/pubmed/3345653

      And finally, consider what else you might be able to do quickly and with less effort if you could embed Prolog in the general purpose language you are using (not easy to do in Java, given the lack of a useful macro system):

      http://pseudofish.com/blog/2011/08/05/prolog-in-clojure/

      --
      Palm trees and 8
    33. Re:100% by dotancohen · · Score: 1

      Thank you, that looks like the improvement to TabList that was so sorely needed!

      --
      It is dangerous to be right when the government is wrong.
    34. Re:100% by mvdw · · Score: 1

      You enjoy pumping out those getters/setters, writing that boilerplate main class rubbish, etc... then? These things simply are not needed, and can be avoided by giving the programmer the right language features.

      I don't write java, but I have a standard set of bash scripts I use to generate boilerplate for a new set of c,h files from a template. Writing boilerplate in any language is just plain dumb, if it can be scripted (it often can IME).

  9. I code in C#, by gigaherz · · Score: 3, Informative

    ... and Visual Studio 2010 with ReSharper, and it's the most amazing thing ever... at least until the company decides to upgrade to 2012, which is ugly but it has a lot of new and really useful features.

    I'm not going to rant since I know a lot of you would rather forget proprietary software exists, but the rest of the IDEs I have tried to use can't compare, and sometimes even get in your way.

    1. Re:I code in C#, by santax · · Score: 1

      I code in C, Python but also in C#. For Python and C I prefer Vim, but for C# you are right. VS is the best tool out there for C#. Monodevelop is nice, but VS wins. Big time.

    2. Re:I code in C#, by ItsIllak · · Score: 4, Insightful

      Totally agree - VS is a great IDE and one that really helps with code navigation, standards compliance and more. Gotta think the GP has no idea how to effectively use all of the features even the worst of modern IDEs bring. I suppose, if Eclipse is the best you've had, notepad++ looks promising but if you've used VS - there's no reason to use anything else.

    3. Re:I code in C#, by gbjbaanb · · Score: 1

      That's becuase you write C# code and you *need* VS to do it.

      challenge: write a simple WCF service using notepad. Go on, see if you can do it without VS implementing all the crazy interfaces you need, adding those attributes to your interface, creating the required complexity of a app.config settings file with all the endpoints, service hosts and bindings, plus all the required property settings to make it compile and the assemblyinfo.cs to make it work.

      In PHP (as an example, I happen to be looking at some right now, not that PHP is anyhow better), I can write a webservice in notepad in a dozen lines of code.

      This is what we've lost with the rise of the IDE - you may think your IDE is wonderful and allows you to do all manner of fancy things, and it takes away a lot of the burden of coding.... but you only think that because it's added that burden in the first place. VS will auto-generate all that crap for you and say "look how good I am to you", when really you should be thinking "what a load of crap you've dumped on me".

      VS is a good IDE though, but its much better for writing C++ code that (yet) doesn't need the crutches VS gives you as a C# developer.

    4. Re:I code in C#, by hackula · · Score: 1

      Watch out. VS will spoil you for life. As an ex-C#er, I can say that going without it will cause severe symptoms of withdrawal. Jk, but seriously, it is an awesome IDE and aside from eating up resources like a mofo, is by far the best IDE in existence.

  10. Eclipse is better if you are a beginner by bhaak1 · · Score: 5, Insightful

    Syntax highlighting and parens matching doesn't really help the beginners. Instant feedback for programming errors is great, you immediately learn about the syntax on the go. Then the debugger is also a great tool (even though I think you should first think, then code, then think again and only as a last resort start the debugger).

    These are not Eclipse-unique features, you can get such features with many setups but an easy to install IDE that satisfies your needs and is easily extendable with plugins that integrate seamlessly with your IDE (for example Findbugs).

    It's almost like Emacs done right for Java. Well, as right as an IDE can be done.

    I don't buy the argument that 1 class means 1 file is a problem (btw, this only applies to public classes anyway). If your project is large enough, you still get navigational problems even if you'd crammed 10000 lines into files (please, don't do this).

    1. Re:Eclipse is better if you are a beginner by Anonymous Coward · · Score: 0

      You know that first sentence is, well, malarkey, right?

    2. Re:Eclipse is better if you are a beginner by bhaak1 · · Score: 1

      Maybe I it's a bit of a rambling. But apparently the rest of my post is good enough to straighten out the weak intro. ;-)

    3. Re:Eclipse is better if you are a beginner by Teckla · · Score: 1

      Eclipse is better if you're a pro, too. It makes navigating around large code bases very easy.

      Ignore all the morons who think we should all still be digging holes with spoons instead of power equipment.

    4. Re:Eclipse is better if you are a beginner by Anonymous Coward · · Score: 0

      Instant feedback for programming errors is great, you immediately learn about the syntax on the go.

      It also creates programmers that are clueless to why they write code a certain way. This genereates code that is hard to maintain and does a lot of unnecessary and possibly unstable things.
      If the language truly is a new language to the programmer and not just more of the same with new syntactic glue then instant feedback is a very bad way to learn the language.
      Part of the learning process is not only in solving the exact thing you want to do. When you do the research needed to solve your problem you tend to get a lot of information that isn't related to the problem at hand but helps you understand the language and how to avoid related problems.

      Also: Memory protection leads to sloppy programmers. Bad habits should be punished.

    5. Re:Eclipse is better if you are a beginner by jittles · · Score: 1

      Then the debugger is also a great tool (even though I think you should first think, then code, then think again and only as a last resort start the debugger).

      That is where our philosophies differ. As soon as I feel like I understand what the code is supposed to do, I go straight to the debugger. If the code isn't doing things as I understand it, then the easiest way to see where it veers off course is the debugger. Once I confirm that my understanding of the code is correct, or incorrect, then I sit back and think about why the code is doing the wrong thing, and what the correct way to fix it is. Why should I just think I know what the issue is, when I can see it with my own eyes and verify it? Of course, some issues are not reproducible, or even occasionally happen in system libraries that you cannot debug. So the debugger is not the end all, be all of development tools, but it is very useful.

    6. Re:Eclipse is better if you are a beginner by LizardKing · · Score: 1

      Eclipse is the worst IDE I've ever used. NetBeans and IntelliJ are far superior, so much so that I can only wonder at the popularity of Eclipse.

    7. Re:Eclipse is better if you are a beginner by betterunixthanunix · · Score: 1

      Instant feedback for programming errors is great

      What you are saying, then, is that beginners should use a language that supports a REPL? Great! Now if we would just stop teaching Java to CS101 students...

      --
      Palm trees and 8
    8. Re:Eclipse is better if you are a beginner by betterunixthanunix · · Score: 1

      Ignore all the morons who think we should all still be digging holes with spoons instead of power equipment.

      ...says the Java programmer...

      OK, OK, fine, if you write your Java code in an IDE, you are digging with a bunch of spoons that you welded onto a backhoe.

      --
      Palm trees and 8
    9. Re:Eclipse is better if you are a beginner by Teckla · · Score: 1

      ...says the Java programmer...

      Haters gonna hate.

    10. Re:Eclipse is better if you are a beginner by Anonymous Coward · · Score: 0

      That may be, but tools made "for beginners" are bad tools. Not what you want when you're no longer a beginner. Then you want the beginner-stuff out of your way, so it doesn't waste your time.

    11. Re:Eclipse is better if you are a beginner by bhaak1 · · Score: 1

      That may be, but tools made "for beginners" are bad tools. Not what you want when you're no longer a beginner. Then you want the beginner-stuff out of your way, so it doesn't waste your time.

      I didn't say Eclipse is made "for beginners". IMO Eclipse works well enough OOTB even for advanced programmers, it stays out of your way most of the time.

      But yes, if you want to become a really good programmer, you should expand your view beyond one single IDE. At least switching between Eclipse and Vim. :-)

    12. Re:Eclipse is better if you are a beginner by bhaak1 · · Score: 1

      Also: Memory protection leads to sloppy programmers. Bad habits should be punished.

      Because of this sentence I'm not sure if your whole post is ironic or not. I'll treat it as non ironic.

      Part of the learning process is not only in solving the exact thing you want to do. When you do the research needed to solve your problem you tend to get a lot of information that isn't related to the problem at hand but helps you understand the language and how to avoid related problems.

      Yes, you tend to get a lot of information that is not related to the problem you're having but if you are a beginner but that doesn't mean that you also understand that information and keep it in mind for later reference. Because you just don't know the language and its problems yet!

      If you're starting out in a new language (even if you already know programming in other languages) it is certainly not always obvious what code leads to unmaintainable code. Learning a language is always exploring unknown territory and exploring is much easier if you can do it in small steps and for that instant feedback is way better. You will always be using some sort of reference and tutorial for exploring it and if those tutorials recommend bad languages features or habits (and let's be honest, every language has these) then it's the fault of that learning material.

    13. Re:Eclipse is better if you are a beginner by bhaak1 · · Score: 1

      I don't think our philosophies differ that much. You didn't you would code and then immediately jump into debugger. You said "as soon as I feel like I understand what the code is supposed" so you already have thought about the code.

      I've seen programmers trying to debug code by randomly and unsystematically putting breakpoints, hoping to getting a clue what the code does wrong, without even trying to think first. Shotgun debugging at its worst. If they don't have a clear model in their mind of what the code is supposed to do how can they deduce valid conclusions that can be proven or disproven?

    14. Re:Eclipse is better if you are a beginner by bhaak1 · · Score: 1

      What you are saying, then, is that beginners should use a language that supports a REPL? Great! Now if we would just stop teaching Java to CS101 students...

      REPL can be simulated on any language. I hope you're teaching your CS101 students more than just things that make sense in a REPL.

    15. Re:Eclipse is better if you are a beginner by hackula · · Score: 1

      Just took over a project recently with a few hundred files averaging 15000 LOC each. All in a dynamic language. Zero tests. All parameters passed as untyped arrays. Hungarian notation. Shoot me in the face...

    16. Re:Eclipse is better if you are a beginner by hackula · · Score: 1

      Never did too much Java myself, but Eclipse seemed horrible in comparison to NetBeans. Huge resource hog.

  11. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    I would argue needing a debugger is also a sign of language flaws. Debuggers help you find issues with your code while it runs. I've found that so much of the time those kind of issues are from stuff like Null objects - where you get an exception from a null object and then have to crawl up your code finding out where it came from. If the language was sane and threw exceptions on problems rather than returning null, there would be far less issues.

    Not saying that debuggers are useless or that every problem a debugger is useful for could be solved, just that if you find yourself needing it often, maybe it's a sign something is going wrong with the language.

    --
    -- Lattyware (www.lattyware.co.uk)
  12. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0, Flamebait

    I would argue needing a debugger is also a sign of language flaws.

    You would lose that argument.

  13. IDE pros & cons by Anonymous Coward · · Score: 5, Insightful

    Pros:

    * Syntax highlighting
    * Brace matching
    * Symbol autocomplete
    * Error highlighting (XCode FTW)
    * Go to Definition/Declaration
    * Debug with all the above features in place

    Cons:

    * Some guy says they have a smell, but actually he doesn't like Java (so don't use Java)

    I could write code without an IDE, but I wouldn't want to maintain someone else's code without one, and I regularly port (alone) MLOC codebases.

    1. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      I have 30 years of programming experience and have done them all from machine language to lisp, from real-time to GUI.

      I have the exact same sentiments as the summary: if you need code generation, there's something wrong with the language. I actually like Java -- it's very good in its niche. I have used Eclipse, but I much prefer emacs even though emacs' Java support is not quite there yet. I also don't like ant and maven I detest.

      The main problem I'm having with these tools is that they seek to hide the hard stuff from the developer, but when the tool falls short, the developer is at a complete loss as to what to do next. Either you have the plugin that does the job, or you write the plugin yourself. Who among us writes Eclipse or maven plugins routinely? With make, scons, bash and even emacs, plugin writing (ie, scripting) is natural, advertised and straightforward. You know what's going on.

      As for generating getters and setters. I type fast enough that the boilerplate wouldn't cause me many seconds of wasted time. However, if you feel the need to have getters and setters for all of your data members, you probably haven't understood what OO is about. You are not to look at an object as a data container but more as a living thing. Behind the interface the object isn't holding data; rather, it performs actions and interacts with it's surroundings with methods, listeners, messages and what not. If your object really is a data container, just make the data members public and you're done.

    2. Re:IDE pros & cons by jittles · · Score: 1

      Pros:

      * Error highlighting (XCode FTW)

      I can't believe you just said that. XCode is THE worse IDE I have ever had the pleasure of using. I mean the code formatting and all of that is great, but the debugger is still a steaming pile of shiz. I have to restart XCode 3+ times a day because it hangs starting the debugger and then the only choice I have is to force quit. Sometimes it leaves zombie GDB processes that I have to look for on the command-line just so that I can get rid of the "Can't start your app because the debugger is already running" BS that happens to me all the time. And don't get me started on the random FCs. But it is pretty looking, I'll give you that.

    3. Re:IDE pros & cons by cozziewozzie · · Score: 3, Informative

      This whole discussion is fucking bizarre. It turns out that there are many people out there who think that if you are not running a 1435 TB monstrosity of an IDE, your only alternative is ed. Just use an editor from this century, FFS. Emacs, vim, Kate, Notepad+, anything modern and targeted at programmers.

      Personally, I use vim:

      Code completion? Check
      Syntax highlighting? Check
      Brace matching? Check
      Search and replace w/ regexp? Check
      Language-specific auto indentation, retabbing, reindent, etc. Check
      Multiple files open in tabs, with easy switching? Check
      Language-specific auto commenting? Check
      Filesystem navigation? Check
      Code folding? Check
      Scriptable? Check

      I do understand that full-blown IDEs offer some additional functionality: integrated build system, CVS integration, debugger integration, stepping through errors, etc. I don't find these useful personally, but I understand that other people do, and that's OK. Vim and Emacs can also do most of those, but if you are so dependent on all this, then a large IDE is probably something you'll be more comfortable with, and that's OK.

      On the other hand, vim has its own advantages -- it doesn't tie you to itself (you use standard tools like CMake and Mercurial/git), it's lightweight (somebody in here suggested increasing the memory available to the VM to 2 GB so Eclipse runs faster WTF?!?!?!?!?), it's fast, and it is unbeatable at keyboard shortcuts. Yes, many IDEs offer configurable keyboard navigation, but it's an afterthought, none of it is as efficient with keyboard as vim. I don't like using mouse for editing.

      So in the end, it's up to you to decide. Personally, I'm an editor+shell guy, and I honestly don't feel that I'm missing out on anything. Each to his own.

    4. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      VIM pros:
      * Syntax highlighting (for >500 languages)
      * Brace matching, go to matching (-)/[-]/{-}/#if-#endif/begin-end (%, not for python :)
      * Symbol autocomplete (^n and ^p)
      * Error highlighting (if you use the :make command)
      * Go to Definition/Declaration (^] to jump, ^t to go back, optionally in new window/tab and showing the list of matching symbols; ctags currently supports 43 languages)
      * You can change almost anything via simple scripts
      * Edit any text file, not just code
      * Spellcheck (calls ispell, it has language recognition: only strings and comments are checked in code, commands are ignored in LaTeX)

      Cons:
      * Hard to learn if you are not a nerd
      * Features have to be enabled in .vimrc, because the default config mimics the original vi

      IDE pros:
      * Better symbol autocomplete, error highlighting, integrated debugging, beause the IDE knows the language

      Cons:
      * Separate IDE for every language

      Conclusion: Vim is only compared to notepad by people who can't use it.

    5. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      Pros:

      * Syntax highlighting

      Text editors support that (vim, Kate, Notepad++, etc...)

      * Brace matching

      Text editors support that (vim, Kate, Notepad++, etc...)

      * Symbol autocomplete

      Text editors support that (vim, Kate, Notepad++, etc...)

      * Error highlighting (XCode FTW)

      I don't know of a text editor that offers that, but that's essentially what you get when you compile the code. Which you are free to pick and choose.

      * Go to Definition/Declaration

      Text editors support that (vim, Kate, Notepad++, etc...)

      * Debug with all the above features in place

      Choose an IDE and run with it.

      It appears that you don't know what an IDE actually is. An IDE is an integrated development environment. That is, the only feature that it provides, when compared with other text editors, is that it integrates some features. Yet, you failed to understand that a programmer is quite able to use without being spoon-fed a specific approach. From automatic build processes to code profilers, no one forces you to limit yourself to the questionable set of tools which are forced upon you with an IDE.

      So, exactly what are you complaining about? It sounds like your complain boils down to praising the vritues of being forced-fed a solution, no matter how inadequate or restrictive it might be.

    6. Re:IDE pros & cons by Anonymous Coward · · Score: 0
      • Integration SCM like Git and Subversion
      • Refactoring, Extract to method/class
      • J-Unit integration.
      • Mouse over function documentation.

      Actually it sound like the guy in question just doesn't do much with huge code bases and/or large teams of developers working on the same code base.

    7. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      Maybe you should try a modern version of XCode. I can guarantee you it won't leave zombie GDB processes hanging around.

      captcha: compiled

    8. Re:IDE pros & cons by togofspookware · · Score: 1

      Some things you didn't mention that I am used. Pro:

      • Easily rename methods, move classes around, and otherwise refactor code.

      Con:

      • Eats up all resources on my computer (though this may be specific to Eclipse, but Eclipse also has the best refactoring tools of any IDE I've tried, so meh).

      Code I've written using Eclipse is *much* easier to follow than code I wrote in Emacs* because refactoring is so much faster. Yeah, you can search-replace and hope you didn't get any unintended matches and use unit tests and the compiler's error messages to help you out, but it's a pain compared to {<select name>, F2, <type new name>, enter}, so I find myself avoiding it until I'm at a machine with Eclipse.

      *for all I know, there's scripts for Emacs that would help with refactoring, but they're not as obvious to me.

      --
      Duct tape, XML, democracy: Not doing the job? Use more.
    9. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      Just two quick notes: modern IDE does not tie you to themselves. Different members of the same team can use different IDEs and everything is fine. At least in Java world.

      Second, Eclipse does not need 2 GB unless projects in it are huge. And if you have a huge project in something, that something is going to require a lot of memory.

    10. Re:IDE pros & cons by spongman · · Score: 1

      Code completion? Check

      really? vim knows which symbols are in scope when I hit '.' or '->' at any location, especially if those symbols are defined in a different scope, in a different file that isn't open, that has syntax errors in it?
      i'm a regular vim user, but i have never seen functionality like this.

    11. Re:IDE pros & cons by Darinbob · · Score: 1

      But editors can do all of that! Even the debugging. The difference is that the IDE tells you to do things it's way, and the editor lets you do it your way, or else choose a different editor. Ie, emacs is programmable, if you don't like how things work you customize it or get code from someone else to do it. You can also do all your work in it with multiple languages; Java, C, assembler, Ruby, Lua, Lisp, Perl, Make, etc, and you deal with them all the same way using the same keybindings and same look and feel. With too many IDEs it seems they really only support one language and the others are alien addons. If your IDE doesn't do things they way you like you're usually stuck. Now if they make an IDE where I can stick in some simple code to redesign how it works then that would be great, but I haven't seen any.

    12. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      Refactoring? Code navigation? Autocomplete? Static and dynamic code analysis? I'm missing all that ...and more. I use IntelliJ IDEA :-P

    13. Re:IDE pros & cons by evil_aaronm · · Score: 1

      Maybe you need a re-install - both Xcode and the OS. Your symptoms just seem way wrong. I've never had the problems you mention. Are you running on a hackintosh?

    14. Re:IDE pros & cons by jittles · · Score: 1

      No I have the exact same issues on a MBP and a Mac Mini. Coworkers report the same issues w/ xcode. Its been an issue since at least 4.3

    15. Re:IDE pros & cons by cozziewozzie · · Score: 1

      really? vim knows which symbols are in scope when I hit '.' or '->' at any location, especially if those symbols are defined in a different scope, in a different file that isn't open, that has syntax errors in it?

      Vim will automatically scan through all the header files you include and autocomplete that. It will also autocomplete from all the files you have open in your current session (other tabs, other buffers).

      Try it. Open a dummy c file with nothing but int main(). Try autocompletion -- nothing. Then add an #include stdio.h, save, and it will autocomplete from there.

      It won't understand your code (e.g. class hierarchy) and be very intelligent about it, which means that you might need one or two extra keystrokes now and then, though.

      I program mostly in C/C++. I haven't tested this with Java and other languages.

    16. Re:IDE pros & cons by Anonymous Coward · · Score: 0

      I like Vim but I've ended up using IDEs because I find the code completion in Vim tends to slow down on large projects.

      Also, on a large project an IDE like Intellij is very useful when it comes to navigation, thanks to the indexing of code and so forth.

    17. Re:IDE pros & cons by hackula · · Score: 1

      I use to be a VS guy and have gone a year now without it. Switched to Vim and shell and could not be happier. In the case of Vim, I just love that I can have an editor that runs absolutely everywhere. I had a mission critical fix a couple weeks ago that I needed to patch through, except I was in an airplane stuck on the tarmac. Took out my phone, loaded up vim through ssh, and made the fix. With touch keyboards, I do not think that would even be possible in just about any other editor. Obviously, that was a pretty wacky scenario, but pretty cool anyway. I will say that I have been exploring other text editors as well, looking for that sweet spot between vim and emacs and a full blown IDE. So far my favorite by far has been Sublime Text 2.

  14. Re:Did he already heard about integrated debugger by santax · · Score: 1

    And that's why these days we use Vim... not vi... Oh yeah, and we get shit done. Fast.

  15. More like Willie Failer by Anonymous Coward · · Score: 0

    amiright?

  16. Attention seeker by Anonymous Coward · · Score: 5, Insightful

    What we have here is another attention seeker trying to appear enlightened by saying something "counter-intuitive" or "against the grain". It's a bit like those people that go out of their way to let you know that they don't think Dark Side of the Moon was the best Pink Floyd album, because their opinions are so diverse and more informed than all the "sheeple".

    IDEs are a smell? What? No mate, you smell. IDEs drastically improve productivity. Yes, part of that is code navigation - mature libraries and frameworks such as the STL, Java, and .NET are HUGE - not because they are poorly designed (though that may also be true; correlation != causation), but because the sheer number of features makes library and framework searching essential. No human could possibly use these libraries as efficiently without code completion or prompting, except for the parts they use most frequently. IDEs make the libraries and frameworks discoverable.

    That's not even to mention all the OTHER benefits IDEs bring - integrated debugging, refactoring, static analysis, test coverage analysis, code style management, build chain management, source control integration....

    Yeah, yeah, I bet this guy is 1337, uses ONLY notepad / ed, hand writes his make files, and is the most badass coder on the entire planet. The problem is - nobody cares. Everyone else is more concerned with getting the job done efficiently. IDEs are simply essential in the large code bases I work with every day, and that would be true whether I were dealing with a million lines of Java or a million lines of Haskell / Python / Whatever this guy thinks a "good language" is.

    1. Re:Attention seeker by lattyware · · Score: 1

      IDEs are great, but you have to admit that Java forces you to use one. Stuff like generating getters and setters and other boilerplate code which Java forces you to write is hell without an IDE. That is a problem with the language. With Java, eclipse is a sign that the IDE has to make up for language flaws, which is an issue - that's what the article is trying to say.

      --
      -- Lattyware (www.lattyware.co.uk)
    2. Re:Attention seeker by Anonymous Coward · · Score: 1

      (Same AC)

      I see what you are saying. Certainly there are rough edges around any language; getters and setters in Java are annoying. In .NET the syntax is much more succinct.

      However, there needs to be a distinction here between language and practice. You aren't forced to use getters and setters. You use them because it is considered good practice. You use them because they give you something you need.

      If there were no getters and setters, what would take their place whilst maintaining encapsulation and compile time type safety? If type safety isn't a concern then you wouldn't be using Java. If encapsulation wasn't a concern you wouldn't use getters and setters. There has to be something there, and it isn't going to write itself. So what's the alternative? How could we avoid this boiler plate code but still keep encapsulation and type safety? How can the language infer this for you? (Again, this is where the .NET properties syntax is far superior - but I wouldn't use .NET without an IDE either.)

      The argument seems to be more about static vs dynamic languages at this point. Boiler plate code is the cost of type safety and writing maintainable and testable software. That doesn't make the language bad, especially not for large code bases used by large teams.

      Nor does it mean that the need for an IDE is a 'smell'. The IDE gives you the boiler plate code which gives you the type safety and encapsulation. If you don't need the latter then don't use a language that is written with the assumption that you do. And if you do need the latter, then something has to be written, you're going to be much better off with the IDE. The IDE is controlled by you, tailored to do what you want. The language, being far more general purpose than what you want to use it for, can't be. That's why the IDE is needed.

    3. Re:Attention seeker by Anonymous Coward · · Score: 1

      Java does not force you to write getters and setters. In fact, mindlessly writing / generating trivial getters and setters is not a very good practice, and Java does it right by forcing you to write / generate them in the cases where they are needed. The problem is that people don't apply encapsulation because encapsulation means you have to write reasonably structured code and not a fucking mess.

      Java has many real, documented problems, but IDEs are not one of them.

    4. Re:Attention seeker by dkf · · Score: 3, Insightful

      IDEs are great, but you have to admit that Java forces you to use one.

      The problem is the language's social convention (for want of a better term) that long package names, class names and method names are used. Auto-completion and support for managing the imports are the features that make a Java IDE win out over an editor like Emacs (which I used to use for Java programming). Other languages use much terser conventions and make it easier to code with a normal editor with no ill-effects (though some go a bit far) so I'm sure that the problem is the very long names; frankly, typing that much stuff out by hand every time gets old very fast indeed.

      The other things that IDEs tend to offer are less useful to me because of the type of code I usually write. (Security-sensitive server code that integrates a bunch of other people's code is a PITA to test and debug anyway, and I try to avoid confusing naming in the first place so refactorings aren't a problem anyway.)

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    5. Re:Attention seeker by lattyware · · Score: 1

      You don't need boilerplate code to keep encapsulation and type-safety, you said it yourself - properties. Getters and setters can be replaced with properties. C# does it, which proves Java could. It's a perfect example of why the IDE is doing stuff the language could do, which is fine, but the language could be improved which would benefit everyone more.

      --
      -- Lattyware (www.lattyware.co.uk)
    6. Re:Attention seeker by lattyware · · Score: 1

      If you want your interface to remain the same, and may decide in the future to change your class to require functions behind attributes, then you have to use getters and setters in Java, there is nothing like a property in C# or Python that allows you to do this on-the-fly in a more natural way without the boilerplate.

      --
      -- Lattyware (www.lattyware.co.uk)
    7. Re:Attention seeker by Anonymous Coward · · Score: 0

      Object Pascal (Delphi) solved that problem ages ago with "properties", basically getters/setters that act exactly like variables so that you can add the encapsulation later when you actually need it without changing API.

    8. Re:Attention seeker by Xest · · Score: 1

      Why is it an issue? Does it hamper productivity?

      You'll still get something more useful out of a Java developer in less time than you will say, a C developer using nothing but a text editor and GCC.

      I agree Java could be better in this respect - it's let C# pull the rug out from under it in this respect with it's property system, and shorthand for things like getters/setters, locks, using blocks, lambda implementation and so on.

      It's a problem with the age of the language compared with the sluggish pace of development that's allowed C# to outflank it from this point of view, but you see similar problems with languages like PHP, C++ and so forth also so it's not as though it's Java specific.

      Code has simply become more complicated and with that brings challenges for IDEs to keep up with increasing productivity requirements, but ultimately we're still better off than we were before we had the likes of Java and IDEs.

      So sure, maybe C# and so forth are better languages now because of the sorts of language shortcuts they offer, but you also lose portability with C#, and you lose performance with Python, so it's all about tradeoff. If you/the guy in the article are going to complain about the sort of thing you're complaining about then ask yourself what the alternatives are? Could you be more productive in Python and not care about the performance hit? Are you going Windows only such that C# is fine? If the answer to this sort of question is yes then the problem is not with Java per-se but the fact that you picked the wrong tool for the job in the first place. If however you want fairly cross platform development with better than scripted performance and the benefits of a managed runtime to protect against buffer overflows etc. then Java is still the best tool for the job.

    9. Re:Attention seeker by lattyware · · Score: 1

      First of all, yes, it is an issue, because it does hamper productivity. More boilerplate code makes it harder to read, maintain and work with - which is a big deal for any non-trivial project. As to your later points, why should I have to go to C# or Python to get those language features? Don't get me wrong, I love Python and use it extensively, but Java could implement them, and be a better language for it. That is the point.

      --
      -- Lattyware (www.lattyware.co.uk)
    10. Re:Attention seeker by Xest · · Score: 1

      Because expecting every language to be everything to everyone is unrealistic.

    11. Re:Attention seeker by lattyware · · Score: 1

      That's not a good argument. These features are not that horrific to implement, and they would improve Java for those that currently use it, not try to make it 'everything to everyone'.

      --
      -- Lattyware (www.lattyware.co.uk)
    12. Re:Attention seeker by Xest · · Score: 1

      Lots of features aren't horrific to implement and would be of net benefit, but the danger is letting the language become unweildy because everyone wanted their pet change implemented.

      Look I get it, you're an idealist, I don't blame you, I am too, the difference is that experience has taught me that sometimes you have to let it go and realise that there are in fact pragmatic reasons why you can't have your own way immediately.

      There are fights that are worth fighting, I've long thought the HTML5 spec is awful but been told I'm wrong by people who are blindsided by the shiny new promises it makes, but now people are actually beginning to use it I'm seeing ever more developers move over to my viewpoint and recognise that HTML5 is as big a step backwards as we had in the 90s with IE/Netscape fighting each other with more horrendous browser incompatibilities and inconsistencies than ever, and new features that are actually far more painful than the old way of doing things.

      But this isn't one of those fights, it works, it's not a big deal, as you point out yourself IDEs provide the crutch you need to solve these problems and that reduces the urgency and arguably even the necessity for a language specific fix so why not focus on the things an IDE can't provide so well like lambda support? Is there any reason you want to program Java without an IDE such that you need this to be a language, rather than an IDE thing?

    13. Re:Attention seeker by lattyware · · Score: 1

      I disagree, I think there is more danger in letting a language stagnate. I get that not every feature can be implemented, but there is a middle ground.

      --
      -- Lattyware (www.lattyware.co.uk)
    14. Re:Attention seeker by Xest · · Score: 1

      But it's not stagnating is it? Each new release still has new features. Just not the feature you specifically want.

      As I say is there a particular scenario you particularly suffer where you don't have an IDE to solve this problem for you, or are you just seeking perfection? I'd wager this is a problem for almost no Java developers in practice, hence why it wouldn't be a high priority.

    15. Re:Attention seeker by marcosdumay · · Score: 1

      IDEs are a smell? What? No mate, you smell. IDEs drastically improve productivity in Java or .Net.

      There, FIFY. That's exactly the point the article is making, and an IDE won't drastically improve your productivity on most languages.

    16. Re:Attention seeker by Saija · · Score: 1

      Yeah, yeah, I bet this guy is 1337, uses ONLY notepad / ed, hand writes his make files, and is the most badass coder on the entire planet. The problem is - nobody cares. Everyone else is more concerned with getting the job done efficiently

      Yeah i used to think that way, i wrote the software application of my thesis using only a text editor with syntax hilighting(editplus, nice btw) and believe me, it was a pain in the ass, i had to check regularly the java api so i could remember the parameters and name of some method, this without counting the happy time i spend coding swing layouts at hand.
      Now i just matured and never again will do this again, the good site of ald of this is that i learned a lot about the idiosincracies of swing, java and ant as a build tool.

      --
      Slashdot ya no es que lo era! ;)
  17. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    That's it, cherry pick a comment without reading the rest of my post, and don't bother to respond to any actual argument in it.

    --
    -- Lattyware (www.lattyware.co.uk)
  18. Refactoring? by Anonymous Coward · · Score: 0

    I call bullshit on this. One of the major reasons to use a modern IDE is the support for refactorings. Renaming variables, fields, and functions/methods is a major pain in the butt in any language if you have to do it manually. Having tools to do this instantly is a major reason for using IDEs and the like.
    Also, whether classes are located in a single file or across multiple files is completely irrelevant. Having a tool that allows you to navigate efficiently in the code improves performance of the programmer in any case.

    The reason that people aren't using IDEs for niche is probably that the tool support is nowhere near what it is for Java.

  19. Java IDEs by Anonymous Coward · · Score: 0

    The problem is that Eclipse is one of the worst IDEs ever, and Java, as a whole has crappy IDEs. IntelliJ is by far the best, in my opinion, since it is less buggy, crash prone, and confusing than Eclipse, which is more a collection of components than it is an IDE - but even IntelliJ is still subject to Java GC pauses. Really, you can't write a good IDE in Java, and therefor Java developers have bad IDEs. Visual Studio isn't a really great IDE, but at least it doesn't pause while you are typing, and it has a unified sense to it that you don't get with Eclipse. MonoDevelop is pretty good too, or FlashDevelop, or really any IDE where at least the UI thread isn't subject to GC.

  20. IDEs are very useful,and it's not language's fault by coder111 · · Score: 5, Informative

    Well that's bullshit. The biggest problem with development these days is not the language itself, but the 100s of 3rd party mostly-open-source libraries that you have to use. Or else go reinventing the wheel which is worse.

    And IDE helps you see the reference for these libraries much easier, using autocomplete and automated documentation lookup. On top of that, navigating your own code is much much easier. Add debuggers and profilers, granted, somewhat less useful in server-side environment but still useful. Semi-automated refactoring though is great, and eclipse does that quite well.

    I've done my share of development using nothing more than a text editor. But I prefer to use IDE when I can- they make me much more productive. Of course I still make sure code can be built & deployed using plain command line tools- for Java Maven is great.

    --Coder

  21. I like Eclipse except for one flaw by GoodNewsJimDotCom · · Score: 2

    Eclipse starts to get annoying type lag around 30k lines of code in a single file, as you get bigger and bigger upwards to 100k or more, it can take several seconds between characters you type. Now some people say you shouldn't have a single file with over 100k lines of code, but some of us like using old school procedural with just a sprinkling of OO.

    1. Re:I like Eclipse except for one flaw by slim · · Score: 5, Insightful

      Now some people say you shouldn't have a single file with over 100k lines of code, but some of us like using old school procedural with just a sprinkling of OO.

      Please don't put 100k lines of code in one file, even if you're writing non-OO C.

    2. Re:I like Eclipse except for one flaw by dkf · · Score: 1

      Eclipse starts to get annoying type lag around 30k lines of code in a single file, as you get bigger and bigger upwards to 100k or more, it can take several seconds between characters you type.

      I've emphasized your problem and it's not Java-specific at all; it'd be horrible in any language at all. Even in C, I consider 10kloc to be an excessively long file. I have one project with an 11kloc file, and I hate how long it is; it's in a module that someone else is in charge of though, so I'm hesitant to interfere; the project also has a separate file with a 6kloc function, but that can't be shortened as it is a bytecode execution core (before anyone asks, the project style is not very dense by comparison with how a lot of other people write C; different styles would be a lot shorter).

      Split that code up a bit into sensible-sized pieces. Do it today. Define pieces that have sensible responsibilities and which expose sane APIs, and then don't violate those APIs. Sure, it takes a little time to do but it makes it so much easier to understand. As a side benefit, your tools will also become better able to help you, but that's not why you should do this: the greater comprehensibility to you (and your coworkers, assuming that's relevant) is far more important!

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    3. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      Nonetheless, there are times when you need to load 100KLOC files - maybe log files, or trace output, or some auto-generated XML (or even auto-generated C code). A serious IDE needs to handle large text files.

      But yeah, *vomit* at a coder who puts entire 100KLOC projects into a single file. But, also, *vomit* at the teams that put that amount of code in, say, 5,000 files.

    4. Re:I like Eclipse except for one flaw by 91degrees · · Score: 1

      To be fair, it is still a flaw with the editor. And you might have a file that long for other reasons. The editor should be able to handle a log file.

    5. Re:I like Eclipse except for one flaw by Xest · · Score: 2

      "Now some people say you shouldn't have a single file with over 100k lines of code, but some of us like using old school procedural with just a sprinkling of OO."

      100k lines of code in a single file has nothing to do with being "old school" and everything to do with abysmal code structure.

    6. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      8/10 - Succinct and virtually undetectable but could use some implicit insults and sweeping generalizations.

    7. Re:I like Eclipse except for one flaw by kenorland · · Score: 1

      Please don't put 100k lines of code in one file, even if you're writing non-OO C.

      If you're forced to write in languages without a decent module system, and to compile using compilers that can't do decent inter-module optimizations, that may be your best of a number of lousy options.

    8. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      That's not old school, I've worked on COBOL applications with GOTO ALTER statements in them; that's old school.

      100k lines of code in one file is no school.

    9. Re:I like Eclipse except for one flaw by phantomfive · · Score: 1

      Why on earth would you want 100k lines of code in a single file? What problem does that actually solve? Scroll bars become so small they are useless around 10,000 lines of code.

      --
      "First they came for the slanderers and i said nothing."
    10. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      > some of us like using old school procedural with just a sprinkling of OO.

      Which is the one that mandates to have all your code in a single fat file, procedural or OO? Or maybe it's simply that you're a moron(TM by LT).

      In the good old days of UNIX and procedural langauges people hardly could put 30K lines of code in a single file. The compiler would crash. In fact, often each file contained a sigle _function_. Go figure.

    11. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      Many auto-generated source files are that large or larger. For example, the C# include file created from one of our WSDL files is over 250k LOC. It's easy for someone with no experience to make a ridiculous claim like you just did, but in the real world we have to work with large source files.

      In addition, any nontrivial project will have files that are not source that you need to edit. A CSV file with over 100k lines is not out of the ordinary and neither is a large text or HTML document.

    12. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      > Please don't put 100k lines of code in one file

      What a naive comment. The largest source file I've personally written was well below 10k LOC, but I work with autogenerated files ten times that large or larger on a daily basis. The OP is correct that Eclipse falls flat on its face for these files.

    13. Re:I like Eclipse except for one flaw by evil_aaronm · · Score: 1

      What modern languages are like that?

    14. Re:I like Eclipse except for one flaw by slim · · Score: 1

      Many auto-generated source files are that large or larger. For example, the C# include file created from one of our WSDL files is over 250k LOC. It's easy for someone with no experience to make a ridiculous claim like you just did, but in the real world we have to work with large source files.

      Don't edit auto-generated source files. Treat them like binaries.

      But, I do accept that there are some large files (generally not source code) that you sometimes need to manipulate. Eclipse's editor is probably not the best tool for that.

    15. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      You Java code wont JIT if you have that many lines of code. Wouldnt be suppriced if some of your methods actually is intepreted.

    16. Re:I like Eclipse except for one flaw by Anonymous Coward · · Score: 0

      > Don't edit auto-generated source files.

      You missed the .NET (reference to C#) part. You have to edit them to get them to compile.

  22. And IDE is just like any other tool . . . by PolygamousRanchKid+ · · Score: 4, Insightful

    It's just as good as the artisan who uses it. You can use a hammer to drive in a nail . . . or to smash a vase. It depends on how you use it.

    An IDE won't make a good programmer write bad code. And it won't make a bad programmer write good code. Unfortunately, a lot of manager types assume that if they buy some expensive tools, their programmers will automatically program gold from straw.

    --
    Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
  23. A text editor that does the job IS an IDE by Alkonaut · · Score: 5, Insightful

    Most bizarre conclusion I have ever seen. Of course you can have highlighting and other editing tricks (autocomplete, etc.) in a text editor. But once you add things like unit test integration, deployment, and most importantly an interactive debugger where you can step through your code, you have a proper development environment. Running tests can be done at a shell prompt, but debugging not so much. And if your text editor ticks all these boxes, including interactive debugging (I'm sure emacs can for example), then your text editor IS A FREAKING IDE ALREADY. I'd like to make the inverse conclusion of TFA: since we have proper IDE:s we can now allow the code in modern languages to be structured an way we want. A good IDE should never have you worrying about files, just code.

    1. Re:A text editor that does the job IS an IDE by drinkypoo · · Score: 1

      If all you need is a text editor that can run some scripts and accept their output, then vi has long been an IDE. But that's not strictly true; The UNIX Programming Environment (great book too, BTW) is an IDE, among the many other things you can call it. But taking vi alone, you have to think about files, because it doesn't include any concept of project management. That's why we get into directory hierarchies and the use of Makefiles before you have all the parts of an IDE. And then, today's IDEs also have language references and completion and all kinds of goodies like that which permit uses to more easily navigate a snowstorm of bullshit in an overly encrufted language. Which returns to the premise of the article. Or so I would imagine, I haven't read it.

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    2. Re:A text editor that does the job IS an IDE by Darinbob · · Score: 1

      If you use different tools for different jobs then you will be able to use the best tool for each job. If you try to make one tool do it all then you have a good chance of being stuck with something that's mediocre at all the jobs.

  24. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 1

    I'll take a shot then.

    A debugger can give you lots of of information when the exception occurs. You can visually watch the flow of program execution, inspect the values of all variables in scope, modify them on the fly, or even execute arbitrary code statements while you are in the middle of debugging the issue, say at a breakpoint just above where the error occurs.

    A thrown exception doesn't give you any of these things. It provides better logs, maybe, but a debugger gives you so much more. An exception gives you a stack trace; a debugger opens up the guts and lets you poke around as much as you want.

    Your assertion that needing a debugger is a sign of language flaws is absurd. Period.

  25. Re:Did he already heard about integrated debugger by Alkonaut · · Score: 2

    I would argue the opposite. If you execute code it will invariably do things you didn't expect, regardless of language. You either debug or guess. I saw no argument as to why guessing is preferable to interactive debugging? I agree that "null" is a language smell, but there are concepts like code contracts that lets you have non-null enforced etc. There are a million other things you can debug regardless of language.

  26. Light Table by undulato · · Score: 1

    Sounds like somebody is a shoe-in for a Light Table licence.

  27. A conundrum by Coisiche · · Score: 1

    So why do Java coders turn to Eclipse?

    I don't know. I just don't know.

    1. Re:A conundrum by Anonymous Coward · · Score: 0

      I don't know about IntelliJ, but I have the impression that since about 6.7, Netbeans is so far ahead of Eclipse for Java development that it is not even a contest. If you happen to use Maven, the comparison is specially ridiculous.

      Granted, Eclipse has plugins for everything, and I guess it's better for Android development and all those "not really Java" things.

  28. Re:Did he already heard about integrated debugger by Molt · · Score: 1

    Exceptions are intended to be used when a program hits unexpected or fatal issues which cannot be handled locally, and often the low-level library code isn't in a position to be able to judge whether something qualifies as worthy of an exception or whether it's an expected part of the processing cycle and can be safely be ignored.

    Take for example asking to open a file for reading and the file not being available for some reason. If I'm just copying a large directory structure then I can reasonably expect to not be able to open a few files due to permissions and, while I'll likely want to log these and display them, treating it as an exception wouldn't be suitable. If my code is part of an online application and it was failing to open a configuration file which it needed to connect to the database then the error would be worthy of promoting to an exception if it could not rectified in the code which detected it. Ultimately though for this type of 'It could be serious, it could be nothing' then the decision should be left to the client code rather than the library.

    In my mind a better approach to fixing these type of errors is better support of types which cannot be set to null. For example if I have a FileHandle variable which cannot be set to null and the File.Open() method returns a nullable type then there's going to be a compile-time error, which is the best type of error. This will point out where I'm 'assuming' that the value is not null and as I'm fixing the compile error I'll naturally add the correct checks as the 'This could be null..' issue has been highlighted for me.

    --
    404 Not Found: No such file or resource as '.sig'
  29. Why I like Eclipse by Misagon · · Score: 1

    While I agree with the author about Java, there are other things why I prefer to use Eclipse (over other editors/IDEs)

    * The compare editor. Especially in conjunction with the SVN plugin. Very very useful.

    * I can have more than one project open, and edit and compare files in both. I may seem like something trivial, but too many other IDEs are deficient in this regard.

    --
    "We mustn't be caught by surprise by our own advancing technology" -- Aldous Huxley
    1. Re:Why I like Eclipse by ledow · · Score: 2

      I use Eclipse for C99-development. It's wonderful and, most importantly, free.

      I use everything from SVN-integration and version control, to the diff-generation / compare, to multiple projects (with common projects auto-included and updated when necessary), with multiple compile-paths (Debug, Release, other architectures, other compilers etc.), refactoring, debugging, hell it even integrates with the Android development kits if you set it up right.

      Years ago I was introduced to Eclipse when I sought an alternative for my university Java course (which was pathetic even back then and used some horrendous IDE). Since then, my entire development environment for several projects has just sat in the same Eclipse folder and suffered everything from computer moves to Eclipse upgrades to compiler upgrades (e.g. through several Cygwin and MinGW upgrades and conversions) to even OS-changes (currently using the same basic setup for both Windows and Linux) without problems.

      An IDE is there to make life easy. Sure, it would be wonderful if no programming language required multiple files but it would also be wonderful for every setup program in the world to consist of a single file, every application to be a single file, and none of them be obscured archives that contain multiple internal files. But, in real life, C has been around a lot longer and nobody's really found a solution for using and working with multiple files.

      In fact, .h files are ENTIRELY a traditional fabrication - there's nothing in them that you can't append to a .c / .cpp file and still have things work. We *deliberately* duplicate unnecessary prototypes for functions we've written for a COMPLETELY administrative purpose. There's nothing in the standards about REQUIRING things to have multiple files. And yet every single non-trivial program that exists separates things out and the IDE has to cope with that to make it manageable.

      And the other features of the IDE are there to help, not because the underlying code is unreadable (the IDE can't perform miracles and make gibberish into perfect prose) but because humans work better when they build tools to aid how they work (colour-coding, cross-references etc.).

      The IDE is the computer-human interface. It has to deal more with the human than it does the language, and the human has to do a huge range of idiosyncratic things that have NOTHING to do with the language construct whatsoever. Playing with the IDE trying to solve that is really just trying to break the way people work, not solve an inherent language problem.

    2. Re:Why I like Eclipse by Greyfox · · Score: 1
      Header files are there to tell the compiler how the function, class or structure is supposed to look. You know, so you can catch errors at compile time, rather than run time. C++ is really good at that. Java only gets around not having them by not allowing any code outside a class. You can write your C++ that way too if you want to, but header files are still entirely necessary.

      I see a lot of new programmers in college or just out of college, trying their very best to avoid having to type any more than necessary. But having more files or doing a little more typing is NOT the hard work in this profession. Having to keep all that shit organized is NOT the hard work in this profession, although many, many people are terrible at that.

      Knowing the tools and your disposal and designing your software to take advantage of them while keeping it well-organized and maintainable, that's (some of) the hard work of this profession, and most programming teams completely fail at that.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  30. Re:Did he already heard about integrated debugger by mwvdlee · · Score: 4, Insightful

    In most languages you don't need a debugger for stuff like null pointers; perfectly fine exceptions are thrown and reported telling you exactly what you did wrong. When is the last time you ever used a debugger to track down such a bug? You use debuggers to analyse why some algorithm isn't worked as it's supposed to; for finding flaws in human thinking.

    --
    Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
  31. What is he on.. by Rexdude · · Score: 5, Insightful

    TL;DR - Let's all ditch IDEs and go back to Notepad/vi/emacs/edlin.

    Code generation in Eclipse is a breeze, it easily creates framework classes where you can plug in your code. Directly jump to classes, view javadoc when you mouseover any element, jump between occurrences of text within a file, seamlessly integrate with the version control system of your choice - it has everything to properly work with a modern software project that can have hundreds or thousands of classes and files.
    And the same goes for Netbeans or Visual Studio or any other IDE of choice.

    Finally, tell me how many real world projects use Haskell, Clojure or Scala as compared to ones using Java/C/C++/Python/Ruby/PHP/Perl. I don't exactly see dozens of job openings for the former on various job boards. You work with what you've got, unless you're an ivory tower academic who's only concerned with the design of a language as opposed to its real world usage.

    --
    "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    1. Re:What is he on.. by Anonymous Coward · · Score: 3, Informative

      The author of the blog post is actually running a software company that sells solutions in Scala, Closure and Haskell (just check the web page www.recursivity.com).
      Yes, there are very few real world projects in such languages but that's confusing common practices with best practices.

    2. Re:What is he on.. by hcs_$reboot · · Score: 3, Funny

      Don't underestimate the snobbish aura that immediately emanates from you when you say you're a Haskell programmer.

      --
      Slashdot, fix the reply notifications... You won't get away with it...
    3. Re:What is he on.. by Anonymous Coward · · Score: 0

      Code generation in Eclipse is a breeze, it easily creates framework classes where you can plug in your code.

      Yeah, exactly. The whole point of the article is that code generation is a sign that your language has a problem, and IDEs are only ever a sticking plaster. Saying that an IDE makes code generation easy is like saying that you don't need functions because you have copy and paste. Sure, if you couldn't easily define functions you'd end up copying and pasting a lot of code all over the place, and likewise if you use an ultra-verbose language like Java you probably do need a code generator, but that doesn't mean it's a good idea.

      To put it another way: if your language/framework/whatever has enough boiler plate that using a code generator ever sounds like a good idea then your language has too much boiler plate. Having a tool to generate a template which you edit makes about as much sense as having a compiler to generate a binary and then trying to fix bugs by hex editing the machine code.

      I'll admit that things like edit-and-continue debugging and intellisense are quite handy, though.

    4. Re:What is he on.. by serviscope_minor · · Score: 1

      Let's all ditch IDEs and go back to... vi

      Sure why not? I use vim all day, every day for coding. It is very good.

      unless you're an ivory tower academic

      Funny, whenever I see that on slashdot, by brain always translates it into something like: ...ou work with what you've got, and BTW, I have a massive chip on my shoulder.

      --
      SJW n. One who posts facts.
    5. Re:What is he on.. by Anonymous Coward · · Score: 0

      Didn't Scala replace a bunch of large Ruby on Rails projects?

    6. Re:What is he on.. by Greyfox · · Score: 1
      Code generation is an offshoot of cut-and-paste coding, which is also a code smell. If you''re doing a lot of cut-and-paste, you're doing something wrong. If you don't understand why cut-and-paste is wrong, you're a bad programmer. If you're having to generate that much code, there's something wrong with your language. I see a lot of these barely-functional data beans being written and then never used, or used badly. The whole process encourages a mentality, whereby people would rather import two new frameworks to avoid hand coding some SQL, and the hand-coded SQL would perform orders of magnitude faster than the frameworks they barely take the time to read the docs on. It's really not that much to ask that someone understand the tools they're using, when their job is to use those tools and understand them.

      The thing about such shoddy programming practices is that they kind of get you by, until they don't. Brute force and ignorance will only take you so far, and leave you with a system that has a ton of moving parts, many of which are malfunctioning at any given time. It leads to a "Oh just restart that server" mentality. And it leaves you completely clueless when you hit the limits of the system, where the hardware which seems limitless compared to systems of a decade ago (Much less two, when I started this game) just can't handle any more and the company's management wants to take things to the next level.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    7. Re:What is he on.. by Rexdude · · Score: 1

      Depends on what you mean by 'coding'. Try a large software project with hundreds of source files, multiple geographically separated teams working on different modules. Obviously if you're working on your own or something small, vi or whatever you prefer to use would suffice.

      Funny, whenever I see that on slashdot, by brain always translates it into something like...massive chip on my shoulder

      Arguments over Haskell and other obscure languages being superior to the mainstream ones are exactly that, academic. Sure, go ahead and invent your own language by all means, but don't knock what's being used reliably for years. For another example, PHP is often criticized, but nearly every large website runs on LAMP or some combination thereof. You could do what Paul Graham did and build your entire application in LISP, but good luck finding people to maintain it.
      And well, I'm quite happy coding in Java and Perl both as part of work and outside of it, while I respect the fact that theoretical computer science is what advances the field, supposedly better designed languages don't hold my interest.

      The best technology doesn't necessarily translate into the most widely used technology, Microsoft is a prime example of the latter despite there being multiple arguably superior ways to implement operating systems and security models..

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    8. Re:What is he on.. by Rexdude · · Score: 1

      Code generation is an offshoot of cut-and-paste coding,

      Um, no.
      Try one of the various Java frameworks, starting with J2EE and moving onto Spring, which uses a combination of XML and reflection to set bean properties via dependency injection. It's much easier to manage when your IDE can generate the boilerplate code for you. Java the language is one thing, separate APIs and frameworks are another. You can hardly blame the structure of the Java language for complexity of 3rd party frameworks.

      he thing about such shoddy programming practices is that they kind of get you by, until they don't. Brute force and ignorance will only take you so far, and leave you with a system that has a ton of moving parts, many of which are malfunctioning at any given time. It leads to a "Oh just restart that server" mentality.

      The problem you describe is when people just jump into code generating tools without an understanding of the underlying framework or language. As someone else here recommended, a newbie programmer (I'll take the case of Java here) is better off learning to code with a minimal text editor and learning to compile stuff on the commandline. To this day there are plenty of people who have used nothing but IDEs and don't know how to even compile a java class manually.

      This however is hardly a case to throw out the baby with the bathwater and ditch using IDEs altogether.

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    9. Re:What is he on.. by Anonymous Coward · · Score: 1

      Code generation in Eclipse is a breeze

      That was the whole point of the article - using a braindead language forces you to use an IDE to generate code. Languages that support metaprogramming (metaclasses and/or macros) allow you to write code that writes code at runtime, virtually eliminating the need for any boilerplate.

      Haskell, Clojure or Scala as compared to ones using Java/C/C++/Python/Ruby/PHP/Perl

      Well, first off, I've always felt like the IDE made life much easier when doing Java, C, or C++, but I don't ever miss the IDE while I'm programming in Python, Ruby, or Perl (no PHP experience). Furthermore, I've used Clojure in pet projects and at work, so just because you don't use it doesn't mean nobody does.

    10. Re:What is he on.. by LinuxFreakus · · Score: 1

      Why do people always lump notepad/vi/emacs together? Notepad.exe is one of the more basic text editors you'll find with almost no functionality. vim/emacs on the other hand are enormously powerful text editors which are on par with any "IDE" you can come up with. highlighting? yup. braces? yup. automatic formatting/indentation, etc, etc.? yup. code generation/completion? yup. easily find your files in large complicated projects? yup. open/edit multiple files at once and jump around between them? yup. jump to class/method/variable definitions? yup. integrated help/documentation? yup. integrated source control for svn/git/whatever you use? yup. code folding? yup. scriptable? yup. error/warning highlighting? yup. integrated debugging? yup. I could continue for a while... but all that stuff which people tend to say you "need" an "IDE" like eclipse for... yeah you can do all that stuff without eclipse.

    11. Re:What is he on.. by donatzsky · · Score: 1

      Why do people always lump notepad/vi/emacs together?

      Probably because they've never truly tried to use Emacs or Vim. Of course, actually getting Emacs to do what you want, the way you want it, can be a bit of an adventure...

    12. Re:What is he on.. by LinuxFreakus · · Score: 1

      You mean kind of like getting eclipse to do what you want when you want? Not exactly a walk in the park either... all depends on which tool you have experience with. Eclipse is probably the worst of the widely used IDEs out there IMO. Not intuitive, buried/redundant configurations, buggy, unstable, ugly as hell... but I hate xcode and VS.NET too... I haven't met an "IDE" that I like yet. Once you know vi or emacs really well, nothing else seems to do what you want anymore.

    13. Re:What is he on.. by LinuxFreakus · · Score: 1

      Depends on what you mean by 'coding'. Try a large software project with hundreds of source files, multiple geographically separated teams working on different modules. Obviously if you're working on your own or something small, vi or whatever you prefer to use would suffice.

      Clearly, you have no idea what you are talking about. If you ever actually used vi or emacs for anything meaningful you would know they are just as powerful as any "IDE" you could point to. You don't need a big bloated "IDE" to write code, not even Java.

    14. Re:What is he on.. by Rexdude · · Score: 1

      Because each of them are ubiquitous on their respective platforms, not because Notepad is in any way equivalent to the other two. Says a lot though, if you see that Windows just has a bare bones editor vs. the other two with much more functionality.

      Let me know when vi/emacs can do everything you mentioned out of the box, and also refactor code. Convert a local variable into a field, move a method from one class to another, rename a class and auto update all references to it, auto-externalize all hard coded strings, auto generate code based on templates..want more?

      And finally, who exactly is using emacs/vi in the way you mentioned for a large project in a commercial environment? I'm talking about big software development firms, not something one might use to fix an open source project during one's spare time.

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    15. Re:What is he on.. by Rexdude · · Score: 1

      You don't need a big bloated "IDE" to write code, not even Java.

      Yes, because heaven forbid anyone would want to run a debugger, profile their code for performance, run static analysis tools or even run a remote debug session on another machine without terminating the remote VM. All IDEs are just glorified text editors after all and are only used for 'writing code' as you put it.

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    16. Re:What is he on.. by LinuxFreakus · · Score: 1
      Out of the box? Not sure what you mean... But yeah with emacs and vi and basic command line tools/scripts you can do all that stuff... and you can customize it to work *better* than the way eclipse does it.

      And finally, who exactly is using emacs/vi in the way you mentioned for a large project in a commercial environment?

      Me? I've used pretty much nothing else other than VIM and command line tools for the last 15 years to edit code for various programming languages, including very large projects in commercial environments. Works fine in windows too, although I rarely use it there. I am generally one of the few on the project who does this, but as long as the results adhere to all the same coding "standards" nobody cares.

    17. Re:What is he on.. by LinuxFreakus · · Score: 1

      So you think you can't do all those things in vim or emacs? Interesting....

    18. Re:What is he on.. by Just+Some+Guy · · Score: 1

      Code generation in Eclipse is a breeze, it easily creates framework classes where you can plug in your code.

      And you don't see the need for that feature as a problem?

      --
      Dewey, what part of this looks like authorities should be involved?
    19. Re:What is he on.. by Rexdude · · Score: 1

      If you download Eclipse, you can get started with all the features I mentioned without requiring additional plugins. There's no concept of 'compiling' your program, it used incremental compilation so that your classes are compiled as you type, and errors/warnings show up underlined in red/yellow. You can refactor code, connect to version control (CVS only though, SVN, GIT etc require plugins) and search the codebase all without any extra setup. Same goes for powerful debugging(local and remote), it supports hot code swapping so that you can make minor changes to the code without having to restart the VM. You can jump to any level of the stack frame, set up conditional breakpoints, run the memory analyzer to get a realtime snapshot of your VM for tracing memory leaks...

      It's way, way beyond just editing source files.

      How exactly would you go about setting all that up in vi/emacs? Maybe you could, if you had the time and patience, but that depends upon you, and may work for you if you freelance. Large software development teams would just jump right in with an IDE that has nearly everything built in, and then further customize it to their liking. Why sit and reinvent the wheel?

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    20. Re:What is he on.. by Rexdude · · Score: 1

      Why should it be a problem when it's aimed at what Java is mostly used for - complex multi tier business applications? This is like saying why use any library at all when you can code in barebones C, or even assembler.
      These frameworks are based on well known design patterns, and help, say, keep the presentation layer separate from the data layer. More abstraction = more complexity, but it frees up programmers to focus on business logic rather than set up housekeeping functions on their own.
      Or, very roughly speaking, these frameworks are to Java what Java is to C++ (in the sense of using garbage collection versus expecting the programmers to manage memory on their own).

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    21. Re:What is he on.. by Anonymous Coward · · Score: 0

      TL;DR - Let's all ditch IDEs and go back to Notepad/vi/emacs/edlin.

      Says the guy who doesn't grok that OS/Notepad/vi/emacs/edlin/gcc/debug *is* an IDE. The same goes for it as well.

    22. Re:What is he on.. by LinuxFreakus · · Score: 1

      Yeah, eclipse starts doing all that stuff without asking you, but if you want to change how it works it is still as much work as anything else, you either live with the fact that eclipse doesn't quite do what you'd like or you write your own plugin. I will admit I don't do hot code changes while the debugger is still running, but I have never really felt the urge to either (though I suppose it would be possible to add on if sufficient need was there). I mange all my vim configuration and modules/scripts with git, each time I add something for a new task I needed to do, I dont' need to do it again the next time... after 15 years, I'm pretty much to the point where I don't need to change it much unless I start using a new language but even then most of the stuff is pretty generic. I've worked on large teams, and indeed most people choose to "jump right in" with eclipse, and most have never met anyone like me who doesn't do that... but that doesn't mean it doesn't work, I can still work with those people and they would have no idea that I wasn't using eclipse if they didn't know it. The bottom line is that there is no one true editor... if you like using an IDE, use it. I'm just saying, that stories like this one where people assert that eclipse is some how "required" for productive java programming (or any other language for that matter) are absolutely wrong. There are alternatives which do not require quad core laptop with 16GB of RAM (though the actual product you are working on may use that much or perhaps far more depending on the scale, but I digress).

    23. Re:What is he on.. by Rexdude · · Score: 1

      one where people assert that eclipse is some how "required" for productive java programming (or any other language for that matter) are absolutely wrong

      It's the market, that's what it is. Both Eclipse & Netbeans are mature platforms backed by IBM and Oracle, and there's a whole industry thriving on these IDEs, including commercial plugins. So if one is looking for a job with commercial Java development, one has to be familiar with either of these.
      And well..I was working on IBM's JVM before, so yeah, 16 GB RAM on a 6 core AMD running RHEL, but I digress :)

      --
      "..One hosts to look them up, one DNS to find them, and in the darkness BIND them."
    24. Re:What is he on.. by LinuxFreakus · · Score: 1

      Yeah its pretty much impossible not to be familiar with eclipse and netbeans unless you live under a rock. That still doesn't mean that one has to use them once they get the job. I usually have one or both installed someplace because there are occasions when someone wants to pull something up on my machine, maybe during a demo or a meeting, or collaboration etc, and I know they would look at me like I had two heads if I pulled up VIM :)

    25. Re:What is he on.. by LinuxFreakus · · Score: 1

      You might also be surprised to learn that in college, I refused to buy the "required" TI junk calculators which the professors insisted upon and instead used my trusty HP with RPN... But how did you get by when they used all the TI programs in class from the textbooks you might ask? Well, I made my own programs that did the same thing only better, generally wrote them during the lectures while there was nothing better to do :)

    26. Re:What is he on.. by Darinbob · · Score: 1

      Ya, if you're worried about fitting in with all the job openings that you see, then you want to use an IDE so that you don't stand out from the herd.

    27. Re:What is he on.. by Greyfox · · Score: 1
      I'm kind of against spring and hibernate too. And solidly against Ruby's ActiveRecord. They might work well if you can take the time to understand them, but I have not seen anyone take the time to understand them.

      Case in point, a while back some guys were logging some customer activity in a database. They decided they wanted to bill the customer for this activity. I was slumming as a test engineer at the time. So dude writes his happy spring and hibernate service to take a couple of different tables, join 'em together and make some SOAP calls to the billing service.

      He hands it off to me and I, being a reasonable tester and knowing that a single action by the customers could generate 10 or 15 of these records and that we'd eventually expect thousands of hits a day, ask myself "Ok! So what happens when this gets 100K records?" Well I fire up my random record generator, inject 100K records into the database, and watch his module crash and burn.

      So I kick it back over the fence to him and they come back a couple days later and say "Don't do that!" So I shrug, ramp it down until it doesn't crash and burn anymore (Around the 50K records mark) and think, "Ok, well I'm going to need to validate the data." So while his module is off chewing through 50000 records, I write an SQL join to do what he had with spring and hibernate. My SQL join took less than 10 seconds to run and I couldn't find a top bound to the number of records it could handle.

      Of course the cause of the problem was that he was bringing in each record into java as java objects, from two different tables, and combining them in memory. I'm sure that he could have tweaked spring and hibernate to do the join on the database side, but he'd have had to have been a lot more experienced with the framework and he had five or six such frameworks that he'd have to have that level of experience with to do his job on a regular basis.

      I guess what it boils down to is, no amount of IDEs, Frameworks or fancy design tools will ever replace actually knowing what you're doing.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    28. Re:What is he on.. by hackula · · Score: 1

      I use Vim for exactly the scenario you describe. Programmers on 3 continents, hundreds of source files, real customers all over the world. I am one of 4 main devs on the project (there are others with less direct responsibility). I use Vim, one uses Textpad, one uses Emacs, and one uses Notepad++. I have actually been using Sublime Text 2 as well, which is different but nice. My point is that if you do not lean too heavily on the IDE, and the language/platform allows it, then you can just let each programmer use whatever the hell they feel like. Too much abstraction and code generation (I'm looking at you .Net, with your files all over the place that have at the top "//PLEASE, DO NOT MODIFY THIS FILE... OH GOD PLEASE"), and this ideal scenario of each person using what they are most productive with becomes out of grasp.

  32. Refactoring can be done by any decent editor by Viol8 · · Score: 1

    "Renaming variables, fields, and functions/methods is a major pain in the butt in any language if you have to do it manually. Having tools to do this instantly is a major reason for using IDEs and the like."

    You mean like "%s/old name/new name/g" that the vi editor has had since the 80s? Perhaps you should try using a programmers editor. You might be surprised at just how little extra an IDE gives you.

    "Having a tool that allows you to navigate efficiently in the code improves performance of the programmer in any case."

    2 or more xterms and "grep". I find that combination far more efficient than some bloatware IDE. Admittedly I'm a C++ coder, not java, but I've used some IDEs and found them wanting. They want to be an entire coding "enviroment". Thanks , but I already have one - its called the operating system. However YMMV.

    1. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      "%s/old name/new name/g" will replace all occurrences of the text 'old name', regardless of it semantic meaning in the program and only in this single file. For example if you have a local field 'foo' and you want to change the name to 'bar', replacing the text will also break the point in your code where you call som external method also called 'foo'. Also it won't update places in other files where they refer to 'foo' in your file. This won't happen with refactoring support in an IDE.

      You already knew that...

    2. Re:Refactoring can be done by any decent editor by 91degrees · · Score: 4, Interesting

      You mean like "%s/old name/new name/g" that the vi editor has had since the 80s? Perhaps you should try using a programmers editor. You might be surprised at just how little extra an IDE gives you.

      I don't know. Does vi automatically deduce the scope of the variable and change references to it globally without affecting identically named variables in other classes or variables that the changed name is a substring of?

      "2 or more xterms and "grep". I find that combination far more efficient than some bloatware IDE

      The source I'm working on has a lot of members of different classes with the same names.

    3. Re:Refactoring can be done by any decent editor by anarcobra · · Score: 1

      Right, because renaming a variable is a simple matter of find and replace all.
      That only works if I have globally unique names for every variable I might want to rename.
      It also means I have to do the same thing for each separate file if the editor doesn't do replace in several files at once.
      Even for emacs they made cedet, which gives you a bunch of these features.

    4. Re:Refactoring can be done by any decent editor by petermgreen · · Score: 1

      The fundamental problem with simple search and replace is in most languages the meaning of foo.bar depends on the type of foo. So to find the declaration for foo.bar requires you to find where foo was declared, find out it's type (say tbaz) and then search for the declaration of tbaz.bar, an IDE that understands the language can have that information available so that you can jump straight from the foo.bar call to the declaration of the method that is being called.

      Now C and C++ are difficult in this regard because they use simple text replacement as part of the language. THEN the meaning of the replaced text depends on context. That is difficult for an IDE to follow in the general case.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    5. Re:Refactoring can be done by any decent editor by Viol8 · · Score: 0

      Anyone who uses common names for different variables or variables and functions is an idiot. So its a moot point.

    6. Re:Refactoring can be done by any decent editor by dunkelfalke · · Score: 1

      So is anyone who uses simple (and mistake-prone) search/replace for refactoring. Your point being?

      --
      "It's such a fine line between stupid and clever" -- David St. Hubbins, Spinal Tap
    7. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      If you want to include someone else's code into your project and they just so happen to have the same names in some instances?

      I'll leave you to the task to make sure that no programmer anywhere in the world ever uses a universally non-unique name.

    8. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      "Renaming variables, fields, and functions/methods is a major pain in the butt in any language if you have to do it manually. Having tools to do this instantly is a major reason for using IDEs and the like."

      You mean like "%s/old name/new name/g" that the vi editor has had since the 80s? Perhaps you should try using a programmers editor. You might be surprised at just how little extra an IDE gives you.

      Sigh. Seriously?
      I'd like you to try that on any sufficiently-sized project with a commonly enough named variable/function/method...and then, perhaps, YOU might be surprised at just how far your suggestion is from what an IDE can give you.

    9. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      Because it is entirely unreasonable to have two different classes with the property or method "size". Each size property should have different name: MyClass1Size, OtherClassSize. "Delete" and "add" are another examples of entirely stupid names. No class should ever have them. You should use instead "deleteArgumentTypeFromClassName" naming convention.

      Do not forget about loop variables such is "i" for for cycle. Each for cycle should have its own variable name for looping purposes. The same goes for all other temporary variables active inside one 8 lines long scopes. Each should have different name.

    10. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      Your code must be completely and utterly horrendous.

      You're saying that say, if someone is creating a shopping application, and they have a type of product whose weight they store against it such that it can be accessed product.weight - i.e. a completely sensible and easy to follow naming convention, then they also have say, a liquid product, like a drink which also has a weight property, i.e. drink.weight but then they instead decide they don't want the weight of drinks, but instead the volumes of drinks because of a change in government legislation you either have the choice of:

      1) Keeping the weight as a defunct property of liquid products leaving meaningless clutter and placing volume alongside it

      2) Using really really dumb fucking property names from the outset like product.productWeight and drink.drinkWeight and doing that sort of thing for all your properties drastically increasing the amount of code you need to type, and creating much less readable code

      Honestly it sounds like the real problem is that you're not a professional developer, or if you are, you've only worked on really basic trivial stuff, either of which doesn't really qualify you to comment on the topic at hand as you're not experienced enough.

      Come back when you have a bit of experience, you'll have something more useful to say then because you'll know by that point that you were wrong.

    11. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      Or can sed or grep extract a method and make all invocations of the same code instead invoke the method? Or the reverse of inclining once a method has become so small it no longer deserves to be a method? Or reorder a signature and correctly modify all related invocations? All these things are immensely useful when pursuing a proactive tdd approach. I have yet to figure out how to do similar easily in so called "modern" scripting languages.

    12. Re:Refactoring can be done by any decent editor by Anonymous Coward · · Score: 0

      I don't know. Does vi automatically deduce the scope of the variable and change references to it globally without affecting identically named variables in other classes or variables that the changed name is a substring of?>

      Nope. He thinks that a basic search/replace feature is the same thing as refactoring.

    13. Re:Refactoring can be done by any decent editor by 91degrees · · Score: 1

      Well, if it goes wrong you can always use the reverse search/replace operation:)

    14. Re:Refactoring can be done by any decent editor by mehemiah · · Score: 1

      don't do that globally, try one by one. Its still faster than manually unless you used the word manually wrong

    15. Re:Refactoring can be done by any decent editor by petermgreen · · Score: 1

      So lets see I can

      1: manually read through the code to find all instances of a name, manually check the context of each one to see if it should be changed, make the change (either manually or through the replace tool), try and build the program, see where I screwed up and fix the screwups.
      2: use a tool with dumb search to find all instances of a name, manually check the context of each one to see if it should be changed, make the change (either manually or through the replace tool), try and build the program, see where I screwed up and fix the screwups.
      3: use a tool that understands the programming language i'm working with to perform the rename automatically and without screwups.

      Option 2 will be a lot quicker than option 1 but a lot slower than option 3.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    16. Re:Refactoring can be done by any decent editor by mehemiah · · Score: 1

      there's an IDE that can do global replacement reliably while taking scope into account?

    17. Re:Refactoring can be done by any decent editor by petermgreen · · Score: 1

      I've never had a problem using the refactoring tools (including renaming fields and methods, extracting chunks of code, adding extra parameters etc) in eclipse for java. Having said that java is probablly one of the easiest languages to do this in because it doesn't have a preprocessor.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
  33. Re:Did he already heard about integrated debugger by Hognoxious · · Score: 1

    If the language was sane and threw exceptions on problems rather than returning null, there would be far less issues.

    TypeMismatchException: expected integer, found float at or near line 237. Bailing...

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  34. I disagree. by Anonymous Coward · · Score: 0

    I have done projects in both jEdit and Eclipse. I have also done C++ projects, a language that allows you to stuff the interfaces in a few or even a single file. I have also dabbled in multiple other languages.

    Basically, regardless of language, if you want to be productive, you want auto-completion. Yes, you can do without. Yes, having APIs in a few files makes it a bit more convenient to look them up. However, looking them up alone is too slow, especially if you are working on a bigger project with multiple people. Even if the interfaces are ALL in a single file (bad idea, generally), you still have to spend time to sift through it and you'll need to sacrifice precious screen real estate to display it. However, it's simply to slow to look up every time whether your coworker has called a function wiggle-the-frob or jiggle-the-frob every time (and yes, you keep forgetting it if the project is large enough).

    And no, "you should be thinking a lot about each line of code" generally does not apply in real projects: The really smart parts of the code can take 0.5-2 days to deep thinking to write them, but then you spend the next 2 weeks on code that just churns and moves data around which is mind-numbingly dumb but necessary work. In the latter part of the coding, which takes up a lot more time, you already have the code roughly mapped out in your head before you even start writing it and you just want to write it down as fast as possible to get back to the interesting parts.

    Also, refactoring: Regardless of language, if you want to rename a method, function, whatever, you want something that does it for you and understands the language. No, sed is not good enough, you don't want to fire some sed command, which has no awareness of the code semantics at 500+k lines of code and hope it does the right thing.

    As far as the "thousands of small files, each class has its own file" thing goes: It has advantages and disadvantages, the plus side being that classes are self-contained. You can easily take them out, move them around, put them somewhere else without having to shred apart some big interface file and hope that you caught all the method declarations. Also, when you organize interfaces in larger units like namespaces etc., you do have to think about how to organize those. Yes, it may be worth it, or it may not be, but it's an overhead if you decide to do it and you'll have to stick with it, too.

    As far as the "Java is so verbose" meme: Sometimes it is the language, sometimes it is the people. People in large Java projects tend to over-engineer things (I'm not entirely sure why people do this, maybe abstraction is over-emphasized) with abstractions layered upon abstractions and then you end up with something like the "AbstractSingletonProxyFactoryBean", but you don't have to do that, if you put some effort into, you can keep it simple.

    There are some parts that I really find needlessly verbose in Java like catching "checked" exceptions: Even when you provide PROOF that the exception CANNOT occur, you have to add 6 lines (in Allman style, it's a bit less in canonical Java/K&R style) of completely useless code. And yes, functional languages are very nice and elegant and I love them to death, but if one is honest, they haven't caught on, maybe that's a smell on its own.

  35. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    I clarified later that I was talking about needing a debugger often, not at all. Clearly a debugger is a very useful tool, for all the reasons you stated, but in Java you often have to use a debugger to find trivial bugs because of flaws in the way the standard library operates - that is where I was saying there is an issue.

    --
    -- Lattyware (www.lattyware.co.uk)
  36. Re:Did he already heard about integrated debugger by lattyware · · Score: 3, Insightful

    Then why can you catch an exception? Exceptions are the perfect tool for this kind of job - you might not be able to open that file, what will you do if you can't? Catch that exception and deal with it. It means you get the feedback at the right point.

    --
    -- Lattyware (www.lattyware.co.uk)
  37. Re:Did he already heard about integrated debugger by dkf · · Score: 2

    I would argue needing a debugger is also a sign of language flaws. Debuggers help you find issues with your code while it runs.

    The biggest code smell is the lack of an ability to attach a REPL to a running program so you can poke around in it, define new things at runtime and experiment with them until they work, and then translate that back into "fixed" code in a source file. But that's not really the way you do things in Java (and a few other languages as well).

    --
    "Little does he know, but there is no 'I' in 'Idiot'!"
  38. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    The problem with the null pointer exception is that you get told about the effect of what happened, not what caused it. Say I try and do x, which fails, and then gives me null - when I try and use that x later on, I get the exception, and have to trace back up my code to find the issue. If x threw the exception when the problem happened, I would know why that object isn't there, which is far, far more valuable and easy to work with.

    --
    -- Lattyware (www.lattyware.co.uk)
  39. Re:Did he already heard about integrated debugger by darkat · · Score: 3, Informative

    In general, if you need a debugger while developing your code then you may not know what you are doing. Maybe you are developing very special stuff, otherwise the intensive use of a debugger means either lack of experience and/or skill..

  40. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    I would argue needing a debugger is also a sign of language flaws.

    I'd argue against it.

    Debuggers help you find issues with your code while it runs.

    More importantly, they allow you to examine the state of your program when an issue arises. In other words, you can test, quite on the spot, any assumptions you have about the state of the program, and thus can more easily determine what went wrong.

    Yes, about everything you could do with a debugger you could do with well-placed print statements, and lots of recompiling and rerunning. But why waste your time with that if you can just look up the value in the debugger without changing the code?

  41. Re:Did he already heard about integrated debugger by chrismcb · · Score: 1

    Not too long ago. And it is WAY easier to debug it than in Python. I wish I had your exceptions that get thrown and tell you exactly what you did wrong, and not just tell you that the pointer you just access was NULL.

  42. The biggest enabler of bad software is by Anonymous Coward · · Score: 0

    the absolute refusal of C-typists to learn to program properly. And the blind refusal of good programmers to understand the difference between typing lots of code and actual software engineering. In my 22 years in industry, the number of actual software engineers I've encountered can be counted on one hand (literally). There were a fair number of good programmers. But for the most part, it is pretty dire.

    And don't get me started on software architects.....

    No amount of IDE religious belief will make you a good typist/programmer/engineer.

  43. Re:Did he already heard about integrated debugger by Thiez · · Score: 1

    > but in Java you often have to use a debugger to find trivial bugs because of flaws in the way the standard library operates

    Could you mention one or two examples? In my experience the standard library is pretty good.

  44. Aren't All Big Projects Harder To Manage? by assertation · · Score: 2

    I'm not an ubergeek, so maybe my view isn't as good as the guy who wrote this article, but aren't all large projects, regardless of language, harder to manage?

    I've worked maintenance on projects done in an old procedural style. I can't believe anyone in 2012 would think that OO is not an improvement and actually makes managing a project harder.

    1. Re:Aren't All Big Projects Harder To Manage? by Darinbob · · Score: 1

      However it's the design style that can get tricky. Sure, if the language lets you shove it all in just one or two files so that you can see the entire class and it's interface then that's great. Even better if you can put several related classes all into the same file But if the language or its runtime environment want you to split things up into many different files just for one single class it gets more cumbersome.

    2. Re:Aren't All Big Projects Harder To Manage? by Anonymous Coward · · Score: 0

      I can't believe anyone in 2012 would think that OO is not an improvement and actually makes managing a project harder.

      It's harder if you do it wrong. If you try to jam everything into an inheritance structure, you'll end up with something horribly inflexible, abstract, and would have done better using a procedural style.

      As with everything, how you use it matters.

  45. Re:Did he already heard about integrated debugger by sproketboy · · Score: 1

    Do you have an example of this? I rarely need to use the debugger in Java. I can usually spot the bug in a few minutes looking at the code. But I use IntelliJ not Eclipse.

  46. Re:Did he already heard about integrated debugger by sproketboy · · Score: 1

    log.error(e.getMessage(), e) will give you the stack trace.

  47. Re:Did he already heard about integrated debugger by Teckla · · Score: 1

    I would argue needing a debugger is also a sign of language flaws. Debuggers help you find issues with your code while it runs. I've found that so much of the time those kind of issues are from stuff like Null objects - where you get an exception from a null object and then have to crawl up your code finding out where it came from. If the language was sane and threw exceptions on problems rather than returning null, there would be far less issues.

    Not saying that debuggers are useless or that every problem a debugger is useful for could be solved, just that if you find yourself needing it often, maybe it's a sign something is going wrong with the language.

    Did you even bother to try to understand what he said before you replied with your nonsense?

    Here, let me help you: he uses the debugger and dynamic class loading as a REPL.

  48. Re:Did he already heard about integrated debugger by Nerdfest · · Score: 1

    Nulls do not necessarily indicate failure. It's only an exception because an operation using it as a base was specified.

  49. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    Then you can swap out 'using a debugger' for 'spending time looking at the code' - neither should be necessary if you get an exception when something fails rather than returning null.

    --
    -- Lattyware (www.lattyware.co.uk)
  50. Re:Did he already heard about integrated debugger by lattyware · · Score: 2

    Ugh, as always happens I poorly phrase the first sentence of my post and everyone jumps on it. I wasn't saying debuggers are bad, or at least wasn't trying to - just that in Java, the standard library has a tendency to return null when something goes wrong rather than throw an exception, which means you don't get told about the cause of the issue, just when it shows up later as a null pointer exception. This can lead to using the debugger a lot or looking through the code to track it down. I hope that clarifies my point.

    --
    -- Lattyware (www.lattyware.co.uk)
  51. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    That's my point, that in Java, nulls do get used to indicate failure, that's when they are a problem.

    --
    -- Lattyware (www.lattyware.co.uk)
  52. Agreed! by zmooc · · Score: 5, Interesting

    I (professional Java coder since 1998) absolutely agree. Java is hardly human-writable, even if it were only for the import statements. Without the existence of some very good IDEs Java might very well not have been as popular as it is today. But it is.

    Is this a problem? Apparently not in practice. Would I rather have a more dense, less IDE-dependent language? Yes. Are such alternatives available and do they come with an enormous ecosystem of supporting libraries? Nope...

    --
    0x or or snor perron?!
    1. Re:Agreed! by Anonymous Coward · · Score: 0

      Have you ever heard about javascript?

    2. Re:Agreed! by bcboy · · Score: 1

      You're wrong about the alternatives. JVM based languages have the same libraries as java available, by definition. Check out clojure. A good place to start is the Rich Hickey videos on infoq.com.

  53. Re:Did he already heard about integrated debugger by Teckla · · Score: 1

    Ugh, as always happens I poorly phrase the first sentence of my post and everyone jumps on it. I wasn't saying debuggers are bad, or at least wasn't trying to - just that in Java, the standard library has a tendency to return null when something goes wrong rather than throw an exception, which means you don't get told about the cause of the issue, just when it shows up later as a null pointer exception. This can lead to using the debugger a lot or looking through the code to track it down. I hope that clarifies my point.

    I agree that APIs should avoid returning null wherever it is reasonable to do so, and that the standard Java library is not perfect. However, I am darn glad the standard Java library is as comprehensive as it is. It saves me a lot of time having to hunt down third party libraries that may or may not be affordable, or may or may not have licensing terms that I can accept.

    I think Python is much worse in its "anything can throw an exception at any time" design, and I am glad I don't have to use it very much anymore.

  54. Clojure and Scala aren't that much better by hibiki_r · · Score: 2

    While I am not fond of Java's inability to define functions with a proper syntax, it's not as if the alternatives are noticeably better as far as not needing navigation. In the end, it all comes down to program complexity. A developer still has to know the code he needs to use, and for any program of reasonable complexity, you need to either remember it or use an IDE to easily access it. And given the ungodly number of libraries we use today, this happens even when you are coding in Javascript.

    If anything, the fact that Java is statically typed makes it easier on IDEs to tell you all the details of available classes. IDE support for Scala will still have you remembering signatures that Java wouldn't have to. And we all know the fun of Javascript, where most IDEs will not be able to guess what properties a object has, because the only way to know is to run the app.

    Don't get me wrong, I sure wish for at least Groovy-like function support, unlike, say, the horrible things people do to try to write functionally in Java (welcome Guava abuse!), but the only way some of those languages make you not 'need' and IDE is because IDEs can barely understand the languages. I'd not call that a good thing.

  55. Re:Did he already heard about integrated debugger by sproketboy · · Score: 1

    Yeah returning null is usually an error. Devs should read Effective Java more often. ;) However you'd still get a stack trace with a "caused by".

  56. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    I would argue the opposite. If you execute code it will invariably do things you didn't expect, regardless of language.

    Isn't that a clear indication that you were unable to express what you wanted the program to do in a clear way?
    I'm not saying that a perfect language exists and I have certainly encoutered code that were hard to write in a way that made it obvious what the code did in the languages I knew.
    I still wouldn't rule out that this is a flaw of the languages.

  57. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    The standard library is (mostly) great, I agree on that point, I'm just saying this is a problem I have with it. As to Python throwing too many exceptions, completely disagree, it makes it so much easier to work with - if something doesn't work the way you expect it to, it's going to throw an exception. Knowing that is so much nicer.

    --
    -- Lattyware (www.lattyware.co.uk)
  58. the crap we hear these days by Anonymous Coward · · Score: 0

    When was the last time someone wrote a 3D game engine in Notepad ?

  59. Eureka! by Kookus · · Score: 3, Interesting

    I think the eureka moment should be when you realize that any language can fall into the trap that you describe. There's reasons for the complexity. Whether they are for compilation/parsing performance, or for some type of design pattern to elegantly solve a problem.

    I've got a buddy down the hall who grew up ASP and VB. He uses notepad for development, and complains about not having pointers in Java. Syntax highlighting/completion aside, it takes him forever to write even some of the most basic classes. It's a constant game of finding something to copy and paste. What clicks off in my head is that when you're copying and pasting so much, someone probably already wrote a library for what you were trying to do. Hence additional files, includes, whatever it is... it's more of that whole lots and lots of small files that are mentioned as a downer in the op.

    If you're complaining about OO patterns, that's not language specific. Heck, even SAP has an OO equivalent.OO is a byproduct of merging human conceptualization and computer language. It becomes more "natural", arguably, for a developer to understand. Is that a problem of the language? No. I can write just as much spaghetti code as OO in Java, well, pretty much any language for that matter.

    Now for your humorous AbstractSingletonProxyFactoryBean. If you're writing a webpage with some fancy graphics on the front and not much user interaction, then you'll probably come across this class and think wtf would anyone ever use it?
    If you come from the data processing world with many systems working on the same data, you pretty much don't live without it.

    This is equivalent to growing up in Mexico, never even hearing of the word snow, and then see someone walk by with a pair of snowshoes in hand. Do you point and laugh first, or do you try to understand why they have snowshoes?

    Snowshoes are obviously everything that is wrong with footwear.

    1. Re:Eureka! by dkf · · Score: 1

      Now for your humorous AbstractSingletonProxyFactoryBean. If you're writing a webpage with some fancy graphics on the front and not much user interaction, then you'll probably come across this class and think wtf would anyone ever use it?
      If you come from the data processing world with many systems working on the same data, you pretty much don't live without it.

      Good Java programmers don't use that sort of class. Well, not explicitly. They have a Dependency Injection system (like Spring or OSGi Blueprint) that deals with these details for them, and lets them just write the interesting parts of the program.

      Having such systems makes Java much easier to program with; you just have to remember the First Rule of Fight Club... err... Spring: nobody talks about Spring (in their code). By that I mean that you should not mention any part of Spring in your code at all (not always possible, alas); let Spring manage the configuration and setup (which it is very good at) and let your code focus on the real operational logic. This is much simpler than doing it yourself, and the more complicated the application the more this is true.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    2. Re:Eureka! by bcboy · · Score: 1

      There's complexity that comes with the problem domain. Then there's "incidental" complexity that comes with your choice of tools. For example, languages without garbage collection have more incidental complexity than languages with garbage collection: without GC, you spend a lot of time manually solving the problem of managing memory resources.

      OO introduces a lot of incidental complexity. That's the point. It's clear, since he mentions some function programming languages, that he believes FP introduces less incidental complexity. I think that's exactly right.

    3. Re:Eureka! by gbjbaanb · · Score: 1

      I'd like to offer a different analogy - the million-dollar pen that can write upside down for astronauts vs the russians pencil.

      Most IDEs are like this, massively complex monsters that you need because the languages and frameworks you use are monsters themselves, and they were allowed to become monsters because... there are IDEs available to make the pain of using those languages easier. When the real answer is to make the language simpler to use and do more in library code.

      My example earlier of what you need to make a WCF Service in C# work compared to the dozen lines of PHP is quite true - but no-one notices simply because they have Visual Studio to auto-generate most of the code for them. Obviously Microsoft loves this situation as they can sell lots and lots of IDEs - ain;t no-one going to write those services in notepad while they can make it impossibly complex!

      I think this is the problem, not that IDEs are bad in themselves, but that they become crutches that you have to use to write code, and once you're hooked on that, they add other things like integrated SCM and testing where you must use only the test tooling that comes provided in order to get any tests done... and people upgrade to the next mega-expensive version to keep the cycle going.

    4. Re:Eureka! by betterunixthanunix · · Score: 1

      There's reasons for the complexity

      The complexity of a program should be proportional to the scale of the problem that it solves. Take a look at how complex the "Hello world" program is in Java -- there is no excuse for that mess.

      some type of design pattern to elegantly solve a problem

      Except that OO design patterns do not elegantly solve problems. OO design problems make up for the inelegance of OO solutions to certain problems, or deficiencies that are common in OO languages. Examples:

      • "Iterator pattern" -- meant to make iterating over an OO data structure simpler, but iteration is inelegant on its own. If you need to traverse a list, use tail recursion. If you are applying iterators to arrays, you need your head checked. If you need an iterator to examine all key/value pairs in a map, you are using a language for which maps are not a built-in type, and so your iterators are just a way to cover up for a deficient language.
      • "Command pattern" -- meant to encapsulate a function in an object, so that it can be called later. Of course, this is nothing more than a lexical closure, and unsurprisingly, C++ and Java now have lexical closures (but closures in C++ are just as ugly as the command pattern itself, so I have to wonder why the standards committee even bothered).
      • "Visitor pattern" -- meant to allow new operations to be added to a class hierarchy without forcing the hierarchy to be changed. Except that this is nothing more than an obscure way to implement multiple dispatch, and so the visitor pattern is worthless in languages that support multiple dispatch. The visitor pattern also makes your life harder if you need to change the hierarchy that your operations are being applied to.
      • What clicks off in my head is that when you're copying and pasting so much, someone probably already wrote a library for what you were trying to do

        Or you are doing something that your language doesn't properly capture. There is lots of duplicated code in a visitor pattern.

        OO is a byproduct of merging human conceptualization and computer language

        Not any better than procedural or functional programming does (and functional programming may even do a little better here). Now, constraint programming does a great job of merging human conceptualization with computer programming -- you give the system facts and rules, then ask it a question.

        It becomes more "natural", arguably, for a developer to understand

        Only if the developer has received lots of training in how to think about OO designs and what the good OO design patterns are. Language oriented programming does a much better job of making the interface to a system "natural" for the programmer -- the interface is a DSL (which is embedded in the general purpose language that the system is written in; think Lisp macros). If you needed to perform some numeric computations, would you rather learn the interfaces for a bunch of classes, or just a small language for numeric computations (hopefully one which "looks like" the syntax in a typical math textbook)? Which do you think would be less effort?

        OO is useful as a programming paradigm in the same way that LOC is useful for measuring programmer work. Sure, you can point out cases where LOC is an accurate metric of programmer performance; yet in reality, LOC is only one dimension, and sometimes LOC is utterly worthless as a metric. So it is with OO -- it is sometimes very useful on its own, sometimes completely worthless, and usually it is applied as just one technique in a large codebase.

      --
      Palm trees and 8
    5. Re:Eureka! by Anonymous Coward · · Score: 0

      http://www.snopes.com/business/genius/spacepen.asp

      Unfortunately, your analogy actually shows the opposite of what you are trying to say.

  60. Haskell IDEs by nomad-9 · · Score: 1

    So basically the author claims that, if the language is "good enough", there's no need for an IDE, as for "sane languages" like Haskell,.

    But Haskell itself has IDEs in development that do way more than "syntax highlighting" and "parent matching". Examples:
    - Leksah (http://leksah.org/)
    - .EclipseFP (http://eclipsefp.github.com/)

    There was also talk about a "Visual Haskell " based on MS Visual Studio...I have no beef with Haskell, on the contrary, from what I heard, it seems like an elegant and powerful language. But is Haskell becoming an "insane" language like Java because "IDEs are a language smell"?

    1. Re: Haskell IDEs by robmv · · Score: 1

      and some doesn't have IDEs but are an IDE by itself: Smalltalk. Smalltalk has no concept of source code files but still its "IDE" is wrapped around the concept of code navigation. Is Smalltalk an awful language? no.

  61. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    Isn't that a clear indication that you were unable to express what you wanted the program to do in a clear way?

    Not necessarily unable, just didn't. Could be for other reasons (e.g. a simple mistake).

  62. I want to choose my own tools by Anonymous Coward · · Score: 0

    Android got it right when it allowed developers to choose their own tools. If someone wants to use Eclipse, they can. If I don't, I don't have to. I know that a fail is going to happen when a platform absolutely forces me to use certain tools. Blackberry not only forced you to use Eclipse, but forced you to use Windows. And they failed. Even Microsoft's monoculture allows you to use your own tools. The only example to the contrary is Apple's closed ecosystem which forces you for all practical purposes to use Xcode.

    To succeed, release a SDK for your platform and let developers choose their own tools. Simple as that!

  63. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    The problem is "I would argue needing a debugger is also a sign of language flaws." is your summary sentence. If I was to only read one thing about your entire statement, that should summarize everything, which it doesn't.

    You just don't proof read well at 4:34am(my time, but that's the joke).

  64. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    You are entirely correct, I started with a terribly misleading sentence, I accept that error.

    --
    -- Lattyware (www.lattyware.co.uk)
  65. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    Many times a stack trace isn't useful in itself without the state at the time. It does give you a great starting point, but it doesn't always have everything you need.

  66. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    The place where something finally called a method on a null is not necessary place where the bug is. The question is why that variable has a null value at that moment. You will not find it in the stack trace.

  67. lots and lots of small files by RabidReindeer · · Score: 1

    So why do Java coders turn to Eclipse? 'Because [of] a combination of shortcomings in the Java compiler and Java's OO nature,' explains Faler, 'we end up with lots and lots of small files for every interface and class in our system. On any less than trivial Java system, development quickly turns into a game of code- and file-system navigation rather than programming and code editing. This nature of Java development requires IDEs to become navigation tools above all.'

    So in other words, we blew it by giving up COBOL, where everything is easy to find because it's all one big source file.

    Amusing observation: I once worked in a shop where the main COBOL program in the system was so big, it blew out the COBOL compiler. More that 64,000 distinct paragraphs in the PROCEDURE DIVISION.

    An IDE is an intelligent development environment. I've progressed over the years from punched cards to line-mode editors to full-screen editors to simple edit-and-debug frameworks to Emacs and ultimately to Eclipse and its relatives. I can fall back, and occasionally do, but the reason I prefer IDEs is because navigation is only a small part of it. Auto-suggestion means I don't have to remember details of each and every method I use. Dynamic JavaDoc display means I can RTFM without leaving what I'm doing. An integrated debugger means I don't have to litter my code with diagnostic print statements. The database plugin allows me to view and tweak the databases. Mylyn makes it easier to switch contexts when I have to drop everything and make emergency fixes or alternate between tasks. The refactoring plugins allow me to keep my codebase cleaner without a lot of manual effort. And so forth, and so on...

    IDEs also have their darker side. Pound-foolish managers expect that they can employ cheap monkey-coders and let the IDE do the advanced thinking and that can result in some real horrors. Too much reliance on an IDE can result in projects that can't be easily maintained or can't be handed off from one person to another (since too much of the build process in in IDE customizations).

    Still, an IDE that's properly employed in the hands of a skilled developer can be worth its figurative weight in gold. It's far more than just a navigational tool.

  68. Ditch Clojell, Haskure by Anonymous Coward · · Score: 0

    WTF is Clojure & Haskell, says the man who writes large scale java apps?

    IMHO, you really wanted to plug Clojure and Haskell and diss Java and the IDE angle is just you trying to make it into Slashdot story. But there are a million and one new FAD of the day and they don't last long .

    Also names like AbstractSingletonProxyFactoryBean, well I don't know what it is, but it's Abstract (i.e. a base interface rather than a specific implementation), Singleton (one instance does it all) , Proxy (substitutes for something else), Factory (Creates something, so most likely he means ProxyFactor meaning it creates theses proxies), Bean (either Rowen Atkinson comedy alterego and related to Java Beans).

    It's like German compound words, they are long, but they just contractions of word fragments. Nothing wrong with them, other than they make comedy harder, since the first fragment is usually the spoiler for the whole word.

    Clojell and Haskure can probably just be made to disappear simply by mispronouncing them often enough that they are forgotten ;)

  69. Not Java itself, but Java "style" by Anonymous Coward · · Score: 0

    It's not all that hard to write fairly clean and simple code in Java. But the "OO experts" would sneer at you if you don't use interfaces, annotations, factories, endless config files written in xml, etc., etc. Java gurus insist on heaping more and more required baggage on top of the heaps they started out with.

    1. Re:Not Java itself, but Java "style" by PPH · · Score: 1

      Right. But Eclipse doesn't force you into that stuff. The boilerplate is there, if you want it. It can be an annoyance, but it can be bypassed. I've dashed off a number of very ugly Java apps using Eclipse and it still provides some useful features. I've also imported objects that I started using vi. No problems (a few warning '!'s but it builds and runs).

      I'm sure I could configure Eclipse to fit a custom coding style. But I don't do this full time, so its easier for me to skip the stuff I don't need then to bend it to my will.

      --
      Have gnu, will travel.
  70. Oh, but Java is human READABLE by coder111 · · Score: 2

    Have you tried reading perl code? Or mediocre to bad C/C++? It's impossible to decypher most of the time.

    I consider Java to be the easiest language to READ code in and to understand it. Most of the time it's possible to quickly decypher even crap code written by newbies. I'll live with having to write slightly more verbose code or slightly more boilerplate code just for this reason. Or with having to use an IDE to do that for me.

    --Coder

    1. Re:Oh, but Java is human READABLE by Anonymous Coward · · Score: 0

      Or mediocre to bad C/C++?

      ...Or mediocre to bad Java? :)

    2. Re:Oh, but Java is human READABLE by Anonymous Coward · · Score: 0

      Have you tried reading perl code? Or mediocre to bad C/C++? It's impossible to decypher most of the time.

      George W. Bush was a great president, if you compare him to Hitler.

      Just because you can find something worse doesn't mean that what you have is good.

    3. Re:Oh, but Java is human READABLE by Anonymous Coward · · Score: 0

      As is often said here, Perl that is very difficult to read is very probably bad Perl. Or obfuscated or "golfed" (contracted to the shortest length). Golfing is fun and it helps learn economical or exotic syntax but good Perl programs do not golf. Well-written Perl, written with a view to readability and not to extracting margins of efficiency that are not needed for the particular problem, should be readable.

  71. I've Been Saying That For Years! by Greyfox · · Score: 1

    The IDE shields you from the system, which you really need to know backward and forward when you're programming it. You need to understand how libraries work on your system, you need to understand the compile and link cycle, you need to understand dependencies and the IDE hides all that from you. If you haven't spent time writing your own makefiles you won't understand not only how easy it is, but how universally it works on every systems (including Windows ones.) By the time you're to the point where you understand that stuff and could move to an IDE if you wanted to, you probably will hate having those details of the system hidden from you. I've never seen a project so big it couldn't be managed with a good text editor and make! I've been known to hand-author ant and maven buildfiles, too, and it really highlights Java's nasty requirement to crap directories everywhere.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    1. Re:I've Been Saying That For Years! by TheSkepticalOptimist · · Score: 1

      I think that speaks more to the inefficiency of Java ad a development platform if you have to toil with understanding makefiles across many different platforms. If you spend half your time hand coding makefiles and trying to build your project on every conceivable platform you think your software/code might be used on, chances are you are never hitting your deadlines. If you spend the other time running make and having to fix 1000 syntax errors because you spent the last 6 hours writing a text file, then you probably are just not a good developer at all.

      Again a GOOD IDE would help you target any platform by efficiently creating the build environments and grabbing the correct libraries. Again I think this is more the fact that Eclipse sucks as an IDE, especially if someone thinks they are more efficient with text files and command lines.

      --
      I haven't thought of anything clever to put here, but then again most of you haven't either.
    2. Re:I've Been Saying That For Years! by Greyfox · · Score: 1
      Heh. My entire job at a previous company was maintaining the build and test system that they used to build their software on every platform customers wanted it on. I was mostly doing bug fixes and maintenance. It was someone else's awkward attempt to invent Hudson. Most companies don't need such complex systems. I had to build for a few different versions of UNIX at a previous job, but for the most part the compatibility problems were minimal (Except HPUX and its strange implementation of sockets.)

      Make runs on every platform. There has been some version of make on every platform I've ever worked on, with exactly the same syntax on every platform I've ever worked on. Oh some stuff may change around the edges, but make is make. It's as universal (Maybe more so) than ant and maven. You don't need a special program other than a text editor to write a make file, and creating one is a very lightweight process -- pretty much as soon as you get to the point where you have two files in your library, you can throw together a quick make file.

      'course that being said, I use EMACS, so technically I guess I AM using an IDE...

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  72. Total nonsense by DrXym · · Score: 2
    Even the best language in the world would benefit from the facilities that an IDE brings - syntax hilighting, code completion, refactoring, integrated source control, incremental builds, error hilighting, integrated bug / task management, wizards, formatting, build / clean / deploy, multiple projects, interactive debugging, etc. etc. etc.

    You'd have to be a masochist to choose a basic syntax hilighting editor over an IDE without an extremely good reason. I realise there are a lot of good reasons but a language so perfect that an IDE is unnecessary is not one of them.

    1. Re:Total nonsense by Anonymous Coward · · Score: 0

      If the language has duck typing then re-factoring is easy without an ide. If it has a format that's enforced as part of the syntax like python then it tends to be easier to read anyhow and syntax hi-lighting doesn't matter that much. If it's quick to load and run then you find yourself debugging less and making sure you have good logfiles more which is great because when one of your customers has a problem the only thing you get back is the log - no debugger.

    2. Re:Total nonsense by DrXym · · Score: 1
      Duck typing doesn't negate the need for refactoring. More accurately duck typing interferes with it, e.g. I might have some method call throw() that I wish to rename and unbeknownst to me some code elsewhere also has a throw() method with a different meaning and unless the code were to somehow interpret meaning, it would go renaming that by accident. Duck typing also interferes with content assist and syntax checking where perhaps I really do mean to send a bunch of crap to an object despite the fact it appears to be invalid code to the editor. Some languages use structural typing, mixins, traits or whatever to attempt to fix the issues with duck typing.

      And if Python was so easy to read, and syntax hilighting didn't matter then why is it that every editor and IDE with Python support offers syntax hilighting? And why is there so many IDEs that support it through plugins or natively? e.g. PyDev (http://pydev.org/) is a very popular Eclipse plugin and lists a whole lot of stuff it brings to the table there on its website - including various forms of refactoring although I have no idea what it does with duck typing.

      Even if Python really didn't need syntax hilighting or refactoring, it would obviously still benefit from incremental compliation / parsing, source code integration, mixed file projects / workspaces, code completion, lint and anything else that the IDE could provide.

  73. Re:Did he already heard about integrated debugger by dkf · · Score: 3, Informative

    The place where something finally called a method on a null is not necessary place where the bug is. The question is why that variable has a null value at that moment. You will not find it in the stack trace.

    If your logic is so complicated that you can't tell where a variable should have been assigned, your code is already an unmanageable mess. Add preconditions on the arguments to your methods and enforce them by throwing an informative exception if they are not satisfied; that helps hugely. If it doesn't, it's time to also do postconditions and invariants. If you don't understand what those preconditions and postconditions should be, that's a much more important problem than where your code is throwing a NullPointerException...

    --
    "Little does he know, but there is no 'I' in 'Idiot'!"
  74. debugging is the best reason for an IDE by nten · · Score: 1

    I use vim with ctags for file navigation, and there is an add in that does decent intellisense but I don't use it. Just run ctags in all the libraries you are using and your own project (yes its manual) and add references to those tag files in your .vimrc. Then ctl+] and ctl+t will navigate to and back from keywords, its not great about using c++ context to know which instance of that keyword it should jump to. If you try to go the definition of the variable "counter" and people have been naming lots of private variables that, then you'll have a long list to pick from regardless of namespace or class, but its good enough usually.

    I haven't found a decent gdb add on for vim yet though, I heard there was a decent one for emacs. But debugging with gdb is painful. It is powerful, but just plain hard to use, it feels like looking at my code through a drinking straw.

    When I'm working on windows I do appreciate the intellisense, and I don't think its giving me bad habits. The debugging is much much nicer as well. Xcode is somewhere between the two.

    --
    refactor the law, its bloated, confusing and unmaintainable.
  75. Oh so much wrong, head going to explode by TheSkepticalOptimist · · Score: 1, Interesting

    The reason why you break a large "complex" system into small interface files is exactly for EASE of continued development.

    This guy wants to write one large file that contains all of his classes and interface (or lack there-of) and therefore only needs a text editor. This guy is not worth his salt as a developer.

    You can't build large systems this way. Monolithic FILES (opposed to an IDE) are full of old, unusable code and prone to significant defects when worked on by a team of people.

    Also I tire of the idea that I am not a real programmer because I use an IDE which auto-completes and has syntax highlighting. I build apps, I don't spend hours making one line of code execute as efficiently as possible. There is a point of diminished returns where the amount of time you toil over every line of code does not translate into faster more efficient code, so I work at the high level building large complex systems with relative ease, efficiency, and with adequate performance that is acceptable to the clients I work for. Also I finish a project on time rather the going 6 months over.

    I am sure this guy is just lamenting the fact that Eclipse isn't the greatest IDE out there, but the idea that you don't need an IDE for the reason that it creates lots of small files that this guy considered "complex" proves he is a moron and should be ignored.

    BTW a good IDE allows you to quickly and easily navigate lots of those pesky SOLID code files. If you don't know SOLID, look it up.

    --
    I haven't thought of anything clever to put here, but then again most of you haven't either.
    1. Re:Oh so much wrong, head going to explode by dbrueck · · Score: 1

      I partially agree but don't think it's quite so cut and dry. You /can/ build very large systems without an IDE and be quite productive at it, i.e. I disagree with any assertion that an IDE is or isn't required to make you productive, efficient, able to build big things, etc. Further, not using an IDE does not necessarily imply monolithic files, either. I also haven't found any correlation between rate of defects and whether or not an IDE is used.

      So, some of the reasoning in the article is a little off IMO, but so too is the implication that an IDE is universally the best/proper way to do modern development. ISTM that it has more to do with the language than other factors - for development in some languages, an IDE is nearly a requirement. In other languages the benefit is much less assured and can even be a net negative, at least for some people.

  76. Code folding by Errol+backfiring · · Score: 1

    Editors that automatically hide your garbage are a smell. But then, so is the code that needs it.

    --
    Nae king! Nae laird! Nae yurrupiean pressedent! We willna be fooled again!
  77. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    I would argue needing a debugger is also a sign of language flaws.

    I agree, but for a different reason. A good language is one in which debugging means finding logical flaws in the design of a program; no language can truly achieve this ideal, but some languages come closer than others. I do not think we will ever get rid of debuggers; I think debugging will change, though, when languages like C and C++ go the way of the dodo.

    Here, for example, is a tool that helps with debugging high level logic:

    http://alloy.mit.edu/alloy/

    Give it a try some time; you'd be surprised by how effectively it can find bugs in designs, and by how effectively it can convey what those bugs are. This is the sort of debugging we will need going forward -- not debugging mechanics, but debugging high level logic. Knight Capital didn't go bankrupt because of a null pointer.

    --
    Palm trees and 8
  78. Re:Did he already heard about integrated debugger by AuMatar · · Score: 1

    Exceptions are expensive and should be reserved for when things go massively wrong. Returning null is generally the way things should work if you want an error to be recoverable at all. Exceptions are way way way overused.

    Example- Android will throw an exception if you try to hide a dialog window that was already hidden. Why? The end result is what you wanted- it just means every dialog hide has to be exception wrapped (especially since there are timing issues you can't avoid that will cause this).

    Another example- file IO. Trying to open a file that doesn't exist is a common case and should return an error, not throw an exception.

    Basically if you think its likely someone will ever want to catch the error rather than see a stack trace in a log there, it probably shouldn't be an exception.

    --
    I still have more fans than freaks. WTF is wrong with you people?
  79. Charles Petzold by Anonymous Coward · · Score: 0

    Petzold is the old school C programmer and writer who authored many editions of the classic MS Press "Programming Windows" guide to writing GUI apps in C and (later) C#. He's never been a big fan of IDEs, but uses them anyway.

  80. applies to Javascript? by Anonymous Coward · · Score: 0

    The premise of the article is that Java is broken so it needs an IDE.

    I wonder how dependent Javascript programmers are on a good IDE.

  81. I see the problem by Anonymous Coward · · Score: 1

    several thousand files?

    There's your problem right there. You don't have proper dependency management and separation of concerns if you need thousands of files in a single project.

  82. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    Exceptions are intended to be used when a program hits unexpected or fatal issues which cannot be handled locally

    According to whom? I see exceptions being used for correctable errors all the time; here, for example, is an exception that is thrown for a correctable error, in Java:

    http://docs.oracle.com/javase/7/docs/api/java/io/SyncFailedException.html

    Yes, this is a correctable error: if you can ask the user to fix this problem, you can continue from some point defined by the thrower of the exception (perhaps retrying the sync operation). Of course, Java does not support such a thing; however, this is a thread about language deficiencies!

    If I'm just copying a large directory structure then I can reasonably expect to not be able to open a few files due to permissions and, while I'll likely want to log these and display them, treating it as an exception wouldn't be suitable

    Why is that not suitable? I'll have my exception handler log the exception, then I will try to open the next file in the list. You do not even require restarts here; in Java, this amounts to placing a try...catch in the body of a loop.

    Ultimately though for this type of 'It could be serious, it could be nothing' then the decision should be left to the client code rather than the library.

    You forgot, "This is serious, but it can be corrected." Running out of space on a hard drive, a thumb drive being removed while it is being read, etc. Without a good exception/restart system (or continuations if you want to be more functional), your client code winds up being far more complex (think about how you would deal with a thumb drive being removed while some records are being written if you do not have a restart mechanism -- now imagine if your catch block could say, "Retry the operation" and if the exception is not thrown again, your code continues as if no exception was ever thrown).

    The problem with exceptions in most of today's popular languages is that they do not merely signal an error; they also destroy the entire call stack from where the exception was thrown to where it is caught. A better approach, at least in my opinion, is for the exception propagation to leave the stack intact until the end of the exception handler. This would allow the exception handler to invoke a restart, which can be viewed as a "dual" of an exception: a restart would cause control flow to switch to some point defined by the thrower, and would invalidate the stack of the exception handler (and the program can then continue as if there had never been an exception, except for whatever side effects the exception handler has).

    --
    Palm trees and 8
  83. Wrong by Anonymous Coward · · Score: 0

    The issue here is the weird for() construct which is halfway between a range loop(*) -- which shouldn't reevaluate its upper bound expression -- and a while loop -- which should.

    (*) Which, btw, is almost always what you want when you use a for loop.

  84. Re:Did he already heard about integrated debugger by mark-t · · Score: 1
    Most bugs that I uncover with a debugger are often the result of small logic errors and typos where the incongruity between the expected behavior and what the program is actually doing focuses my attention on the exact flaws that I had made. Often examining the stack at critical points *before* the bug actually occurs can yield similar insight as well. Certainly there's nothing that I do with a debugger that I could not probably also do using printf or the like, and correlating that info with what is in a map file that the linker generates, but the debugger in an IDE allows me to perform it much more quickly.

    Does that make me a more flawed programmer than most, because I rely on a computer to do what I could otherwise do by hand, but do not do the latter simply because it would take so much longer?

  85. Language Fault? by wisnoskij · · Score: 1

    Or a necessity. Would you rather have a million line file or 1,000 1,000 line files (categorised and organized).

    --
    Troll is not a replacement for I disagree.
  86. Re:Did he already heard about integrated debugger by lattyware · · Score: 1

    Not at all, my point was that when a standard library function returns null on an error, that error then shows up as a null pointer exception later in the code, which means either debugging or searching through code to find the cause, rather than just reading the exception. By changing this behavior, we could reduce the need to debug.

    --
    -- Lattyware (www.lattyware.co.uk)
  87. Eclipse NOT necessary at all! by LinuxFreakus · · Score: 1

    The idea that Eclipse is needed for Java development is ridiculous. I have been using Java for 15 years on projects big and small... vim and tmux are all I need.

  88. That is extremely stupid by neminem · · Score: 2

    I can't imagine living without an IDE. Having the ability to actually debug my code in-place from the same place I'm editing it, increases coding productivity like crazy, and I can't even imagine anyone seriously trying to argue otherwise. I do agree that it's commonly thought that you should put each class in its own file, and that that's just silly, that it's a lot more readable when multiple classes that are tightly related are put in the same file so you can see them all at once and see the tightly-relatedness. I'm not sure that really has anything to do with having an IDE or not, though.

    On the other hand, Eclipse certainly does have a massive smell of its own. He says "if you suffer from tool frustration, it's not necessary your tools that are poor, it may be that your language sucks, or you're not using it correctly", but no, if you're talking about Java, where the only real IDE is Eclipse... it's because your tool sucks.

  89. IDEs aren't pure benefit by dbrueck · · Score: 3, Interesting

    Modern IDEs can be great, but using them does come at a cost, so I think people end up using them in situations where there is a net benefit (and the opposite is true - people don't use them where there is a net cost to using an IDE). Personally, using a full-fledge IDE often leaves me with a feeling of it getting in the way, but I tolerate it because with some languages or platforms the IDE is still a net win.

    This is nothing but an anecdote, but we have several non-trivial projects (100kLOC+ each) in C/C++, C#, ObjC, Java, and Python worked on by about 10 people (so not huge by any means, but not so trivial as to be meaningless) and:

        * Everybody uses an IDE for the ObjC, C#, and Java projects
        * About half use an IDE for the C/C++ projects (rest use vim)
        * Nobody uses an IDE for the Python projects (most use vim)

    What's interesting to me is that as far as I know everyone has /tried/ not using an IDE for Java/ObjC/C#, and everyone has tried using an IDE for Python, and there has never been any sort of mandate to go one way or another, and so the present situation is the result of everyone sort of landing where it feels most natural and where they are the most productive, and that we have the same results regardless of proficiency in a particular language (i.e. the C# experts and C# noobs end up with the same development environment, as do the Python experts and the Python noobs). The same also appears to be true regardless of language affinity - lovers and haters of Java use the same environment, lovers and haters of Python do as well, etc.

    I do wonder if there is some sort of correlation between environment and the language. I know this is pretty subjective, but for me languages like Python feel like they rarely get in your way, and so it's interesting that when people in our company use Python, they gravitate towards development environments that are similarly lightweight. And conversely, for me a language like Java tends to feel like it gets in the way a lot (as in, you have to do lots of things that are satisfying the demands of the language that aren't directly tied to the problem you're trying to solve), and an IDE is indispensable because the IDE helps shoulder some of that burden.

    1. Re:IDEs aren't pure benefit by phantomfive · · Score: 1

      I do wonder if there is some sort of correlation between environment and the language.

      Yes. For example, there isn't yet a way to make good auto-complete for dynamic languages (like Ruby), so IDEs don't help you too much. For ObjC, most people just use XCode because it's a pain to figure out how to compile stuff from the command line on OSX. For C/C++, it depends on how the project is set up, if you guys are using makefiles, then using vim is fine, but if you're using Visual Studio to manage your project, you might as well just use it to write code. You're going to need it open to change compile settings and such anyway.

      In other words, in my experience, it's several different factors, from language specific issues, to tool specific issues, to how the project is designed.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:IDEs aren't pure benefit by loneDreamer · · Score: 1

      I think your situation is easily explained. Strongly-typed languages provide a lot of insights to compilers and IDE about what you are trying to do, at the cost of having to write more explicit code. For both things, In this case, IDEs can shine and help you a lot with hints, error detection, automation and other tools.

      For scripting languages with no types, were everything works or fails in runtime, were you have really no idea what atributes or methods are even there in your objects (due to duck-typing), there is really not much that an IDE CAN do. In this case, you might as well use a text editor and not loose much. Maybe someday an IDE will come able to predict what such a program will be doing and help a little, but it's a much harder problem to solve.
      C/C++ is probably mixed because of historical reasons, but prefer to code in these with an IDE any day.

      You can of course you can always use a text editor for any language, but I can't thing of a single reason why you would want to do so. I mean, why do you want to refuse available help to make your life easier? It's writing a novel and refusing to run a spell-checker on it on the premise that errors will be found eventually.

    3. Re:IDEs aren't pure benefit by dbrueck · · Score: 1

      That makes a lot of sense, yes, although even with duck typing the autocomplete plugins for Python IDEs are really good. This conversation has reminded me that the one for vim is actually really good these days, and yet I still don't use it (and now I'm curious as to why that is).

      I think the thrust of my point was that using an IDE wasn't /all/ pluses, there are some drawbacks, so it comes down to whether or not the benefits outweigh the costs, i.e. it's not just a question of developing with, say, inline help vs developing without it.

      Now I don't think the costs are /that/ huge, most of them are in the realm of nits and minor annoyances, but they do add up to enough to make me shy away from it when it's not virtually required. Whether it's a feeling of having to shoehorn my project into whatever constraints are required by the IDE's project management features, or the littering of IDE support files, the more I'm aware of the presence of the IDE, the more annoying it is. Case in point: I checked out an Android app from one of our other developers and it took me quite some time to figure out how to load it into Eclipse. I figured it was just my lack of experience with Eclipse, except that Google showed lots of other people with the same confusion. In the end I caved and moved the files into the subdirectory where Eclipse wanted them just so I could get moving. I don't really care about that specific example, but that is the sort of thing I run into with IDEs.

      One of the things that I like about not using an IDE and just using vim is that my full development environment is immediately present on any machine I have to work on - just scp a tree with some useful plugins and config settings and troubleshooting a problem on a production box is hardly different than working on it locally. Anyway, it really does boil down to personal preference a lot, my point was just that an IDE is definitely not all plusses without any minuses.

    4. Re:IDEs aren't pure benefit by dbrueck · · Score: 1

      Yeah, good point - I didn't think much about the tool issues, but I think you're right. For us it's always 1:1 - if it's a language / platform that feels like you must have an IDE, then we use that IDE for writing code, project management, debugging, etc.

    5. Re:IDEs aren't pure benefit by Anonymous Coward · · Score: 0

      Until recently there were no good Python IDEs.

      Then PyCharm arrived.

      It's made significant in-roads at my work-place.

      What's more, I didn't even have to twist any arms :-)

  90. Not obvious at all it is problematic by SuperKendall · · Score: 2

    for (int j = 0; j < getCount(); j++) {

    And what if in the loop something had been altered to extend the results of getCount()? Bad coding I would say, but you are discounting that possibility with your fix...

    In reality though, a good compiler will optimize that away if it's really just generated an accessor method for that call. In reality there is no problem with coding against accessors for modern languages because the compiler will fix performance problems like that.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Not obvious at all it is problematic by bstamour · · Score: 1

      C++'s STL fixes this with for_each, transform, and accumulate. All three are looping constructs over a range, but each one has well-defined termination and meaning. For example if I want to visit each element once, I'd use

      for_each(begin(container), end(container), some_action);

      If I want to mutate it,

      transform(begin(container), end(container), begin(destination), some_transforming_action);

      and if I want to collapse it down into a scalar,

      some_type result = accumulate(begin(container), end(container), initial_value, some_operation);

      If you squint at it enough it almost looks like a declarative language, and the compiler is usually smart enough to inline those function calls!

  91. Article title is wrong by Anonymous Coward · · Score: 0

    It should say "IS the IDE a bad programming enabler?" so that we could give the standard answer of "No" and move on.

  92. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    Fully agree. The unhandled NullPointerException is nothing more than bad programming

  93. McCarthy by Anonymous Coward · · Score: 2, Informative

    That stern looking old fart is John McCarthy. He probably did more for computing that all of us put together.

    1. Re:McCarthy by betterunixthanunix · · Score: 1

      Ironically, though, the programming language he developed gets nothing but ridicule from the majority of programmers (what is even more ironic is that a large number of those programmers rely on language features that were first implement in Lisp).

      --
      Palm trees and 8
    2. Re:McCarthy by Anonymous Coward · · Score: 0

      http://www.globalnerdy.com/2007/10/11/programming-youre-doing-it-completely-wrong/
      http://www.catonmat.net/blog/wp-content/uploads/2008/12/john-mccarthy-programming-completely-wrong.jpg

  94. Re:Did he already heard about integrated debugger by Beezlebub33 · · Score: 1

    I do that all the time in Java using Eclipse. If I have a problem in a function, I have a breakpoint there. When it gets there, I can see what all the variables are set to, and what the code has done. I can change the code, save, and it restarts at the beginning of the function.

    --
    The more people I meet, the better I like my dog.
  95. Re:Did he already heard about integrated debugger by MadKeithV · · Score: 1

    In languages with side-effects exceptions force the caller to handle the error if they want to continue operation, instead of silently assuming that everything went right and inadvertently propagating a potential problem all the way up to the first place where the error condition actually matters. So in my opinion it's actually the exact opposite of what you state: if you would like someone to catch and recover the error rather than just bombing out late and at odd times due to bad programming, throw an exception. It'll bomb out early, and give the offending programmer a good kick in the shins about not checking for errors.
    That doesn't mean I think both of your examples are fine: the first case is just stupid - there IS no error if you're hiding a dialog that's already hidden. The second case should be local: you're opening a file, and if you then don't have a file descriptor you're going to have a more serious error REALLY quickly afterwards (unless you have terrible programming, but then you have terrible programming, and no amount of exceptions will help there!). In the file case it's actually even more different: there's usually no error code, you just have a valid file descriptor or you don't, and people learn quickly, so exceptions are not necessary.
    When it comes to error/success return codes.... I've seen a lot of code containing macros to check the return codes and then throw an exception on failure ;-).

  96. what the heck by ILongForDarkness · · Score: 1

    "development quickly turns into a game of code- and file-system navigation rather than programming and code editing"

    You would rather have to code everything from scratch than spend a bit of time (with IDE assistance) finding what module does what you want? Good luck with that.

    Is this guy calling for us to go back to the day when everything was dumped in the main function of a C program? Yes modularity is a pain but it is a bigger pain having to try to figure out how to do everything from scratch every time you start a new project. It is like an architect complaining about a house being made out of a whole lot of bricks rather than as a whole wall at a time. Sure you "could" do that but then you'd have the little problem of getting the wall to the job site and getting it vertical (similar to the size of the dll loaded in and difficulty of grasping in coding land).

  97. Vrapper by jcfandino · · Score: 1

    Have you tried Vrapper?.
    It integrates very well with Eclipse as it's implemented as a filter that runs over any text editor, so it does not interfere with any eclipse functionality. Not all vim functionality is implemented yet but the most common stuff is there.

    1. Re:Vrapper by dotancohen · · Score: 1

      Thanks, I did try Vrapper and I think that I may have even filed a bug or two before giving up on it. I should have better documented my findings and disappointments with each "solution".

      --
      It is dangerous to be right when the government is wrong.
  98. Levels of abstraction... by Half-pint+HAL · · Score: 1

    Well, there's multiple levels of abstraction in any applied science, and you've chosen your preferred "base" level. But remember that people like the guys behind from NAND to Tetris don't feel that your level of abstraction is the correct base either. But they've chosen a base level of their own that they define as "computer science" beyond which there is only "physics".

    Lower levels of abstraction are good for building up background knowledge, but how deep you go really should depend on what your audience is expected to produce.

    Although I would guess from your description that these aren't potential devs, just people "toying" with code, so they shouldn't be dealing in anything big enough to require an IDE anyway...

    --
    Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
  99. Why take a step back by Ravaldy · · Score: 1

    I use VS 2010 and have been using the VS series since 2003. I find it to be a great step forward. Add source control and you have a real production environment. Coding without and IDE would be like using a hand drill instead of a power drill, it just doesn't make sense.

    1. Re:Why take a step back by dbrueck · · Score: 1

      As noted early, it's not really that cut and dry - I find developing in an IDE to often be pretty cumbersome - just get out of my way and let me tackle the problem I'm trying to solve. I don't do much Windows dev anymore, but I do think the VS IDEs were some of the best (VS 6.0 or whatever it was back in the day is still IMO the best ever), while Xcode and Eclipse are often maddening.

      But it does seem to have a lot to do with the particular language and its libraries or frameworks. I've tried the IDE-less approach with Java/C#/ObjC and my productivity felt like it was a tiny fraction of what it was with an IDE. Conversely, over the years I've tried just about every major Python IDE and felt like there was very minimal benefit. That minimal benefit coupled with the annoyances of an IDE have always led me back to being most productive in emacs or vim.

  100. Re:Did he already heard about integrated debugger by H0p313ss · · Score: 3, Informative

    In most languages you don't need a debugger for stuff like null pointers; perfectly fine exceptions are thrown and reported telling you exactly what you did wrong. When is the last time you ever used a debugger to track down such a bug? You use debuggers to analyse why some algorithm isn't worked as it's supposed to; for finding flaws in human thinking.

    I'm thinking you've never worked on a multi-threaded application with millions of lines of code. With a debugger, set an exception breakpoint and you can usually see exactly why something bad happened with almost no time wasted on "analysis". If I can reproduce a problem in a debugger I can usually fic it about 10x faster and more reliably than if all I have is a stack trace.

    --
    XML is a known as a key material required to create SMD: Software of Mass Destruction
  101. I completely agree by gweihir · · Score: 1

    Another effect of the bloated syntax of Java is that it is unsuitable for teaching or learning programming, as learners will struggle with the language most of the time instead of learning what counts.

    --
    Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    1. Re:I completely agree by VortexCortex · · Score: 1

      On the contrary, Java's syntax is no more verbose than C++'s. It's the rich API of which you speak. Ask a C or C++ coder to draw a triangle on the screen. Ooo! I guess that's not what counts. What about a button? Get a single button displayed with OK on it... Hrm. Not so easy using only C or C++, especially considering they have absolutely no graphics API at all included with the language. Hell, I could do this in assembly 20 years ago. Set video mode with int 10, and write data to B800h and beyond. Ah, but direct BIOS interface is gone unless you're making your own OS. Oh, sure, that crap isn't what counts, I AGREE! So what is important? Datastructures, Classes? C and Java aren't much different. Hell, you have to make two files in C++ (header and implementation). What else matters? Elementary math and complexity? That's the same in C and Java.

      What you're saying that a student will struggle with is the API, not the language. I put it to you that a student will struggle just as much using the C/C++ standard libs, and even more when trying to do anything that's not included in C or C++, in comparison to Java. In C or C++ you go and select and fiddle with a myriad of APIs for each specific platform, or even peruse amongst all the various different cross platform libraries there are. In Java there's a few well documented ways to do file & network IO (multiple on Win / Lin / Mac) -- List files in a Directory in C or C++, I dare you, There's heavy and Lightweight Graphics APIs in Java (they're well documented and cross platform, unlike Win / Mac / Lin)...

      I'm primarily a C and ASM coder by trade, but I know many other languages. I put it to you that anyone who's learned how to use the Java API docs will fit right in on any enterprise coding team with a large existing API.

      C++ has a much more bloated syntax than Java -- It's just that you've confused syntax and API.

  102. It is true by Anonymous Coward · · Score: 0

    People get really dogmatic about the right and wrong ways of doing software development. Not just old people...nearly all programmers do this.

    Such people are not necessarily so dogmatic about everything, however.

  103. Re:Did he already heard about integrated debugger by jcfandino · · Score: 1

    I agree on that an IDE debugger is one of it strongest advantages, and it's not fault of the language the need for it.
    Nevertheless I don't think debug mode is a good strategy for developing, I think it's better to use TDD, even to resolve bugs, create a test trying to reproduce the error and see the assert failure message or exception message to delimit where the problem is.
    Most of the time, in my experience, the problem seems evident looking at the code, if not, I use the debugger while running my test.
    Once it's fixed I already have a test case to ensure the bug never happens again.

  104. Summary by Anonymous Coward · · Score: 0

    Butthurt blogger posts something to attract attention to himself. Slashdot obliges.

  105. Re:Did he already heard about integrated debugger by jeremyp · · Score: 1

    In my first professional programming job, the chief debugging tool was a stack dump. The run time would literally print the whole of the process stack onto the line printer, using, on average a third of a box of paper. Since this was Burroughs B5000 architecture, that was the whole program state. Of course you'd have to wait an hour for the print to finish and if you ran out of paper or had a jam that was it.

    I'll take the debugger every day over exceptions with more information.

    --
    All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
  106. Re:Did he already heard about integrated debugger by TemporalBeing · · Score: 1

    Exceptions are intended to be used when a program hits unexpected or fatal issues which cannot be handled locally, and often the low-level library code isn't in a position to be able to judge whether something qualifies as worthy of an exception or whether it's an expected part of the processing cycle and can be safely be ignored.

    Exceptions are very much overused and very well misunderstood. They are one form of returning errors with additional information.

    Essentially you have several choices on how to return errors:

    1. Return and do nothing about it - no information, etc.
    2. Return an error code that needs to be looked up for a user-readable string to log and/or display.
    3. Generate an exception - which contains an exception type and a user-readable string.

    Now #1 is absolutely the worst thing to do as nothing will know about the error. This is kind of what Compaq did with their floppy controllers back in the 1990's - and they ended up in a big lawsuit (and lost) over it. So while it's an option, its not a viable option.

    #2 is what the standard C library does. Many OO programmers don't like it because you have to query for the strings, and its more Functional programming in form.

    #3 tends to be favored by OO programmers as things are encapulated into objects/structures when the error returns.

    But, #3 is also the most abused as programmers tend to handle a few cases, but then just let most of the exceptions fall thru to the caller. Except, typically the caller won't be able to do much about the exception at all because the farther up the stack the exception has to go to get handled, the less ability that the "caller" will have to do anything about it - so #3 tends to become what you describe since the error ends up so far removed from what generated it that nothing can be done even when something could have actually been done in the first frame or two around the actual error. This issue is due to (i) the laziness of the programmers at each frame level, and (ii) the indefiniteness of how to actually handle exceptions.

    That is, to handle an exception properly you have to capture every kind of possible exception that could be thrown by the code you are wrapping the in the try block. However, programmers are lazy so they only handle the ones they want to or know about, thus others fall through to next frame up the stack, making the next level that much harder to capture the exceptions on. But this is also the nature of exceptions as each different kind of error can have a different kind of exception - there's an exception for memory errors, for file i/o errors, for general i/o errors, for object recognition errors, and so forth. So once you start using exceptions you start building up tens of different exceptions you have to watch out for.

    At least #2 was consistently designed even if not consistently handled - that is, the return code was always the return code and you might have had to check errno as well, but that was about it. Programmers might have not checked the return codes and just directly checked errno, or they might not have done that at all; but it was generally a lot simpler to track down and how hard it was was dependent on how lazy you were when you wrote the code.

    Take for example asking to open a file for reading and the file not being available for some reason. If I'm just copying a large directory structure then I can reasonably expect to not be able to open a few files due to permissions and, while I'll likely want to log these and display them, treating it as an exception wouldn't be suitable. If my code is part of an online application and it was failing to open a configuration file which it needed to connect to the database then the error would be worthy of promoting to an exception if it could not rectified in the code which detected it. Ultimately though for this type of 'It could be serious, it could be nothing' then the decision should be lef

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  107. I am not alone! by Un+pobre+guey · · Score: 1

    'we end up with lots and lots of small files for every interface and class in our system. On any less than trivial Java system, development quickly turns into a game of code- and file-system navigation rather than programming and code editing. This nature of Java development requires IDEs to become navigation tools above all.

    Hallelujah!
    Let freedom ring from MS Windows' all versions.
    Let freedom ring from OS X.
    Let freedom ring from every cell phone and mobile device.
    From every unix and linux variant, let freedom ring.
    And when this happens, when we allow freedom ring, when we let it ring from every cubicle and every laptop, from every text editor and every console, we will be able to speed up that day when all of God's children, scripting men and compiled code men, coders and computer scientists, professionals and students, will be able to join hands and sing in the words of the old Negro spiritual:
    Free at last! Free at last!
    Thank God Almighty, we are free at last!

  108. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    the standard library has a tendency to return null when something goes wrong rather than throw an exception

    This is because they were trying to get rid of the code smell of there being too many throws on one method.

  109. Re:Did he already heard about integrated debugger by TemporalBeing · · Score: 1

    Languages like C and C++ will never go the way of the Dodo as they fill an area of computing that no other language has been capable of achieving nearly as well. They will oscillate in how much they get used in other areas - and in full application development - as people try other things (e.g. D, Java, C#); but will never actually go away.

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  110. IDE v. Smaller Tools by Bob9113 · · Score: 1

    I have used IDEs (IDEA, Eclipse, and Xcode) and text editors (Vi and Emacs) on large scale projects with teams both elite and ordinary. I have been productive with them all, and have found each approach to have its own benefits. A lot of modern programmers have not walked a mile in non-IDE land, and have turned the advantages of IDEs into compulsory requirements with which to judge the manual/small tools aproach an automatic failure. They can be broadly categorized as integrated tools, code generation, and autocomplete. Each is a good thing, but is not always the One True Answer.

    1. IDEs have integrated build/debug/test/etc.

    Staying in the IDE to perform those functions is nice, though switching to another tool in another window is also fine. Having it in the same UI means you don't have to switch mental context to a different UI style, but having smaller, purpose-built tools for specialized tasks also has advantages.

    2. IDEs have code generation and refactoring built in.

    This is a good feature for getting today's code out quickly, but manual approaches can aid long-term system improvement. Using a boilerplate solution foregoes an opportunity to consider subtly different approaches and may lead to "every problem looks like a nail." Automated refactoring means you are not looking at the callers to understand their intent. These things work well most of the time and get code in front of the customer without wasting time on typo management or gold plating, but spending more time considering new and existing code can lead to a more robust system.

    3. IDEs have autocomplete.

    Similar to item 2, this saves wasted time looking through source code or documentation, but may cost opportunities for debugging or improvement. For calls to internal code, not having autocomplete essentially inlines code review, and automatically focuses the most review on the most heavily used methods. Whether calling an external library or internal code, manual lookup gives the opportunity to see what else is available in a library or class. As with code generation, autocomplete saves time at the expense of opportunities for discovery.

    IDEs are excellent tools, and IDE-oriented programming is very effective. More manual programming and using smaller tools also has advantages. To suggest that either method -- like any one language -- is the One True Way to program proves little more than one's lack of imagination.

  111. Java almost requires an IDE by Anonymous Coward · · Score: 0

    I've done programming both with and without IDEs (starting with BASIC on ye olde Apple ][). One of my previous jobs involved a huge, antiquated software system written in Ada and running on Solaris 8. The IDE we were provided, Rational APEX, was so horrid that I just stuck to vi (no, they would not let us install vim), gnat, and gdb. It was totally fine. Ada has its quirks, but it is actually a well designed language.

    My current job, my first job using Java, has me using Java, spring, hibernate, et al., on Windows with Eclipse and I wouldn't want to work without the IDE. The language and frameworks practically require it. Even though Eclipse is infuriating....

  112. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    Oh fuck, edlin...
    You are giving your age away if you even know what edlin is - worse if you actually used the bloody thing.

  113. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    Languages like C and C++ will never go the way of the Dodo as they fill an area of computing that no other language has been capable of achieving nearly as well

    What would that niche be, exactly? Time and time again I hear people say that C or C++ is the best language for some situation, but I am not really sure what that situation is. There are low-level languages that do not have so many kinds of undefined behavior and which are easier to formally analyze. There are certainly high-level languages that beat C and C++. CL-PPCRE is twice as fast as libpcre, and high level languages are being used in demanding environments where speed, reliability, and optimal solutions are required (Orbitz, Galois inc., various banking and investment companies' analysis tools, DART, etc.).

    So what is that compelling reason to keep writing C and C++ code? Legacy code is all that comes to mind, and all it will take is a major shift in how computers are used to wipe away most of that legacy code. There is a reason that most software is not written in assembly language (and outside of a few very specific cases, hand-rolled assembly tends to be slower than what a compiler produces). That is the same reason that C and C++ will be in the same bucket as COBOL in the future. It is going to be far too difficult to use C, C++, Java, etc. express solutions to the big software problems we'll be solving over the next decade, and it is going to be even harder to express efficient solutions to those problems (in both the running time and optimal solution sense).

    --
    Palm trees and 8
  114. Bad programmers would be bad programmers by Anonymous Coward · · Score: 0

    Eclipse is a tool, just learn to customize it so it works the way it should. Don't blame Eclipse because there are lousy programmers or because you dont know how to manage the preferences.

  115. Not so fast. by Anonymous Coward · · Score: 0

    > if you've used VS - there's no reason to use anything else.

    Yes there is. IntelliJ IDEA is amazing. (Also, getting better: Preview "Kotlin" for instance.)

  116. Try IntelliJ IDEA by Anonymous Coward · · Score: 0

    The belief that "the only real IDE is Eclipse" is just plain false. There are a number of fairly good IDEs for Java. (NetBeans, etc.) If you haven't actually tried them for a while, you don't know what you're missing.

    For instance, if you think Eclipse sucks, try IntelliJ IDEA. Eclipse copied a lot of its most popular features from IDEA, frequently fairly badly and years after the fact. There is a freeware version available.

    I use both (Eclipse at work, IDEA at home) and I much prefer IDEA.

    1. Re:Try IntelliJ IDEA by neminem · · Score: 1

      Neat. I will definitely look into that - I don't do much coding in Java, for which I am extremely grateful, but I use one open source tool for personal use that's written in Java and occasionally I have need to poke at it, and every time, having to debug in Eclipse makes me sad.

  117. Meh by Anonymous Coward · · Score: 0

    Typical comment of someone that never used Visual Studio. You don't know an IDE if you have not tried VS

  118. Unix is my IDE by Anonymous Coward · · Score: 0

    The subject says it all.

  119. TFA is nonsense. by Max+Threshold · · Score: 1

    My productivity increased dramatically when I started using Eclipse instead of jEdit, and I don't even use most of Eclipse's features. Code completion alone saves a huge amount of time that would otherwise be spent typing long identifiers or looking up identifiers I can't quite remember. And yes, a large part of Java development is navigating around a project. For that, Eclipse's package explorer and outline view are a vast improvement on a general-purpose file manager and text editor.

  120. Programming in the Large/Small by dokebi · · Score: 1

    Most of programming debate that circle around IDE/Static Types seems to have one common cause: The scale of the programming in question.

    Projects that needs in order of 10K lines of code really benefit from simple tools. The code size is small enough that you can manage it without using any tools at all. No type checking, no IDE, little documentation.

    Projects that need in order of 100K lines of code or more really benefit from complex tools--better refactoring (not just variable renaming, but things like deriving interfaces and abstract classes), instant type checking, discipline in consistency, etc.

    It's the difference between building a house vs building a 10 story building. This article is like someone who's only built houses wonders why a 20 story buildng need a team of inspection engineers with CAD printouts.

    --
    In Soviet Russia, articles before post read *you*!
  121. I don't code in C#, by lwriemen · · Score: 1

    I found Visual Studio to be lacking compared to Eclipse. When you factor in the cost and portability concerns, I don't know why anyone (except maybe a Windows-only programmer) would choose Visual Studio.

  122. Re:Did he already heard about integrated debugger by Darinbob · · Score: 1

    We're not? I still debug core dumps and use gdb and sometimes vi.

  123. Re:Did he already heard about integrated debugger by Darinbob · · Score: 1

    However, once you've gotten rid of all your null objects you will suddenly discover that there's a new most common bug. Get rid of that one and there's another, etc. Pretty soon you end up realizing that you still need a debugger because sometimes the code does not work they way you expected and it fails to work in ways that the compiler can not automatically figure out for you. Guess what, the hardware registers are at the wrong address, the packet was sent in the wrong endian format, the algorithm just doesn't do the right thing mathematically, etc.

  124. Re:Did he already heard about integrated debugger by Alkonaut · · Score: 1

    Let's just say that however flawless the language, you will still make countless simple mistakes in *logic* that will be an order of magnitude quicker to diagnose and fix with an integrated debugger than with any non interactive means (logging, exception stack traces, command line debuggers).

  125. wha? by Anonymous Coward · · Score: 0

    I remember when /. article titles were not intentionally misleading. I miss those days.
    If what you really mean is that everybody should use lisp-like languages then just say so.

  126. Re:Did he already heard about integrated debugger by TemporalBeing · · Score: 1

    Languages like C and C++ will never go the way of the Dodo as they fill an area of computing that no other language has been capable of achieving nearly as well

    What would that niche be, exactly? Time and time again I hear people say that C or C++ is the best language for some situation, but I am not really sure what that situation is. There are low-level languages that do not have so many kinds of undefined behavior and which are easier to formally analyze. There are certainly high-level languages that beat C and C++. CL-PPCRE is twice as fast as libpcre, and high level languages are being used in demanding environments where speed, reliability, and optimal solutions are required (Orbitz, Galois inc., various banking and investment companies' analysis tools, DART, etc.).
    So what is that compelling reason to keep writing C and C++ code? Legacy code is all that comes to mind, and all it will take is a major shift in how computers are used to wipe away most of that legacy code. There is a reason that most software is not written in assembly language (and outside of a few very specific cases, hand-rolled assembly tends to be slower than what a compiler produces).

    Embedded environments, systems development, OS development, to name just a few.

    Most High Level Languages don't like it when a pointer is set to ZERO (aka NULL), yet there are some situations where that is a valid pointer, typically in the kernel. For example, the Interrupt Table on all modes of the x86 processor family (e.g. 8-bit, 16-bit, 32-bit, 64-bit) is stored at address 0x0; if you need to reference the interrupt table then you need to use a pointer that validly points to that address. If you cannot reference such a pointer then the language is useless for that kind of development - e.g. OS Kernel Development, Device Driver Development, etc.

    Yes, one could write assembly to manage those gaps, but why when there is no need to? (Yes, the Linux Kernel uses C code for those things IIRC.)

    That is the same reason that C and C++ will be in the same bucket as COBOL in the future. It is going to be far too difficult to use C, C++, Java, etc. express solutions to the big software problems we'll be solving over the next decade, and it is going to be even harder to express efficient solutions to those problems (in both the running time and optimal solution sense).

    People have been saying that for a long time and it simply hasn't come to fruition; yet it is the ambiguities within C/C++ that allows it to continue to meet the needs.

    Language developers have tried to lock down languages, eliminating ambiguities only to have those language relegated to small niches in the market since they are not flexible enough for most application development. Comparatively C/C++ have continued to been used for a majority of application development precisely because you can utilize the ambiguities in the languages to achieve some remarkable things that the language developers couldn't have thought of at the time.

    It's kind of like War. You maintain a strong centralized command, and no one under you knows what to do when their superior officer is taken out by the enemy; or you play like the European contingents did in the 1700's and 1800's and do line formations where you just shoot at each other until one side doesn't have enough people and then you charge them, following the rules of War without any thought to what you're doing - and not even trying to protect yourself against the enemy. Or you utilize a highly decentralized command where each unit knows its goals, and the general big picture; and is fully charged with them and given the power to do what they want to achieve it - the officer is taken out and someone else steps up to take charge.

    All the languages that try to lock down how things are done are like the highly centralized military armies following the first two examples. They'll do well as long

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  127. Re:Did he already heard about integrated debugger by bored · · Score: 1

    C++, Java, etc. express solutions to the big software problems we'll be solving over the next decade, and it is going to be even harder to express efficient solutions to those problems

    I think you fail to understand how adaptable C and C++ is (not java). The strong point isn't how great it is at any given benchmark, but rather how good it is for solving a whole range of different problems. From low level bit banging, to heavy parallel transaction management (how many databases are written in C). Many of the C/C++ "problems" are really more reflections on the lack of standardized libraries for doing things. There are C/C++ libraries for doing everything you can imagine, but you don't have to use them. If your OS provides mmap and its 10x faster than doing read/write style ops then you have that choice. If you want to interface to lua, opencl, or even inline assembly, then you can do it with ease. Just try doing GPGPU programming in a those languages you list. If speed is an issue your application is going to fail, when your competitor figures out how to use a GPU to solve a problem at 10x the rate of a CPU, and your stuck two layers away from the hardware because its more convenient to do regex processing there than picking a high performance one (http://code.google.com/p/re2/) for C++.

    The bottom line is that its rare to find a 100% C or C++ project these days. No one writes whole web apps with C++ CGI/bin files, rather using php/ruby/etc. But when you need to operate on a 100GB sparse matrix, you drop to something that can control the access patterns or utilize some hardware specific feature that gives a big performance boost. This is the problem I see with java programmers all the time, a lot of high performance computing is actually "just an exercise in caching", and when you can't control low level details like memory placement a lot of performance tends to evaporate. Even at the big web companies its not unusual to find C++ running some portion of the system where the language du jour failed.

    BTW: Even Yahoo replaced their lisp

  128. problems come from file system use, not the IDE by PJ6 · · Score: 1

    The OP actually glanced off what I consider a big issue with modern IDEs. Especially for over-engineered projects, there is a clear need to be able to view files that change together, grouped together, regardless of how the Separation of Concerns has been implemented. The idea of using the file system as organizer needs to die. Code is data and should get the support a real database makes possible.

  129. Smalltalk FTW by rbenech · · Score: 1

    Smalltalk has a built in IDE. Check out http://www.pharo-project.org/home

    --
    Perspective is to Science what Interpretation is to Religion. Obama + Paul FTW
  130. Missing the point of TFA by Anonymous Coward · · Score: 0

    People are totally missing the point of TFA.

    It's really pathetic to see all these clueless Eclipse / IntelliJ / NetBeans / Visual Studio devs with mod points relentlessly modding up every single pointless comment here that did entirely miss TFA.

    If IDEs are so great, why did Linus write Linux using picoEmacs? Why did Rich Hickey create Clojure using Emacs? Why did Rich Hickey create, in a heartbeat, the amazing DB that Datomic is using Emacs? There are countless examples of amazing programmers who created great things using Emacs / vim / Sublime (apparently particularly well-loved amongst the startup crowd), or much more obscure editors (like weird expensive Lisp editors).

    The point of TFA is that if you *need* an IDE it means that your language may very well smell. I realize most of you are stuck in C#/Java + Hibernate/NHibernate + XML + Spring hell. And, indeed, when you're stuck on such a pointless career path, you may as well use an IDE to be "productive".

    That's precisely the point of TFA: your language may very well be sucking big times if you really need an IDE to be "productive".

    As Rich Hickey said: "Patterns means 'I've run out of language".

    One of the main point of IDEs is to be able to automate pattern-related tasks ("Refactor : replace inheritance with composition" and whatnots) and it's not that the IDE is bad at this: the point of TFA is that there may be languages out there where these "design patterns" have no meaning and where, hence, these IDEs doesn't make much sense.

    At least that's how I get TFA.

    As a last point it's really totally really ridiculous to think that Emacs / vim cannot do code navigation for verbose language like C# / Java: not only they can, but they can also connect to Eclipse running in server-mode (using 'eclim') and use the very exact same code navigation features that Eclipse offer (because they're, well, precisely done by Eclipse when you're using eclim).

    If you still *think* you're being productive in your Java + Spring + XML + Hibernate hell using IntelliJ (or Eclipse), I'd really suggest watching a few of Rich Hickey's videos. During the years you've been working on one or two enterprisey apps doing really not much (really, been there done that), the guy created a freacking language and then went on to use that language to create an amazing DB. This should give you some food for thoughts.

    1. Re:Missing the point of TFA by Anonymous Coward · · Score: 0

      IDEs give me documentation popups, class hierarchies, completion, automatic reformatting when I pull a repository that was edited by a moron, etc. I love vim, but until somebody sticks a full-fledged vim into IntelliJ IDEA, I won't be using it for any but the smallest of projects.

  131. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    Most High Level Languages don't like it when a pointer is set to ZERO (aka NULL), yet there are some situations where that is a valid pointer, typically in the kernel

    Like I said, there are better low-level languages than C, but that aside, where did you get the idea that there is no way to deal with such a thing in a high-level language? There have been kernels written in Ada and Lisp. The only difference is that in a high-level language, you need to be very explicit about the fact that you want to use a numeric value as a pointer to be dereferenced. The Lisp compiler I use, for example, would allow an address "0" to be specified like this:

    (sb-sys:int-sap 0) ; Specifies address 0

    ; Here, we copy the value of the variable "interrupt-assignment" to address 0
    (setf (sb-sys:sap-ref-32 (sb-sys:int-sap 0) 0) interrupt-assignment)

    ...and there is no reason why a similar facility could not be added to any other high-level language. It looks ugly, but that is OK -- Lisp lets you write macros to change the syntax of the language, so in theory, a set of macros for dealing with low-level pointers could be created. There is no reason that such a facility could not be created in any other language that lacks pointers.

    This is not to say that you are going to start writing Linux kernel modules in Lisp. I doubt that you'll see many Lisp OSes going forward, but the facility mentioned above is not very hard to write for a high-level language. The advantage is in dependability -- there are fewer ways for this code to do something unexpected than there are in C, especially as the size of the codebase increases (since you would not be using such low level pointers everywhere, there would be fewer ways for a bug to corrupt things). As for speed, here is how SBCL compiles a function that uses this facility (with type hinting):

    (defun sap-test (n) (declare (fixnum n)) (the fixnum (sb-sys:sap-ref-32 (sb-sys:int-sap n) 0)))

    ; disassembly for SAP-TEST
    ; 0ABECB9A: C1FA02 SAR EDX, 2 ; no-arg-parsing entry point
    ; 9D: 8B12 MOV EDX, [EDX]
    ; 9F: C1E202 SHL EDX, 2
    ; A2: 8BE5 MOV ESP, EBP
    ; A4: F8 CLC
    ; A5: 5D POP EBP
    ; A6: C3 RET

    Not so slow. In fact, most of what that disassembly is doing is converting from/to "fixnum" types (which use low-order bits as flags); this could be further improved by using the facility exclusively, rather than using fixnum types, and thus avoiding the conversions entirely.

    Language developers have tried to lock down languages, eliminating ambiguities only to have those language relegated to small niches in the market since they are not flexible enough for most application development

    What are you talking about? Do you think SPARK, the well-defined subset of Ada developed by Praxis HIS, is limited to any particular market? Do you think Lisp is? Haskell? ML?

    Yes, there are high-level languages that are limited in scope. Prolog, for example, is limited to a particular subset of problems. Yet for the most part, high level languages can either do everything C/C++ can do, or else can do everything C/C++ can do if there is some small extension similar to the one I mentioned above (and really, that extension involves three special forms: one to create a pointer, one to dereference a pointer, and one to compare pointers for equality).

    On the other hand, C and C++ are limited by their own inflexibility and lack of high-level features. Try writing a REPL for C++, and see how well that works for you. Try writing something like CL-PPCRE -- a library which reads a regular expression, then compiles a function that matches that expression without having to traverse an expensive pointer structure (the way the C implementation

    --
    Palm trees and 8
  132. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    I think you fail to understand how adaptable C and C++ is

    I don't. My first programming language was C++, and I programmed in C++ professionally. C++ is severely lacking in expressiveness, and there is an abundance of undefined behavior in C++. Debugging a C++ program is as much about low-level program mechanics as it is about high-level logic (even when you are writing a high level application). Dealing with errors in C++ is a giant ball of confusion -- there isn't even a good way to deal with errors that occur in constructors or destructors.

    C++ is surviving because of its history -- a lot of C++ code was written in the 90s, and nobody has the time to rewrite any of it (not even to get it up to date with modern C++ standards -- I was once on a project that had to use a subset of C++ in order to maintain compatibility with old compilers from the early 90s). Schools keep teaching C++ because they believe their job is to prepare students for jobs in industry where they will be writing C++ code, which helps to keep C++ afloat by training programmers to think in C++. There is no real technical advantage that C++ has -- none of its features are unique, nor is the combination of its features -- and it carries plenty of technical disadvantages compared to other languages.

    The strong point isn't how great it is at any given benchmark, but rather how good it is for solving a whole range of different problems

    There are other languages that are good at solving problems in that range, which do not have C++'s deficiencies. If you are writing low-level code, do you really want to be dealing with implicit function calls? If you are writing high-level code, do you really want to spend your time deciding between shared_ptr and weak_ptr? If lives depend on your code, do you really want to have no idea about the order in which functions will be called?

    If your OS provides mmap and its 10x faster than doing read/write style ops then you have that choice

    What makes C/C++ special here? A typical FFI in a high level language let's you call functions in shared libraries (and by extension, functions that your OS provides), and many implementations of high-level languages have (non-portable) extensions for a particular target OS.

    If you want to interface to lua, opencl, or even inline assembly, then you can do it with ease

    OK, but what if I want to embed Lua in my C++ program, so that I can provide my users with an extension language? What if I want to write Lua code, have it translated to C++ and then compiled by my C++ compiler?

    For what it's worth, it is possible to write inline assembly using non-standard extensions in some high-level languages. As for opencl, note that parallel computing in high level languages is not exactly novel -- side-effect free programs have a long history of automatic parallelization.

    Just try doing GPGPU programming in a those languages you list

    Sure:

    http://www.cliki.net/cl-gpu

    Really, there is nothing special about C or C++ that makes it better suited for parallel programming than any other general-purpose language. CUDA being written in C++ has nothing to do with any sort of technical advantage C++ has; C++ is well known among Nvidia's target market and the OSes that Nvidia targeted have C or C++ APIs. If we still had Lisp machines and Nvidia was targeting those, Cuda would have been written in Lisp. If the API for Linux were in ocaml, Cuda would have been written in ocaml.

    If speed is an issue your application is going to fail, when your competitor figures out how to use a GPU to solve a problem at 10x the rate of a CPU

    Well, we've seen that situation before. Orbitz was competing against hand-optimized and tuned code running on mainframes, which have lots

    --
    Palm trees and 8
  133. Re:Did he already heard about integrated debugger by mvdwege · · Score: 1

    And this is why I hate Java programmers: the idea that puking a stack trace into the logs is perfectly fine diagnostics.

    As someone who has to admin large java-based systems, I have one thing to say to that: Go die in a fire.

    Mart

    --
    "I know I will be modded down for this": where's the option '-1, Asking for it'?
  134. Lisp pioneered early IDE's by EricRaymond · · Score: 1

    It is ironic to reference a dialect of Lisp, Clojure, in an argument against development environments.

    Many Lisp's tightly integrated and pioneered the precursors to modern IDE's. Lisps developed by MIT camp (CADR, LMI, Symbolics and Xerox (D-machines) were deeply intertwined with the pre-cursors to modern IDE's. This was followed by Lucid, Franz, Allegro, and others. The functionality of these systems were ahead of their time and had jaw dropping functionality just as bitmap displays were coming into viability.

    Simple syntax or not, good development tools amplify a good developer. Opinionated developers debate tools, emacs versus vi, and spaces versus tabs. Bad tools and bad developers....

  135. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    Im a gdb, coredump and vi guy.

    When I ran into the need for dynamic programming (REPL), I integrated a compiler into the C product that noticed when I saved source code file, compiled it and replaced the function within my real C program. When I'm finnished with that module, I remove it from the list of hot compile entries and let it get compiled and optimiezed by the offline compiler.

    Who sais you cant do "advanced-stuff" with "old languages", using IDE and JRebel is in a way a statement of "I dont want to learn how it works, I just want it to work". Nothing wrong with that, until it doesnt work. I'm sure I would be much better of finding the bugs when that happens.

  136. Re:Did he already heard about integrated debugger by sproketboy · · Score: 1

    That's why I hate retarded douche-bags who can't be bothered to read the context. The parent was talking about finding root causes of null pointers. I pointed out that if errors are properly logged the stack trace would include the "caused by". So why don't you do the world a favor and eat shit and die.

  137. Scite rocks by Anonymous Coward · · Score: 0

    I've always liked Scite http://www.scintilla.org/SciTE.html since I first started scripting and coding. Very very light and fast, has syntax highlighting for most languages, multiple tabs, search and replace, and can compile though I always do that from the command line. Not that anyone cares, just felt like saying so.

  138. Re:Did he already heard about integrated debugger by TemporalBeing · · Score: 1

    Try writing a REPL for C++, and see how well that works for you.

    I've done that quite a bit in both C and C++ without issues - and I'm not talking about doing things using toolkits such as Gtk, Qt, MFC, etc. Then again, I'm more a fan of Defensive Programming and Secure Programming...

    The difference is that the solutions written in high-level languages are fast, closer to optimal (or actually optimal), and will not bog programmers down with debugging low-level pointer mechanics.

    Any time I hear this argument, I know the writer/commentator is usually full of it. Namely because no matter what language you use, you'll end up with those kinds of issues in some form. It's just a matter of how easy it is to actually do something about it or even diagnose that that is the issue.

    Comparatively C/C++ have continued to been used for a majority of application development

    Which has more to do with the fact that most popular OSes are written in C or C++, and have APIs and documentation written for those languages.

    It has nothing to do with that. You can interface any language to any OS regardless of the API and documentation. It's done by defining to the language the interface in a way that both understand and agree on - sometimes requiring intermediate steps to make the switch. But it is not impossible. The Windows API actually has numerous calls that use the PASCAL calling convention as opposed to the C Calling convention; yet that does not prevent people from using those APIs in C, C++, C#, Visual Basic, or number of other languages.

    The reason that C and C++ continue to be popular - even in the face of C# and Java - is that they enable the programmer to actually get their tasks done because of how flexible the language is. What language fix-its call ambiguities are actually strengths for C and C++.

    Were it not for these historical realities, C and C++ would already be an obscure, legacy languages like COBOL, comfortably placed at the tail end of jokes told on sites like Slashdot. C and C++ are "good enough" languages -- just good enough to accomplish what their creators and users are trying to do, but still inferior as languages.

    C, and its extentions C++ and object-C, have withstood history because they have met and exceeded their target goals. They were designed as systems languages - designed for doing operating systems and systems applications, and that design continues to match the needs of that field. Their design also enables them to exceed being simply relegated to systems and build the rest of the user experience as well. It's little wonder that they are there and are still around. It only amazes the people who don't have much clue about systems programming.

    I am Lisp programmer

    That explains a lot. Lisp is like writing for the Obfuscated C contest in everything you do. It serves little to no purpose in real world computing, code maintainance, etc. Yes, it serves a purpose for some fields and does that well, but that's it.

    So what is C++ doing that is so special? What are you doing with templates that even compares to Lisp metaprogramming? Where are the programming languages being embedded in C++? It takes a new C++ compiler to get a simple feature like lexical closures in C++; yet it is possible to implement a completely new Lisp dialect using only macros in an existing Lisp, without requiring a new Lisp compiler (e.g. Qi).

    Lisp, as you note, is a meta programmer - more akin to Java and Smalltalk in that it runs in a virtual machine. Like SmallTalk the language itself defines the virtual machine so writing a new function extends the functionality of the VM and thereby the language. The nature of the virtual machine itself is a simple interpreter - like running JavaScript in a web browser with the V8 engine. However, these very features - the v

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  139. Re:Did he already heard about integrated debugger by hackula · · Score: 1

    This is completely wrong. I happen to use a vim setup without any heavy duty IDE, but there are definitely valid use cases for a good debugger. The best example is diving into an unfamiliar code base. Sure, if you wrote the code, you should rarely need a debugger, but when the guy who got fired down the hall dumps all of his crap code on you when he leaves, a debugger can be a real lifesaver.

  140. And the article is incredibly wrong by t1oracle · · Score: 1

    Separating objects into classes and interfaces and forcing each into it's own file helps in the organization of the code. IDE's make that implementation practical. Programmers who don't like that shouldn't use Java, but to cite that as one of Java's flaws is ridiculous. Java has no shortage of flaws, but that is most certainly not one of them.

    IDE's enable a lot of nice things, auto-complete that makes like long descriptive variable/class names a breeze to use. Descriptive variable/class names enhance the readability of code. One thing programmers often forget is that programming is not just about informing a computer about what you want it to do, but also informing programmers reading your code what your want the computer to do. The first part is actually the easy part, it's that second part where most programmers tend to fall flat on their faces. Readable code is a good thing, it reduces human error which is the source of all programming bugs.

    IDE's like anything can be misused, but the idea that everything must be VIM friendly is nonesense.

    1. Re:And the article is incredibly wrong by lattyware · · Score: 1

      The first thing I said was that IDEs are not a bad thing, just that a language relying on an IDE is.

      By all means, separating related content into a single file makes complete sense, but one class a file? Why? If I have a group of small, related classes, why not put them in a single file? That helps the organisation of the code. Java enforces one class a file for no good reason.

      As to code readability, Python allows you to write code that is far less verbose and yet massively descriptive and easy to read/maintain (that is in fact, a core goal of the language), without the *need* for an IDE.

      --
      -- Lattyware (www.lattyware.co.uk)
  141. Re:Did he already heard about integrated debugger by mvdwege · · Score: 1

    I think you shouldn't put too much stock in your own reading ability; you admit that you puke stack traces into the log. Do you know how hard it is to actually diagnose anything when your log is full of stack traces?

    Of course you don't. You're a Java Monkey, a lifeform only marginally more intelligent than the PHP Ape.

    Mart

    --
    "I know I will be modded down for this": where's the option '-1, Asking for it'?
  142. IDE by Anonymous Coward · · Score: 0

    Well,

    Unless you are programming "total object oriented", languages lik e"C" and arguably c++ can benefit greatly from an IDE. Particularlly if context esensitive help, and debuggers are included.

    Come to think of it, I can't think of any case "besides learning in school" that a person would use notepad or similar to write code "quickly" or "efficiently".

    Borland set the standard years ago for this environment with Borland C and Borland C++. blew everything else away with productivity increases.

    Microsoft's answer was Microsoft C Compiler and the junky editor that it had. Paled in comparison to Borland.

  143. An IDE won't make a lot of difference. by GuB-42 · · Score: 1

    I code mostly in C and C++ but I sometimes use other languages too. I worked in many environments, with or without IDEs and I am surprised how little difference it made in actual productivity.
    Features such as auto-completion, fast documentation and definition lookup, integrated debugger, compile error highlighting, etc... are all useful and I use them extensively when I am on an IDE. But even with perfect tools, I can't code faster than I can think, so as long as I am familiar with my environment and it is not completely broken, the gain is minimal.

  144. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    Namely because no matter what language you use, you'll end up with those kinds of issues in some form

    Except that in some languages, those issues are rare. The only time I have seen a Lisp program corrupt its heap (through the equivalent of a dangling pointer) was when I explicitly disabled safety features. In C and C++, on the other hand, dangling pointers are a common and routine source of problems; in C++ especially, dangling pointers tend to creep up in all sorts of unexpected ways.

    That is why I said programmers will not get bogged down with these problems -- these sorts of things are sufficiently rare in high level languages that many programmers will not see them.

    You can interface any language to any OS regardless of the API and documentation

    Only if your language has a suitable FFI or if interfacing with an OS is actually a language feature. Some high level languages do not have such an FFI, and in many high level languages the FFI is cumbersome to use. OS documentation usually assumes the programmer will be using the same language that the API is written for (nothing else would make sense), which adds yet another hurdle for programmers using another language.

    I am not saying that it is impossible, I am saying that it is harder to do and that there is an advantage to using the same language that the OS was written in. OSes have been written in Lisp in the past -- and unsurprisingly, most of the applications for those OSes was also written in Lisp (as opposed to some ML, Ada, or C++).

    The reason that C and C++ continue to be popular - even in the face of C# and Java - is that they enable the programmer to actually get their tasks done because of how flexible the language is. What language fix-its call ambiguities are actually strengths for C and C++.

    Except that C++ doesn't limit undefined behavior to situations that make sense -- for example, converting from a numeric type to a pointer type (this may not make sense on all architectures, but it does make sense on some). In C++, you have undefined behavior that could not possibly make sense no matter what architecture you are using. In what system does it make sense to allow control flow to reach the of a non-void function? In what system does it make sense to allow a reference (which cannot be reassigned) to a local variable to be returned from a function? These are things that could have been forbidden by the language definition; instead, it is up to compiler writers to decide what to do, and the fact that pretty much every compiler has had non-standard features for detecting / rejecting such things had no impact on the C++11 standard.

    These are not features that add to the flexibility of C++; they are just traps waiting to ensnare novice programmers.

    It is hard to argue that C++ is a flexible language when you need a new compiler just to add a feature like lexical closures. If you want metaobject protocol, continuations, or other language features, you are either stuck with some clunky, brittle, and inefficient version using templates and operator overloading or else you are going to need a new compiler (and then you can forget portability).

    C, and its extentions C++ and object-C, have withstood history because they have met and exceeded their target goals.

    First of all, C and C++ have both been updated several times in order to remain relevant. Second, saying that C exceeded the goals that its designers had in mind is not saying much -- the original Unix is not very impressive, even by the standard of the 1970s. Neither is saying that C++ exceeded its designer's goal: C with objected oriented features (that goal was expanded to "a language that is relevant" -- and C++ has not exceeded that goal, it has only met it adequately for most programmers).

    As for objective C, it was hardly a blip on the radar until Apple gave it a boost. Hardly

    --
    Palm trees and 8
  145. Neener neener ... by FreedomFirstThenPeac · · Score: 1

    This is such a fun topic, but it makes me glad that most of my programming is math and stats and I can leave the GUI and interfaces programming to better and more tightly wound coders than I. All I ask is that the mouse cursor not make me curse, the touchpad interface not make me touchy and the help files all be accessible through Google.

    --
    "There is no god but allah" - well, they got it half right.
  146. Have you tried Emacs? by Dareth · · Score: 1

    Have you tried Emacs? It is my favorite operating system. Sure the text editor is a bit weak, but overall it totally rocks!

    --

    I only look human.
    My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
  147. Re:Did he already heard about integrated debugger by sproketboy · · Score: 1

    You're a fucken inbred retard. Go back to your cave you whiny crybaby.

  148. Re:Did he already heard about integrated debugger by bored · · Score: 1

    C++ is severely lacking in expressiveness, and there is an abundance of undefined behavior in C++. Debugging a C++ program is as much about low-level program mechanics as it is about high-level logic (even when you are writing a high level application). Dealing with errors in C++ is a giant ball of confusion -- there isn't even a good way to deal with errors that occur in constructors or destructors.

    C++ lacking in expressiveness? You have got to be joking, your right there are a lot of poorly defined areas in C++, but many of them stem from the fact that there are 100 different ways syntactically to solve any given problem. Of course some ways tend to be better than others, hence I'm confused about your problems with constructor error handling. You handle errors in constructors with "throw", combined with good RAII style, you get the benefit of fast code, that is robust to memory errors. Destructors aren't as clear cut, but the easy answer is not to have fatal errors in the destructor, rather pulling a java and using them more like finalize.

    One of C++'s strong points (vs C) is that you can create a domain specific environment by careful class design and operator overloading. For example our database access library allows you to access a row's column similarly to the same way you might do it in some other languages with first class associative arrays. 'if (result_row["column_name"]==somevalue)' because it overrode the brackets operator. Similarly I have a big num library that operates transparently with all the built in numeric types, even going so far as to work with a template matrix library I have.

    As far as debug-ability, or a programmers ability to focus on the problem at had rather than the language, I suspect that is all just a matter of experience. I've written some extremely complex algorithms in C++ over the last couple years. Not once have I had the need to do anything more complex than display some variables, or a datastructure after some portion of the alogorthm has completed. Maybe what your are describing here is more what I call C++ inverted learning curve. In a lot of languages you learn how to do things, in C++ you tend to learn how _NOT_ to do things. Get to much of this in your project it starts to fail in ways that are beyond the skills of the authors. This happens in other languages too, just in different ways.

    What makes C/C++ special here? A typical FFI in a high level language let's you call functions in shared libraries

    Because its horribly inefficient in most interpreted or GC languages. Time and time again, what you see in the "thunk" layers are pieces of code copying data from some language specific data structure/layout to the one defined by the native call. Or worse yet, you see giant global locks synchronizing all the other application threads. I spoke of mmap() in my earlier post. mmap() is one of those functions that can literally provide orders of magnitude performance boosts (vs explicit read()/write() type calls) in applications that are disk IO (for reasons that take a while to explain) intensive. Yet few languages outside of the C/C++/etc style languages even support it.

    Well, we've seen that situation before. Orbitz was competing against hand-optimized and tuned code running on mainframes, which have lots of hardware acceleration, and speed is crucial.

    Hardware acceleration to do IO, which is also "hardware accelerated" in any x86 server since about the mid 90's when IO adapters started having their own RISC processors, and mostly doing scatter/gather DMA. I have a (brand new!) mainframe, trust me if your application can't beat the pants off a mainframe running on midrange server, then your code is shit. But in a way this proves a point about efficiency. I've seen it a number of times, someone comes in and tries to replace a few hundred KLOC of COBOL, with some "newfangled" language (likely java). The end result requires a cluster of 20 PC's, consumes 10x the memory, and runs 1/2 as fast. This is why/how IBM continu

  149. Re:Did he already heard about integrated debugger by Anonymous Coward · · Score: 0

    eclipse display window provides a repl interface to java in the current stack frame.

  150. Re:Did he already heard about integrated debugger by metaforest · · Score: 1

    I find debuggers useful for catching library and compiler bugs.... but other than that... a waste of time.

  151. Re:Did he already heard about integrated debugger by mvdwege · · Score: 1

    See, the reason I know I'm an actual human being and you're nothing but a poo-flinging baboon, is that I actually gave some arguments along with the invective.

    Once again you show that most Java Monkeys cannot do anything but blindly regurgitate.

    --
    "I know I will be modded down for this": where's the option '-1, Asking for it'?
  152. Re:Did he already heard about integrated debugger by betterunixthanunix · · Score: 1

    C++ lacking in expressiveness? You have got to be joking,

    Well, how might you add "operator#" to C++? Adding new language features to C++ basically requires a new C++ compiler; lexical closures, for example, only became possible with C++11 (previously, Boost's lambda expressions library got you halfway there). That is a result of a lack of expressive power.

    your right there are a lot of poorly defined areas in C++, but many of them stem from the fact that there are 100 different ways syntactically to solve any given problem.

    It is mostly due to the standard being written for compiler writers and language implementors, rather than for programmers.

    Of course some ways tend to be better than others, hence I'm confused about your problems with constructor error handling. You handle errors in constructors with "throw", combined with good RAII style, you get the benefit of fast code, that is robust to memory errors

    Except when your objects are global, in which case throwing the exception means your program aborts, since there is no standard way to write a global catch (set_terminate won't work if the exception is thrown before the entry to main -- which is what will happen if the constructor of a global object throws the exception).

    Destructors aren't as clear cut, but the easy answer is not to have fatal errors in the destructor

    In other words, destructors should have trivial bodies. Why even have destructors if that is how things have to be done?

    One of C++'s strong points (vs C) is that you can create a domain specific environment by careful class design and operator overloading

    Unless you want to add a new kind of operator or a new kind of syntax.

    As far as debug-ability, or a programmers ability to focus on the problem at had rather than the language, I suspect that is all just a matter of experience.

    1. Experienced C++ gurus make mistakes with pointer mechanics sometimes.
    2. In the real world, your team will have people with varying levels of experience; the least experienced person will be the bottleneck when it comes to things like undefined behavior, dangling pointers, etc.

    In a lot of languages you learn how to do things, in C++ you tend to learn how _NOT_ to do things

    Which is precisely the problem here. In C++, you need to know what valid C++ expressions, statements, or programs should simply not be written. Rather than rule such things out in C++11, the standards committee just added more things that you are supposed to know not to do.

    Those results have re2, and it beats all the normal regular expression parsers only loosing to a lisp specific parsing/matching system. I don't call that a win for LISP, if you move the goal posts (we were comparing regex) then its not apples to apples. Its not hard to imaging a dozen ways of creating a searching sorting system faster than regex if your willing to wiggle the requirements.

    Like I said, this is not a good benchmark; on the other hand, RE2 is not average twice the speed of libpcre (unless you count an outlier):

    http://lh3lh3.users.sourceforge.net/reb.shtml

    CL-PPCRE does average twice the speed of libpcre/Perl (unless you pick examples that libpcre can handle well):

    http://cl-debian.alioth.debian.org/repository/rvb/cl-ppcre-sarge/doc/#bench

    I would not draw too many conclusions from the benchmarks alone (there is no direct comparison between CL-PPCRE and RE2), but CL-PPCRE does do something that neither libpcre nor RE2 do: it compiles your regex into a callable function that does not traverse a pointer structure. With a good compiler (n

    --
    Palm trees and 8
  153. Re:Did he already heard about integrated debugger by TemporalBeing · · Score: 1

    In C and C++, on the other hand, dangling pointers are a common and routine source of problems; in C++ especially, dangling pointers tend to creep up in all sorts of unexpected ways.

    Dangling pointers are not nearly as much of an issue in C/C++ development as made out to be. They are an issue for people that don't understand pointers. But I would say that for the majority of C/C++ programmers that are not inexperienced they are not an issue.

    You can interface any language to any OS regardless of the API and documentation

    Only if your language has a suitable FFI or if interfacing with an OS is actually a language feature. Some high level languages do not have such an FFI, and in many high level languages the FFI is cumbersome to use.

    That is an issue of the language you are using, not the language the OS is written in. Thus they are niche use languages.

    OS documentation usually assumes the programmer will be using the same language that the API is written for (nothing else would make sense), which adds yet another hurdle for programmers using another language.

    If you know how to use documentation that is not a hinderance. Writing Windows Scripts in JavaScript with Windows Scripting Host (WSH) is a pain because the documentation for WSH primarily written for use with VBScript. Yet it is not impossible to use JavaScript, Perl, or Python with WSH - not even very hard; just a bit more painful as you have to figure out a couple things. (Personally I prefer WSH+JS over WSH+VBscript.)

    I am not saying that it is impossible, I am saying that it is harder to do and that there is an advantage to using the same language that the OS was written in. OSes have been written in Lisp in the past -- and unsurprisingly, most of the applications for those OSes was also written in Lisp (as opposed to some ML, Ada, or C++).

    It's advantage is only in not having to write the Language Bindings for other languages. Many toolkits do that kind of things. It's just a task that has to be done to use languages on top of those OSes.

    The reason that C and C++ continue to be popular - even in the face of C# and Java - is that they enable the programmer to actually get their tasks done because of how flexible the language is. What language fix-its call ambiguities are actually strengths for C and C++.

    Except that C++ doesn't limit undefined behavior to situations that make sense -- for example, converting from a numeric type to a pointer type (this may not make sense on all architectures, but it does make sense on some). In C++, you have undefined behavior that could not possibly make sense no matter what architecture you are using.

    Again, it depends on what you are doing. The memset() and memcpy() functions takes a void pointer; would it make sense to write an infinite number of them for each type? No. Yet they are very fast ways to clear and copy data and data references. Misused, they can wreak havoc.

    Converesly, C# and even Managed C++ (C++/CLI) which tries to solve problems related to the misuse of functions like memset()/memcpy() makes it very difficult to copy a buffer of data in at least some situations - e.g. sending it to the network. So instead of having a send(), one has to convert the first chunk to a integer and then use pointer arithmetic to copy the whole buffer.

    In what system does it make sense to allow control flow to reach the of a non-void function?

    You do realize that compilers notify programmers about that?
    And of course, there are ways to set up the function so that the return value is there without the compiler really knowing about it - but then you're getting into Obfuscated C territory.
    And there are also times when the API changes but you can't really change it - so documentation gets update (hopefully) to matc

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  154. Efficiency by Anonymous Coward · · Score: 0

    Every bit of efficiency of using my IDE vs. a simple text editor was lost today reading these comments.