<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
    <title>NetBeans 6.8 Community Tester Eric Smith</title>
    <meta name="AUTHOR" content="Tinuola Awopetu">
    <meta name="description" content="Eric Smith, a NetBeans 6.8 community tester, explains how participating in NetBeans' Beta testing program helps his development needs.">
    <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
  </head>
  <body>
    <h1>Meet the Top Community Testers for NetBeans 6.8</h1>
    <span style="font-style: italic;">January 2010</span><br>
    <h4>Eric Smith: Beta Testing NetBeans 6.8 to Meet his Development Needs<br> </h4>
      <br>
    <h2>Tell us about your background as a developer and NetBeans user.<br> </h2>
    <p>
      <span style="font-style: italic;"><img style="width: 80px; height: 80px;" alt="Eric Smith - NetCAT 6.8 Tester" src="../../../images_www/articles/interviews/eric-smith-small.jpg" align="left" hspace="4" vspace="2"></span>I've been developing software since the mid 1970s so I've seen the
      entire evolution of the PC, Mac, Linux, and many other things that
      have come and gone. I've been consulting since my teens and have always looked for common tools that let me work
      in the multitude of languages I need to use on a regular basis.<br>
    </p>
    <div style="padding: 0pt 0pt 7px 7px; width: 200px; float: right; font-size: 120%; font-weight: bold;">...A single IDE that meets most of my needs...<br>
    </div>
    I started working with the pre-cursors to NetBeans (Forte, Sun
    Developer Studio, etc), as well as Eclipse, JBuilder, TogetherJ,
    Intellij Idea and straight editors when they first came out. When
    NetBeans came along, it just felt right; I've used it as a primary
    development tool ever since. I'm sure everyone has their specific likes and dislikes about other
    IDEs as I do about each of
    the tools mentioned. But as far as having a single IDE that meets
    most of my needs, from C/C++ to Ruby with a bit of Java in there as
    well, NetBeans works.<br>
    <p>
    </p>
    <h2>As a <a href="http://qa.netbeans.org/processes/cat/68/index.html">NetCAT</a> participant you experienced
      <a href="https://netbeans.org/community/releases/68/">NetBeans 6.8</a> before the masses did. Your thoughts on the new features and the
      quality?<br>
    </h2>
    <div style="padding: 10pt 10pt 10px 10px; background-color: rgb(238, 238, 255); width: 190px; float: right; font-size: 100%;">
      <div style="font-weight: bold;"><a href="http://www.linkedin.com/in/esmithbss">Eric Smith</a><br>
      </div>
      <div style="font-size: 90%;">Location: United States<br>
        <br>
        <span style="font-weight: bold;">NetCAT 6.8 Stats</span><br>
        Bugs Filed: 114<br>
        RFEs Filed: 7<br>
        Emails Sent: 67<br>
        Total NetCAT Points: 562<br>
        <a href="http://qa.netbeans.org/processes/cat/68/activity.html">NetCAT 6.8 Activity Log</a><br>
        <br>
        <span style="font-style: italic;">More NetCAT 6.8 Spotlights:</span><br>
        <a href="https://netbeans.org/community/articles/interviews/netcat68-ulf-zibis.html">Ulf Zibis</a>, <a href="https://netbeans.org/community/articles/interviews/netcat68-michel-graciano.html">Michel Graciano</a><br>
      </div>
    </div>
    The NetBeans team has worked very hard on the quality of the product
    and some nice new features. I'm particularly impressed with the
    improvements to the Ruby Debugger since NetBeans 6.7. Many of the things that caused problems before work like a charm now.<br>
    <br>
    I'm also impressed by the memory management improvements. Under
    6.7 and 6.7.1, I was constantly forcing Garbage Collection for some of
    my larger projects. Using 6.8 during the NetCat
    program, I only had to force GC once or twice. Awesome!<br>
    <br>
    I know a big part of the memory is the new Environmental Ergonomics of
    the IDE, where it only activates the components you need, and then only
    when you need them. It's not a matter of installing everything
    and having it all on, loaded in memory, and running everytime you use
    the IDE after it's installed. Now, if you never develop a Ruby
    application, you never load the Ruby modules. If you never
    develop Java EE, then you don't load the Java EE capabilities.
    <p>
    </p>
    <h2>Have you participated in other software Beta testing programs? Can you compare them to NetCAT?<br>
    </h2>
    <div style="padding: 0pt 0pt 7px 7px; width: 200px; float: right; font-size: 120%; font-weight: bold;">NetBeans lets me work the way I work.<br>
    </div>
    I've been beta testing software for over 20 years, both as a community
    participant and as a testing team leader for clients. Outside of
    the projects I've led, none have come close to the rigor and
    responsiveness of the NetCAT program. Not only is the development
    team far more involved than I've experienced, there is direct
    interaction and meaningful discussion with them through the forums and
    wiki throughout the program. It's not a matter of having a
    "contact" that all communications goes through, or having an interface
    with the testing team and not the development team. With NetCAT you have
    the real developers asking you questions and working with you to get
    your problems and issues resolved. I think that's absolutely
    fantastic.&nbsp;
    <p>
    </p>
    <h2>What
      motivates you to contribute to the NetBeans
      project?<br>
    </h2>
    I'm always looking for the best tool that will help me get my customers
    the most bang for their buck. If an IDE stands in my way, I'll
    switch IDEs. If a database is too slow, I'll get another
    database. It's that simple. Whatever let's me get things
    done faster for my clients.<br>
    <br>
    With NetBeans, I get that.&nbsp; It lets me work the way I work.
    It lets me do things that other IDEs don't (without extra
    plugins/add-ons).&nbsp; And on top of all of that, the price (FREE) is
    perfect! That alone is enough to get me participating.<br>
    <br>
    Unfortunately, that's not the position I find myself in
    frequently. As a consultant, I typically need something that
    works on multiple platforms and let's me have access to some of the
    latest and hottest technologies (like JavaFX, Ruby and PHP) as well as
    some older stuff (C/C++) so I work with the newest stuff on a regular
    basis. That means getting access to the new tools as soon as
    they're available and usable. For NetBeans, that means
    NetCAT. The price for this is working with the NetBeans team to
    make sure what I need and want works. The benefits to me are
    advanced knowledge of the tools, better skills with the tools, and
    improved speed for my clients. That's a win-win for any
    consultant as far as I'm concerned.
    <p>
    </p>
    <h2>How would you encourage other users to participate in future NetCAT cycles?<br>
    </h2>
    "Don't just wait around to hear about the next version of an IDE, or sit at your desk wondering if the tools you depend on will
    do what you need. Take an active role in NetCAT. Make sure
    you know about the latest version before it hits the network. Make sure
    what you need is in there and usable when the next NetBeans
    version appears. The payoff for your small time investment is
    incredible."<br>
    <br>
    Beyond that, I'd let them know how much you can learn about the tool
    and the underlying technologies by participating in the program.<br>
    <br>
  </body>
</html>
