The Crossover: Designers and Programmers
Monday May 9, 2005 / 24 CommentsI’m fascinated by the increasing frequency with which designers are becoming interested in programming. It seems that every day I’ll run across another designer who wants to write code. Now, I’m not talking about hacking a couple spots of code here and there. I’m talking about designers who really want to write code and build something.
A Little Uncomfortable
Having gone to school for computer science, and knowing how much there is to programming, it makes me a little uncomfortable when a designer says they are going to write code. Algorithms, data structures, object oriented programming, classes, abstract classes, inheritance, functions, global variables, etc. There’s a lot to understand in order to do it right. For you designers out there, imagine if I told you that your engineers (the ones with no visual design background whatsoever) will be handling the visual design on your next project. You’d probably be a little nervous too. I’m not saying that anybody is or isn’t capable of another task based on their usual role. I’m simply pointing out that your initial reaction to that kind of situation probably isn’t excitement.
Left Brain and Right Brain Harmony
What interests me most about this situation is that designing and programming are traditionally thought to involve two completely different and conflicting sides of the brain. If you’ve ever seen a hardcore engineer trying to discuss an idea with someone equally extreme in design related skills and creativity, you would probably agree. Programming is very logical and precise. Design is more creative and subjective. How then could so many people with supposedly conflicting thought processes be so attracted to the opposite side of the fence? I can think of a couple of reasons.
The Ideas
It’s much easier for designers to dream up ideas because they aren’t limited by the constraints. Engineers on the other hand are, more often than not, focused on what they can do inside of the box. Being a technically grounded person, and having worked with numerous engineers, I feel our weakness lies in the quickness with which we say things cannot be done. Keith wrote a great post about technological excuses, and it really rang true for the most part.
However, I don’t believe it’s born of laziness or other reasons so much as the fact that engineers think in terms of the afore-mentioned constraints. An engineer’s world is based on concrete rules and boundaries. Oftentimes, those boundaries are very difficult to see past without a little nudging. This is where the creative vision comes into play. A designer who wants to see his or her idea executed can be the most unreasonably demanding person in the world. I salute them for that, but I also would like them to understand the typical engineer’s thought process. Don’t assume they are being lazy or ignorant. While that may be the case in some situations, they often just think in terms of limitations and constraints first. It’s not intentional, that’s just how they work. Understanding this difference can help to bridge the communication gap and hopefully circumvent any potential frustration.
Gateway Languages & Hacking
Why are designers so confident that they can program? HTML & CSS of course. While HTML & CSS are merely static markup languages, they make the idea of dynamic programming much less daunting. Then of course, it’s incredibly easy for anyone who can write HTML to download some JavaScript or a PHP script and hack a few lines to make it work for them. How much harder would it now be to write your own code from scratch? Again, I’m not defending the logic, but I do understand why designers and creative folks are no longer intimidated by programming languages.
The Evolution of Programming
The final reason I see is that the barrier to entry for programming has dropped dramatically. For instance, in the very early days, programming required extremely expensive equipment and punch cards which were then inserted into machines to tell them what to do. That looks easy right? Then, if you fast forward a bit, computers advanced to assembly language. Mmmm. Doesn’t that look like fun.
Programming languages then took some twists and turns and advanced confidently to where we are today. Mind you, somebody out there still has to understand machine code and the more complex stuff, but they’ve abstracted it to the point that almost anybody can now pick up a book and learn a programming language in a weekend.
Now, they probably won’t be writing the best possible code, or the most scalable applications, but they can develop applications. Add to this, frameworks like Rails, and you now have a significantly lower barrier to entry.
The Merging Point
With the advent of the web and the corresponding intersection of design and programming, the two disciplines have become increasingly intertwined. It used to be that design had nothing at all to do with programming. Anybody who has ever used a client-server application can testify to that.
With the web though, designers are now interacting with programmers on previously unheard of levels. And thanks to the gateway languages, learning how to program doesn’t seem like all that difficult of a challenge anymore. Of course, an engineer might say the same thing about design. Both sides are clearly way off in that situation, but we won’t discuss the qualifications of either side as everybody has their own unique talents.
Summary
While I don’t necessarily feel that either side is capable of doing the other sides job nearly as well, I do think it’s amazing how the two very distinct and arguably polar opposite disciplines are starting to overlap in some common ground. I’m very interested to see how far the merger goes.
Featured Stuff - Resources: Wireframes & Page Description Diagrames
Omnigraffle and Visio versions of the wireframe templates and stencils I use on all of my projects. There’s even a few examples included for good measure. More about Wireframe & Page Description Diagram Stencils and Templates
I’m also from a computer science background (just got my degree in March), and I’m not sure if design and programming are as mutually exclusive as you imply. I’ve always had an interest in creative outlets (mostly writing) as well as technical ones, and I think they aren’t that design and programming are both creative. In fact, I had a professor outright say (in an assembly language class, no less) that programming is a creative act. In this interview , Richard Gabriel (who has a doctorate in computer science and an MFA in poetry) also comes to a similar conclusion when comparing poetry and programming.
Although you stated that designers are not limited by constraints, I’d argue that they are, and that’s where common ground already exists between programming and design. This isn’t necessarily a bad thing, since creativity is born in constraints. Design, in essence, is trying to solve a problem given certain restrictions – if there weren’t constraints, there would be no need for design because we’d always make things the exact same way. The specific constraints in either realm vary, naturally, but when it comes down to it, both programmers and designers are required to think outside the box.
That isn’t to say that I’m a stellar visual designer, nor expect to be one any time soon (alas, my brother got most of those genes). But the difference seems to be based on the type of creativity, rather than the presence or absence of it. aliotsy
Aliotsy – You’re very correct. It is a matter of different types of creativity. I was by no means trying to say that one group is more or less creative than the other.
They just have different paths to creativity, and in my experience, the visual design oriented are more blue sky focused while engineers are more practically focused.
As for creativity being born in constraints. You are right there as well. I feel that those constraints are a little more immediately prevalent to an engineer than they would be to a designer. Garrett
I too, come from a CSc background. Over the last few years, becoming more passionate about websites and web development, I am finding myself drifting.
A designer turned programmer is shocking indeed, if anything just for the simple fact that it sounds like an artist who changed to a career in engineering (we are computer engineers, after all). Sounds crazy.
I don’t think anybody can “turn into” something else without education. As much as being a designer is very interesting to me, the first avenue to pursue such a career change would be education. Without taking years of design courses, calling oneself a designer is about as silly as George Castanza calling himself an Architect. Same goes for any profession, in my structured, right-brained mind.
I don’t see how a designer could make a decent programmer without a few good years of computer theory and object-oriented beat down under their belt. Then again, I am biased because I went through the CSc program and would like to think in doing so I am a better programmer than one who has not. Justin Perkins
Great post, Garrett!
Certainly both designers and programmers must be creative. They both face constraints. But in my experience, the only designers that have been more “blue sky” than the programmers have been bad designers. And the only programmers that have been more grounded than the designers were typically bad programmers.
I think a great deal of creativity, resourcefulness, and big-picture vision are required for both. The designers (or programmers) who abandon the goals or vision of a project to do something “out there” tend to be unsuccessful or at least difficult to work with.
To me, the crossover between programmers and designers (it happens both ways) is not surprising—especially when we are talking about the web. Here on the web, everything is connected and it’s important to be well-rounded. John Zeratsky
CSS is a wonderful gateway language because it asks you to think it terms of classes and sub-classes to order to optimize file size.
Combine that with some JS and bam! interactive UI! dru
“There are two kinds of people in the world, those who believe there are two kinds of people in the world and those who don’t.”
—Robert Benchley
Whenever anyone divides the world into two kinds of people, I’m not sure where I fit in. I’ve probably used the phrases “I’m not really a programmer, but…” and “I’m not really a designer, but…” a few times each in the last year or so.
Nonetheless, I can create a simple site design that works, and I’ve programmed a bunch of sites from scratch.
I guess I’m just saying that I consider it more of a continuum than a dichotomy—I’d put myself at about the 60% programmer / 40% designer mark, and I’m sure there are people at all points in the spectrum.
So maybe the distance from one side to the other is shorter for some people than for others… Michael Moncur
I’m not so sure that there is such a great divide between the two types of creativity. I’m a designer (started off studying art) who ended up going to university and earning a Bachelor of Computer Science then took more formal art training and am back as a web/graphic designer.
I often found when I was in school that my creative skills came in very handy when visualizing solutions to programming problems. I guess it’s all in what you are taught/what you learn, and how easily you learn new things. Jeff Smith
I have been reading this blog regularly for the past two weeks and I must say you bring up some very interesting points.
This is my first comment, but this post really got me thinking.
I guess I’m part of the generation that “grew up” (I’m 19) with them, so I have never really looked at programming or design as seperate disciplines because I never had any formal training, everything I know is self-taught. I didn’t have the money to pay someone to develop my CGI scripts in 1999 and so I did the design and the programming, there was no choice, I had no team to help me.
Today, while I use pre-made content management systems, I have written custom site management tools for clients – integrated right into the design I made them. I never thought I was doing anything different than anyone else until this post. Ben Bleikamp
I have found that programming and design disciplines meet in very significant ways in the field of interface design. I studied multimedia at my local technical college, with an eye on webpage design, but found myself drawn to programming. As a result, my best work is done when I am able to fuse both schools of thought; matching flexible, elegant code with clear, concise designs to drive a solid user experience.
For me, this is where the strange hybrid of programmer/designer fits into the web. And as an added bonus I am often the communication bridge between hardcore systems programmers and non-technical designers. Tim Uruski
Not much fun when the shoe is on the other foot, eh? A Designer
I’m a qualified multimedia designer (cd,3d,web,audio/visual,etc.). I have been working at the same company for the past 3,5 yrs (my first job) and have found myself ‘growing’ in more than one ways or directions. I have taught myself Javascript, VBScript, ASP, and Flash actionscript. I have had some introduction at college to one or two of these but never straight into it.
Today I find myself at a place which I think is awesome, and that’s learning / studying for my MCAD / MCSD (Microsoft Application Developer / Microsoft Solutions Developer).NET. Fazz
I have to say I’m a little surprised at the number of people who have formally explored both sides of the fence.
Honestly, I’d absolutely love for more visually-orented people to go to school for computer science or related disciplines. There can never be too many engineers that care about good interfaces. Garrett
I have to say that I’m not suprised that so many people like to engineer and/or design. One is a vocation, the other an avocation. Or both!
What concerns me about any type of visual design is the amount of engineering that is visible to the people using the product. Thomas Edison is a brilliant man and took every opportunity to find the most impressive engineering solution to problems. It wasn’t until someone else put a different spin (pun intended) on his inventions that they finally became acceptable to the public.
Perhaps the designers that are getting into “engineering” are wanting more control over their designs? Pickiness is an admirable trait in either profession and maybe that’s the draw?
But I think ultimately, engineering is about trees, whereas designing is about the forest. Greg
I was really into CS in high school, and started out as a CS major in college, and then switched over to art my sophomore year. I learned to hate coding in college, but I guess with that background I’ve always been very comfortable with web design, and that’s where most of my work has been.
I did continue to dabble a bit in CS after switching to art (as well as business and marketing and a few other auxillary things) and it seemed ironic at the time that myself and another art student were by far the best programmers in the class.
Now I find myself getting back into programming, just not C++ so much. Now I’m reading up on PHP, advanced CSS, and more web-focused languages. Ruby on Rails looks really interesting too, and I’m planning to hit that one next.
I think one of the biggest drives is simply that in the world of web design, there’s more than just design, and we don’t always have a programmer handy. I like to be confident in all areas that I am selling to clients, so if there’s something more than design that needs to be done, I do it, and reserve hiring a full on programmer for very large projects. So I think the connection between designers and programmers is often simply a case of needing both aspects to complete a package. Whether it’s a website, or a desktop app, both need varying degrees of both code and design to be successful, and often the complete package is the job of a single person. sxates
I think one thing you may want to look at is the medium. To be a good Web designer you need to have a decent left/right brain ratio to begin with. Speaking as someone who became a designer through the Web, I’ve been hacking with gateway languages (a great point was made there) since I started. So, after 10 years, I’m farily comfortable mucking around with code, even if I don’t have the formal background. Keith
Garrett,
Just a random question. When you write up your entry, do you use
em@s while you're writing, or do you add emphases afterwards? I noticed that one block of @emin this entry crossed over a period into part of the next sentence, as if you’d taken a highlighter and gone through after writing the paragraph. I thought it was pretty neat. aliotsyAliotsy – I usually add emphasis at the end. I reread the entry a couple of times, editing and trimming, then I go through and pick out points that I feel are important. Garrett
I was educated in design, and picked up programming as a hobby. I know that the organization I work for appreciates my skill set because they cannot afford both a designer and programmer. Nathan Colgate
I think it’s possible to be equal parts programmer and designer I know I certainly am. I learned my first programming language (C++) right at the same time that I was learning about design, and I never felt that one was easier than the other. There can be creativity in code and logic in design, so the two disciplines complement each other nicely. Sometimes when I’m stuck on a particularly difficult coding problem I’ll switch to designing something, which usually helps me clear my mind and approach the problem from a different angle. Likewise, if I’m having designer’s block, I’ll go and write some code for a few hours to get my creative juices flowing again.
Maybe I’m not exactly the norm, but I don’t see why there has to be such a dichotomy between designing and programming. Sara
Sarah – I disagree with you quite strongly, but that’s not to say you can’t have your own opinion :)
As I see it, there’s a dichotomy, but it’s not about whether you’re creative or whether prefer contraints over freedom. Fundamentally, it’s about your mental model of the world.
Anyone who’s read “Zen and the art of motorcycle maintenance” will be aware of the difference between classical and romantic thinking. Classical thinking is all about how things work – the cogs on the inside that comprise the system. Romantic thinking, on the other hand.
I think that the difference is not so much between design and programming, at is between a designer and a programmer – the person, not the activity. A designer starts from how something looks and works inwards adding whatever cogs are needed to support that. A programmer starts from a cog, a chunk of functionality, and drapes a skin over that to act as the interface. Both types of people can potentially do good jobs of both activities, but they’ll always start from their “native” area and work out to the “foreign”.
It’s my opinion that you can’t have high degrees of both thinking in a single person – they’re mutually exclusive. For this reason, I’m against the move to a “jack of all trades”, desginer/programmer combo person. Instead, I prefer to investigate how designers and programmers can work together effectively, without treading on each other’s toes.
Then again, maybe I’m just an incurable reductionist. ;-) Sam
I always thought that we will come to a point where knowing both worlds will be an absolute necessity. Like an architect must know his art and his engineering. You can’t be a great artist, but not to know statics or can’t be a great engineer with no sense of style. Same will happen with web design. Soon you won’t be able to build anything original unless you dig into the code and can’t execute your excellent coding ideas without having a clue about design.
Actually I don’t think programming and graphic design is that far apart at all. Programming and graphics require the same design thinking. Programming is the best example of pure design, where you create something out of nothing. Graphic design starts with a blank page as well. You need to apply the same creative discipline in both subjects to create something meaningful. The only difference is the playground and the rules of the game. ivan raszl
Pick up the book “The Nine Ways of Working” by Michael Goldberg. It’s about a behavioral/personality assessment tool called the Enneagram. What’s cool about the Enneagram is that it realizes that, depending on the situation, we have different styles, in work situations and personal ones.
The reason I mention this: Look at Type #7, the Visionary (my type). The base type is, as you can imagine, well-suited to big-picture thinking. However, under stress, the #7 acts like a #1, who is very detail-oriented. So, with a delivery deadline from a client (and a big paycheck), could a designer code up some ASP, PHP or JavaScript? You betcha.
Disclaimer: I do both. My background is programming, but I’ve also been involved in product design. I’ll admit I’m very process-driven as a designer – I wrote a pair of articles for Inventor’s Digest on the topic of efficient innovation processes. I’m a big fan of Lateral Thinking, and mind mapping – but programming has paid the bills over the years. Eric Sohn
I somewhat agree with some of the comments, but wanted to raise another point of view to discussion… There is a huge productivity difference between an excellent programmer and a good programmer, and also between a good programmer and a mediocre programmer.
Excellent programmers use coding as their natural way of describing things. The problems just automagically convert themselves to software architectures that solve those problems and most of the future ones, too. These people are invaluable when you have to write an industry-strength software that will be used for several years to come.
If you think that you’re a programmer, consider asking yourself the following question: Do you know a programming language (or a few) or do you know how to program? If you just know languages, your ability to program is really limited. But if you know how to program, any language will do (as long as it’s Turing complete :) Janne
Eric – I’m always interested in a new book, I’ll have to check that out. Thanks.
Janne – Very good way of putting it. There is a difference between knowing a language and knowing how to program. In my 4 years of college, only about 10% of my computer science course work was related to a programming language. The rest of the work was learning the theory and ideas at the root of programming. So knowing a language really is only a very small piece of programming. Garrett
Comments are closed for this entry.