Live data from Hacker News

Don’t design like a programmer

uxdesignedge.com

11–20 of 34 posts

Re: Don’t design like a programmer

#11
One of my clients explained this phenomenon perfectly to me once, and it's an explanation that I've yet to see anywhere else.

Programmers are accustomed to thinking in abstracts: data structures, pointers, memory addressing, program logic, pipes, files, and so on are all abstract concepts. Although you can describe them using strained metaphors for the real world, they don't really represent real-world things.

But most people don't think that way; they think in terms of the tangible. That's part of why the concept of the computer "desktop" is so confusing for novice users, or why the idea of layering in a user interface is nearly not navigable for new users.

It had never occurred to me that other people didn't think in abstracts. I grew up programming; I learned my first programming language while I was also learning my first human language.

Re: Don’t design like a programmer

#13
I guess bad design is an habit that we programmers carry from school. I don't know what about American education, but in my college proffesors use to ask for functionality not for good designed interfaces, and that habit is difficult to quit, users don't know anything about design either, so you show your final product, it works, the system does what it should, and they are happy they won't tell you, hey! this form has too many textboxes, or hey! why are you designing like a programmer?

Re: Don’t design like a programmer

#15
Seems like a better way to put it is: Design first, then develop. Which, in my experience, is a good idea whether you are responsible for the design or not.

If you have no data structures or other programming limitations to work with, you can focus on perfecting the interface and then worry about making it happen. If you already have the program written, it is natural to want to take the easy way out and just slap up a form that matches the code.

An aside, being someone who enjoys playing both roles, I find the design phase goes a long way to improving the structure of my application because I have time to get a better understanding of the requirements, program flow, etc. Every element I draw automatically turns into code in my head, thinking about how it is going to be implemented as best as possible. The program is already written long before I ever touch a text editor.

Furthermore, programming is design. A programmer's job is to write code that is not only functional, but code that is visually appealing. Visual appeal is the factor that makes code maintainable or not. It is basic human nature to want to work on pretty code and reject ugly code. As such, it is wrong to say programmers do not have artistic talent. They exercise it each and every day. The only thing many programmers lack is practise in designing visual interfaces.

Given all of that, I find it very unfortunate that we try to separate the design and development jobs. I understand the business appeal of trying to do the job twice as quickly with two people, but from a fundamental point of view, the separation only goes to hinder the quality of our software, in my opinion.

Re: Don’t design like a programmer

#18
Thanks for linking to my article. Sorry about the "Error establishing a database connection," but there's been a lot of traffic today. Please try back later if you didn't get through.

(And, no I didn't write that error message. :))

Re: Don’t design like a programmer

#19
Good analysis, but…

I think the main problem is not that programmers are programmers… but that they are not designers. I think anyone who is not a designer can make similar mistakes. Ask someone (who is not a programmer and not a designer) to design a interface and you could probably find many of the same problems.

So basically: people who are not designers make mistakes when doing design. Who would have thought?

Re: Don’t design like a programmer

#20
post #9

I'm not quite this bad, but here's one of the things that happens to me: Very early during the programming process, I'll create a debugging console -- an arbitrary, ugly GUI that lets me control the values in the data structure. For testing. Weeks later, when I want to design an intuitive interface, that debugging console seems very intuitive to me. It's hard to ask, "Where would a user who wants to do X look?" since…

I've been there but found that having a debugging console (or generally, using any UI over and over to repro some steps while you're developing) ends up being a huge time sink. It's often much more sensible to invest time into building a unit test to guide your development instead. As a result, now I don't create much debugging UI but try to unit test, which gives me more time/inspiration to build actual UI.

(Borrowing words from the article) Warning sign: During the development, dozens of times, I have to go through step 1 in my UI, select a person, go to step 2, enter an address, select a state, go to step 3, and so on.

Post reply on HN