Hi,
Doug --
When
looking at the New Project wizard for Tilera's
Eclipse-based IDE, a key issue I had was how much prior
knowledge the wizard expects the user to have in order to
make the right choices: for example, how Eclipse organizes
projects (e.g. new vs. existing directory, workspace vs.
external directory, makefile vs. managed), what kinds of
projects can be built by managed projects (.exe, .so, .a),
and what the various toolchain options represent (GCC vs.
cross vs. "other toolchain" vs. proprietary compiler X
vs. proprietary compiler Y), etc.
As
a specific example of the toolchain issue, in another
Eclipse-based IDE I've looked at there are multiple
toolchain selections, which ultimately correspond to
different versions/implementations of the platform's
compiler, but from the wizard there's no obvious
indication of which toolchain name corresponds to what
compiler version. This matters because there are features
supported by one compiler but not by another, so you have
to go in knowing not only what compiler version you need
for your project, but also which of the otherwise
indistinguishable toolchain options selects that version.
If
you want a use-case, think of new customer X who's just
picked up our Eclipse-based IDE for the first time, and
isn't comfortable with IDEs to begin with, and wants to
just create a project around some existing code to try
stuff out. If said user has to read through the online
help just to figure out how to create the right project,
or has to create one or more incorrect projects first just
to discover which are the right options to use, it starts
them off on entirely the wrong foot with the tool, and
gives a terrible impression of the usability of the IDE
overall. And this gets repeated for every new customer.
Yes,
of course, once you know (or have read in the docs
somewhere) which two picks out of the lists you always
need, the wizard is simple to use, but to my mind this
kinda subverts the idea of having a wizard in the first
place. The current wizard is optimized for efficient
selection, not for discoverability, and that works against
us if we want to encourage use of CDT-based IDEs. In other
words, rather than trying to figure out how to bucket
project types, we should tackle the problem by first
finding out what the user wants to do, and then
have the wizard decide from that what project type and/or
toolchain is right for the job.
The
approach I took with Tilera's IDE was to add an extension
point that allowed inserting a custom "first page" in the
wizard, ahead of the existing one. This page asks a few
well-chosen introductory questions that:
(a) express things from the user's point-of-view and
(b) cover like 90% of the most common projects people
create.
This
page then populates subsequent page(s) and/or tweaks the
created project accordingly, the goal being that unless
you're doing something really unusual, you can immediately
click Finish and get a properly configured project,
perhaps without even looking at the other wizard pages.
Here
are examples of these kinds of introductory questions,
which we use in tile-eclipse's New Project wizard:
-
where do you want to create this project?
(o) in a subdirectory of the IDE workspace named:
[ text box ]
( ) in a new/existing directory outside the workspace:
[ pathname text box ] [ Browse... ]
-
how do you want to build it?
(o) Makefile: use your own existing makefile
( ) Managed: IDE generates makefile(s) for:
(o) an executable
( ) a shared library (.so)
( ) a static libary (.a)
-
which platform is this project intended for?
(o) Tilera hardware (cross-compiled with Tilera C/C++
compiler)
( ) Linux/x86 platform (compled with standard Linux GCC)
In
other words, turn the problem around and give users enough
ammunition in the wording of the questions to know whether
they're making the right choices, or if the provided
choices even cover the type of project they have in mind.
(Like, what if someone decides to create an Eclipse
project to build the Linux kernel? Don't laugh, someone
wanted to do that!)
We
could generalize these kinds of questions enough to
provide a default "intro page" (or pages) along these
lines for the default project & toolchain types that
come with CDT, but it would still make sense to define a
customization API such that an integrator could provide an
alternative, tailored intro page for the platform. This
custom "first page" (or its provider class) may also need
access to the constructed project to perform additional
configuration steps for platform-specific selections. For
example, another question we ask is what Tilera MDE
installation to use for the cross-compiler, and we
customize the project's environment variables accordingly.
Yeah,
it's a bit more UI than just having a couple of quick
pick-lists, but that's kinda the point. The current wizard
assumes a lot of prior knowledge, and leans towards
compactness at the expense of clarity. We may want to find
a way to rework that, while also making it customizable by
developers.
William
R. Swanson (traveler@xxxxxxxxxx)
Senior
Software Engineer
Tilera
Corporation
1900
West Park Drive, Suite 290
Westborough,
MA 01581
Hey
gang,
Even
though we're a community spread across the globe, it's
important that we have real design discussions and
help plan out our future directions. We can start here
on the mailing list, and as part of this discussion,
we can move it to a different venue if it becomes too
noisy or too awkward to make our points. As you can
tell from my blog, http://cdtdoug.ca, I
love to write, so this works best for me, but I moved
to QNX to work with a team that sits within spitting
distance of each other because I love that interaction
too, well, except for the spitting.
I'd
like to do something with the New Project wizard. I've
wanted to do that for a long time. And now that we've
gone through the exercise in Momentics, I think we can
bring some of that experience to the CDT and the
Eclipse C/C++ IDE in particular, and anyone else who
wants to contribute ideas and/or code to reuse it
themselves. But I'm not sure I have the full
perspective on everything all CDT projects would need.
First
up, the biggest problem is the first page, and the
Project Type and Toolchains panes in particular. What
is a project type. Is it the type of binary output,
executable or library? Is it the build system,
autotools or qmake or cmake? Is it the kind of
application, command-line or GUI or plug-in. The
target platform, BlackBerry or Desktop or Server?
Or
do you pick the toolchain you want first and then the
project type? The UI was mainly designed by a
contributing company that offered an alternative
compiler to gcc so the choice was left second which
made sense in those scenarios. But how does GCC cross
fit into that. For many of us, toolchain implies
target platform, but wouldn't you select the target
platform before picking the project type and then
selecting a toolchain? Are we missing something there?
Right
now we have quite a mix of concepts being presented in
these two panes, project type and toolchain and the
cohesion is terrible. I'd love to hear what you all
think of the dialog and how you think it should be
changed to make more sense to our users.