development environments (non-integrated)

Discussion in 'Java' started by Jacob, Feb 8, 2006.

  1. Jacob

    Jacob Guest

    I am doing a research project on development environments
    using the Unix philosophy of development (see for instance
    http://www.faqs.org/docs/artu/ch01s06.html) with the hypothesis
    that an environment of small, simple, exchangable tools
    might outperform the use of heavyweight IDEs.

    I am setting up a test environment and am planning to do
    performance measurments (in terms of # keystrokes, time, robustness)
    on typical development scenarios like check-outs, bug-report-fix-test-
    deploy-cycles, create development area for new user etc, management
    reporting etc.

    An initial task includes defining the term "development environment"
    and exactly what it covers (operating system, version control system,
    programming language, editor, compiler, debugger, test environment,
    build system, bug tracking, document handling, project control and
    so on).

    The environment must be scalable to 10+ developers and at least a
    million lines of code. The current state of my setup is as follows
    (including short rationale for each choice):

    OS: Linux - fast, secure, availability of development tools, free.

    VCS: Subversion - State of the art, simple, robust, free.

    Language: Java&JDK - Versatile, multi-platform, well-documented,
    easy to use, free.

    Compiler: Jikes - Fast.

    Deployment: JavaWebStart - Simple, fast, user-friendly.

    Tools scripting: Python - Simple, well suited, state of the art, free.

    Code documentation: Doxygen - Feature-rich, high quality documents, good
    error reporting.

    Editor: Whatever the developer prefers - Efficient, developer
    satisfaction.

    Unit testing: JUnit - State or the art.

    Bug tracking: Flyspray - Simple, good quality, free.

    Building: Make - Simple, versatile, free.

    Coverage: Cobertura - Simple, fast, report quality, free.

    Document collaboration: twiki - Simple, free.

    I'd like feedback on the selection, and experience with these and
    alternative tools.

    I do miss tools for code metrics, debugging, profiling, and
    project management (hours, calendar, resources, time estimates
    etc) among others. Also, no particluar project process (like RUP)
    w/tools, has been chosen. Suggestions and experience appreciated.

    Thanks.

    PS: Excuse me for being slightly off topic.
     
    Jacob, Feb 8, 2006
    #1
    1. Advertisements

  2. Jacob

    Daniel Dyer Guest

    Fast, but not up-to-date. Development stagnated for a while, and even now
    there hasn't been a release in 16 months. If you want Java 5 support you
    will probably have to settle for javac. Previous versions that I used
    were fast but often buggy, and there seems to be a lot of unresolved
    issues with the last release.
    What are you using the scripting language for?
    Why not Javadoc?
    I'd argue that TestNG is much more state of the art. JUnit 4.0 might not
    be so bad when it gets released.
    Apache Ant is the de facto standard in Java land, though some people will
    tell you that it is evil (see the thread "make not needed" from last week).
    You could also try comp.lang.java.softwaretools.

    Dan.
     
    Daniel Dyer, Feb 8, 2006
    #2
    1. Advertisements

  3. Jacob

    Roedy Green Guest

    for other possibilities, see http://mindprod.com/jgloss/testing.html
     
    Roedy Green, Feb 9, 2006
    #3
  4. Jacob

    Jacob Guest

    I am developing on 1.5 and rely on a robust compiler, and at the moment
    I am actually using javac. I used to use jikes, and thought it were
    finally up to speed on 1.5. If that's not the case I'll stick with
    javac. Are there other alternatives? What about the the gcj?
    Simple administration tasks, like extracting a clean version from
    the VCS and build everything from scratch every hour. Make does the
    bulk of the job, but it needs to be kicked from somewhere.
    I prefer the layout of Javadoc and it simplifies a lot to have
    it as part of the language tools, but when comparing features
    Doxygen seems far ahead (class hierarchy diagrams being one).
    Check the rich options set of the Doxyfile and compare it to the
    rather limited options of javadoc.
    I'll check TestNG as I don't really like JUnit that much.
    The API is wide and documentation is bad; Both hints of
    a badly structured project.
    Ant is not evil, but perhaps a bit to complex to fit my philiosophy,
    and make is far more versatile. In short: For all the tasks
    a development environment consists of you'll need make anyway.
    So then you might as well use it for building too.
     
    Jacob, Feb 9, 2006
    #4
  5. If done right, and if given to the right people, yes.
    State of the art is not an argument. Particular not in your scenario.
    Because, IDEs are officially the "state of the art", but you have
    explicitly set out to do it differently, because state of the art is not
    what you want.

    Admit it, you want Python, because you know Python.

    I would consider more of the classic Unix tools. The whole bunch of awk,
    sed, m4, etc. If that isn't to your (or your user's) liking, Perl.
    Ok, Doxygen is more powerful than e.g. JavaDoc, but JavaDoc is the
    standard tool, comes with the JDK, and is simply the thing most Java
    programmers use. Doxygen is largely compatible with JavaDoc (Doxygen
    treats JavaDoc markup as a subset of its markup syntax). So if it later
    turns out that JavaDoc is really not up to the task, you can still
    change to Doxygen later.
    Still, for the novices, provide a "standard" one for your environment,
    and provide the necessary integration (check out, check in from the
    editor, start of the build system, on-error got-to, etc.).
    Again, I would not use the term "state of the art" :) Regarding
    testing, see also my remarks for the Wiki below.
    Good, but not without some problems when it comes to Java. Prepare for
    some extra work. The big problem is dependency declarations. java source
    code often has circular dependencies, but make doesn't like if you
    declare circular dependencies. You have to group your source code into
    clusters, where each cluster has internal dependencies, but the clusters
    form a DAG. Or you rely on javac's feature to find and compile
    dependencies by itself (up to a certain limit), if set up right.
    Hmm, do you mean "project collaboration", or how do you want to link
    that to Doxygen/JavaDoc documentation?

    If you want to link testing and a wiki, maybe FitNess is for you
    http://fitnesse.org/
    http://www.lambdacs.com/debugger/debugger.html

    Last time I looked at it very interesting debugging concept, but not
    complete. Probably complete now.
    The usefulness of a particular project management tools depends very
    much on the management process you apply. Maybe dotProject (written in
    PHP for a LAMP environment, not in some .NET stuff) is useful for you:
    http://www.dotproject.net
    IMHO you are very much on topic.

    /Thomas
     
    Thomas Weidenfeller, Feb 9, 2006
    #5
  6. Jacob

    Roedy Green Guest

    the key for speed with JavaC is to use Ant so it loads once and
    recompiles the universe.

    For debugging there is the compiler internal to Eclipse which is
    blinding fast.
     
    Roedy Green, Feb 9, 2006
    #6
  7. Jacob

    Chris Uppal Guest

    One important thing that strikes me as missing from your list of tools (and
    also from your list of programmer activities), is anything which will aid code
    browsing. Something that can answer questions like, "where is this class
    referred to?", "what overrides are there of this method?", "where is this
    method called?", "what code uses this constant?", "which classes implement this
    interface", etc. Answering such questions (with or without tool support) is a
    major part of programming; it's central to code /reading/ and comprehension,
    so if you don't have support then it'll skew your results.

    Unfortunately, the only browsing tools I know of for Java are the rather clunky
    search features built into some IDEs. I know of nothing that will work as a
    standalone tool or will integrate into an editor ("which editor?" one asks ;-).
    That doesn't mean there aren't any, though. Maybe someone can suggest
    something.

    -- chris
     
    Chris Uppal, Feb 9, 2006
    #7
  8. Jacob

    Roedy Green Guest

    I have see two such tools, Juliet and JGuru

    Both left me wanting to rewrite them, extending the basic idea.
     
    Roedy Green, Feb 9, 2006
    #8
  9. There is ctags and it integrates e.g. into TextPad. It can be used to jump to
    methods and classes. I'm not really familiar with ctags, but I assume its output
    could also be used for the other "queries"

    Thomas
     
    Thomas Kellerer, Feb 9, 2006
    #9
  10. Jacob

    im Guest

    http://sourcenav.sourceforge.net/
    I find Source Navigator very useful. I use it for code browsing only, but
    technically it is an IDE, so that may disqualify it for your purposes :)
    The UI is probably not too intuitive by today's standards, it takes some
    time to learn it, but it is fast and effective. It is included in some
    Linux distributions and available for windows.

    Imre
     
    im, Feb 9, 2006
    #10
  11. Jacob

    Roedy Green Guest

    the features I would like are:

    1. find me a constructor or factory for this kind of object, broadly
    defining factory.

    2. Now I have a Blot object, what method in the known universe will
    eat one, not many, then how about next level superclass?

    3. who implements this Interface? Thankfully Javadoc now includes
    this.

    4. who subclasses this class? Again Javadoc now tracks this.
     
    Roedy Green, Feb 9, 2006
    #11
  12. To a certain extend the documentation generated by JavaDoc can answer
    these questions. However, the documentation is static (needs to be
    generated first), and doesn't answer all of them.

    If you have a large amount of code, you probably anyhow need to first
    generate some database or index. Which leads to the next useful tool in
    this area: ctags and/or etags. They are primarily intended to support
    source code navigation inside editors. Which can answer some of the
    above mentioned questions. E.g. a ctags version on speed :) can be
    found at http://ctags.sourceforge.net/
    One which supports tag files for source code navigation (e.g. vi, emacs,
    nedit) :)

    /Thomas
     
    Thomas Weidenfeller, Feb 9, 2006
    #12
  13. Jacob

    Stefan Ram Guest

    What I am looking for is:

    Given a source tree with several packages and source files:

    Print all source files sorted topologically by their
    interdependency, for example:

    Layer 0
    Entries depend on no other source files, except source files
    from this layer 0
    ./alpha/beta/Gamma.java
    ./alpha/delta/Epsilon.java
    ./zeta/eta/Theta.java

    Layer 1
    Entries depend on no other source files, except source files
    from this layer 1
    ./alpha/beta/Iota.java

    Cycles
    The following source file was excluded from consideration
    to avoid a cyclic dependency
    ./alpha/kappa/Lambda.java
     
    Stefan Ram, Feb 9, 2006
    #13
  14. Jacob

    jeanlutrin Guest

    Interesting project!

    I just want to add that they're not mutually exclusive: I'm using
    IntelliJ IDEA as my "heavyweight" Java IDE but with one keyboard
    shortcut I'm on a Unix terminal window and with another keyboard
    shortcut I'm on a traditional Unix "text editor". For most things I
    "simply" use IntelliJ IDEA (using an heavily modified Emacs
    keymapping and and custom Emacs plugin for IntelliJ) but then
    sometimes I just need to do an operation that's better done using
    the "old Unix way": then I just temporarly switch to "simpler" tools.

    Recently I had one such case: I was charged to modify some code
    I didn't write. The task was tedious and repetitive and too complex
    to be done by the "simple" search and replace provided by IntelliJ
    IDEA. One keystroke and I'm out of IntelliJ IDEA, then a little
    bit of perl and sed magic and the work was done.

    Why restrict your development environment to one or the other
    when you can have the best of both world?

    :)

    That said, I think the best development setup allows programmer
    to use whatever tools they want: for example for code editing nothing
    should prevent one developer to use IntelliJ IDEA, another one Eclipse,
    another one vi, another one (X)Emacs and those like me who don't
    fear holy wars should be able to have several of these openend
    simultaneously (and using the same font and the same color scheme :)

    Many companies are insisting on having a single development setup
    but there are also quite some where the developers are free to choose
    and use whatever fits them most. There was an article on
    theserverside.com less than a year ago about the Java development
    going on at Walmart: this is such a company where everybody can
    choose what tool they use to work on the (Java) project.

    Good luck on your research,

    Jean


    P.S : I like your measurment in keystrokes: to me the mouse has
    always been an anti-pattern for (non-visual) programming ;)
     
    jeanlutrin, Feb 9, 2006
    #14
  15. Jacob

    Daniel Dyer Guest

    Probably better to use a specialised continuous integration solution for
    this, such as Cruise Control or Luntbuild.
    I use Ant. It's not perfect, but it does enough to dispute your assertion
    that "you'll need make anyway".

    Also, as Roedy pointed out, if you use Ant you will get better performance
    from javac and other tools written in Java than you would with make. Each
    separate invocation of javac (and the other tools like jar, javadoc,
    javah, etc.) in a make file incurs VM initialisation overhead. Ant by
    default runs each task in the same VM that Ant runs in, thus avoiding the
    JVM start-up penalties.

    Dan.
     
    Daniel Dyer, Feb 9, 2006
    #15
  16. Jacob

    Jacob Guest

    Given that you need a scripting language for assembling
    the environment tools, then, yes, I want that scripting
    language to be "state of the art".

    This is due to maintainance and in order to easily get
    people that knows the technology. I didn't know Python
    when I started, but knew that it was "lightweight" and
    could fulfill the task.
    This suite of tools is one of the reason Linux is the preferred
    OS in the first place. But what I *don't* want to use is bash,
    sh or csh or their likes (which I do know quite well).
    Python is choosen to replace these traditional Unix shells.
    (And Perl is *not* an option. Never! :)
    Compared to Doxygen, JavaDoc is not up to the task already.
    Unfortunately. There is so much valuable information that
    could potentially been there, but you have to admit, it hasn't
    really evolved much since the start back in '96.
    (That said, I dislike Doxygen too, especially the layout)
    True. Emacs comes to mind...
    I already have a simple make setup that handles about half a million
    LOCs smoothly. It outperforms Ant by any standard. But of course
    it takes some effort to assemble it in the fist place (it's public btw).
    The assumption is that there is a web server running and that
    there is a single entry point to the development tools, status,
    logs etc. Part of this site will be a collaboration area where
    "other" information will live, such as external documents, analysis
    documents, MOMs, etc. Twiki should fulfill this task.
    First impression: Several things "integrated". I don't want tools
    to be "integrated".
    Strange site. Silly slogan. This is where I'd rather go
    "state of the art". What about DDD?
    This seems very close to what I want.
    First impression though: Ugly GUI.
     
    Jacob, Feb 9, 2006
    #16
  17. Jacob

    Jacob Guest

    Good point.

    There seems to be a few "plugins" for emacs, in particular ECB
    (http://ecb.sourceforge.net/) looks impressive (from the screenshots
    at least). I have no experience with it. Anyone?

    How whould you rate the support for these features in IDEs like IntelliJ,
    Eclipse, NetBeans or VisualStudio?
     
    Jacob, Feb 9, 2006
    #17
  18. Jacob

    Jacob Guest

    Using Ant doesn't change the speed of javac. Whatever build tool
    that is used should be configured so that it gives javac the
    smallest workload possible. And Ant might not be the most clever
    in that respect...
    Eclipse bundles many different tools/tasks and is therefore not
    target for my study.
     
    Jacob, Feb 9, 2006
    #18
  19. Jacob

    Daniel Dyer Guest

    Real programmers use grep ;)

    Dan.
     
    Daniel Dyer, Feb 9, 2006
    #19
  20. Jacob

    Daniel Dyer Guest

    I've been name checked on the Java Glossary, I've finally made it in the
    Java world :)

    Are you sure your readers are interested in my preferences?

    Dan.
     
    Daniel Dyer, Feb 9, 2006
    #20
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.