views:

252

answers:

9

We have a user experience designer in our team who has no programming background. He is expected to design screens within Eclipse as a development environment. His (valid) complaint is that every time he designs a specific screen and gives it to development - they tell him what is not possible technically using either SWT or GEF. So, he wants me to teach him basics of SWT/GEF so that he can make informed decisions and maybe even try out certain things in eclipse (as opposed to using Photoshop) before proposing designs to save time.

My personal belief is that design should not be constrained by technical possibilities and in theory, everything that the designer dreams of (at least the practical things) should be possible technically - albeit with workarounds or a little hacking.

So, my question is this - how important do you think is programming knowledge for user interface design? And if it is, how do you go about teaching someone with absolutely no programming experience the graphical frameworks on various platforms?

+3  A: 

Is not as important as common sense in my opinion.

It helps of course. But if the designer is asking for something that could be done ( because some other application uses it ) the development lead should at least present a workaround.

Programming knowledge probably not, but limitations on the chosen platform certainly.

OscarRyz
+2  A: 

It all depends on your tools.

Edit: What I mean is there are tools that are designed for designers, and tools for programmers. Eclipse, for one is not a designer tool. Photoshop is. Flash maybe, Flex not. I wouldn't require a Flash designer to program, but a Flex designer does need to program.

As for telling them about the limits of your tools it depends, really good creative designers will embrace those limits and make incredible work, mediocre designers will perceive the limits as roadblocks and stop being creative and just following the rules with fear.

Robert Gould
an explanation, perhaps ?
andyk
+9  A: 

In principle, I agree with you. Programming knowledge shouldn't be necessary to be a skilled designer of UIs and work flows. However, knowing the abilities and limitations of the technology in use can help a UI designer work more effectively with the programming staff.

Where programming knowledge can help is if the development staff is blowing smoke that something cannot be done when it can be, some knowledge of the tools being used can help refute that. If the development staff is correct that something cannot be done, then knowledge of the tools can help the UI designer find an appropriate solution that meets the design goals and is achievable.

With a properly cooperative development staff, the UI designer would need very little (if any) knowledge about the specific GUI tools being used.

I've been on the developer side of this where I was being asked to do something impossible or impractical. I always worked with the designers to find a happy middle that met the design goals. Sometimes what I thought was impossible was in fact possible. Sometimes we had to do things a different way. A few things had to be put off as "possible, but too much effort." (Such as an SWT based application that became a Windows task bar. Definitely possible, but impractical for the project in question as it would require native code.)

What is most important is that both sides realize that they are on the same team.

Eddie
Thanks for the great answer!Proper co-operation between development and the design group should circumvent all problems. However, i believe the issue is about time and effort spent. Is it better to learn about UI technology upfront or to learn the constraints along the way? It depends, i guess.
Anirudh
Given the time, it's probably better to learn up-front. Given the realistic constraints of today's development model, learning along the way is just how it seems to go. :) On-the-job training is always better than none at all.
Eddie
+4  A: 

Its very important..

Not knowing about:

  1. technology in general
  2. the technology you have chosen to dedicate your time investing into to produce the end product

Will result in a complete waste of time for everyone..

Even the end user needs to learn a bit about the technology employed in able to use whatever product we make.. Someone who drives a car will always need to know how to fill in the gas and know the basics of what a car is and what it can do, software works in a similar fashion.

Its like asking someone who doesn't know that cars (the ones of today) need wheels to make a drawing of your next release model.

The way to make them more aware of the technology is:

  1. Show him/her similar products to the ones you should be making
  2. Show him/her stand alone implementations of the building blocks you might consider using

But by all means...this doesn't mean you should stifle their creativity..have them draw away what they dream, just make them that little bit aware of reality as needs be in order to have something done in this lifetime

Ric Tokyo
I would tend to agree with you. However, the question is not that they do not understand the needs (cars having wheels), just that they might propose to use polyester instead of vulcanized rubber for wheels - maybe because you get different colored wheels. I get your point, though. Thanks!
Anirudh
+2  A: 

So, my question is this - how important do you think is programming knowledge for user interface design?

I think a basic knowledge of the standard user interface for the platform is required (text fields, combo boxes, radio buttons, etc). A good designer should be familiar with the capabilities and limitations of these GUI components, from a developer's point of view. So I guess some basic programming knowledge would be useful.

My personal belief is that design should not be constrained by technical possibilities and in theory, everything that the designer dreams of (at least the practical things) should be possible technically - albeit with workarounds or a little hacking.

I think there are important qualifications here --- each OS has guidelines on what constitutes good GUI design, and it's beneficial for your product that you follow them because the user has a certain mental model of how he or she should interact with applications on that platform. (Having said that, there may be good reasons for breaking some design conventions, e.g. in games, specialized graphics/music applications.)

how do you go about teaching someone with absolutely no programming experience the graphical frameworks on various platforms?

Each toolkit makes available a whole bunch of small sample programs to demonstrate the use of different components --- this is probably a good first step to acquaint oneself with them.

Zach Scrivena
+2  A: 

I think the designer should be aware of the features and limitations that the tools he's using offer, and he should be aware of the limitations and the deadline of the current project that those guys are making.

He should also be aware of the background processing that's going on to show the screen UI, and all these things will come only if he has some rudimentary knowledge of programming.

He doesn't have to dabble in the depth of OOP, learn SQL, know the intricacies of reflection or anything fancy like that. He just has to know his platform well, and that I think is a requirement even for the designers.

Cyril Gupta
+3  A: 

I think it's better to learn up front, but if your UI designer is forced to learn on the fly, make sure that each time he is turned away, it's explained why something can't be done rather than just a flat refusal. This will keep him from getting as frustrated as he might otherwise be because he'll be able to form at least some logical framework for what he can and can't do.

VirtuosiMedia
+2  A: 

The very core of "design" is to find a way to achieve a desired result within the constraints. If you don't anything about a part of the constraints that affects your goal, then you can't design.

Aaron Digulla
+1  A: 

I have given it some thought and based on the answers given previously, i have reached certain conclusions:

A preliminary knowledge about what is possible and what are the constraints while designing on a given platform is mandatory. This means that the graphics designer should be aware of the following:

  • The basic design guidelines on that platform
  • The standard UI toolkit / widgets provided on that platform (for ex: textboxes, drop-down lists, etc)
  • What is not possible (or is too cumbersome) on a given platform (for ex: creating translucent modal dialogs while fading out the background in Eclipse)

This amount of knowledge might not require the designer to dabble in programming.

The second level is where the designer is making an attempt to either create new widgets or to (knowingly) go against the set standards for a given platform. For instance, if the design includes graphs or the need to depict special relationships or a unique combination of text, graphics and images that is not implicitly supported by any standard toolsets. In this case, the designer should be aware of the technical possibilities and the limits of a given platform. In this case, i would argue that the designer should be able to write a little code and try out a few things to ascertain what might be within the realms of possibility.

Anirudh