Edit: Since several of the latest comments seem to be saying similar things about programmers not "getting" design, I think one thing that may come as a bit of a revelation is that design starts with a hierarchy of information and there are certain rules for how that information should be presented. There is an artistic aspect to compelling design, but when it comes to things like wireframes and UX modelling, your average programmer probably has more design skills than they realise.
I'd tend to agree with this assessment. I've never been a designer, from scratch...but once I have a design to work within I don't have any issues with making UI/UX decisions that keep things smooth for people.
This is probably one of the reasons that Twitter Bootstrap has done so well for people like me.
You ask me to worry about visual recognition, spacing, minimizing number of steps, 80% interfaces, etc and I'll have no issues.
You ask me to come up with a color scheme, tones, gradients, proper fonts, line spacing, negative space, etc and I'll curl up in the fetal position.
Good question, I think everybody should learn to design. Because everybody is communicating.
It's not about being a master in PS, Sketch or Illustrator. It's more about understanding basic principles of design, colors and composition.
With everybody I mean literally everybody. The CFO who makes his spreadsheet better, properly arranged, using sufficient white space, complementary colors, etc. The CEO who can do proper presentations himself without calling a freelance designer. The CTO who can quickly sketch a neat flow diagram for his backend code.
You don't have to be Jony Ive but some design skills help everyone in communicating better.
No. But they should start to appreciate it, and the people who create it, more than they do.
All too often, it appears that programmers see design as a lipstick-on-a-pig kind of process, i. e. a replaceable skin that possibly improves the color scheme.
My favorite example is the guy who bragged that he saved xxx kb of page weight by replacing the fonts on nodejs.com (or rubygems? one of these repositories) with Arial, because "all sans-serif fonts are the same anyway".
I'd also point to the frequent complaints about medium.com. It doesn't even matter if that design is any good – it clearly succeeds at what it's supposed to do.
The most obvious path to a better appreciation of the meaning and methods of good design is probably Edward Tufte's books[0], which is one of the "crossover" works that appeal to both designers and the more scientific-minded crowd.
I believe the answer to this question is clearly a "yes", if you are building UIs (web or otherwise).
As a 10+ year UI developer I have found that my work is often judged by its design as much as the quality of the code, and that I will not be successful unless good design is a part of the work, and I cannot always depend on having a solid dedicated designer contributing to the project.
Quality of code is design [1]. Eg, copy pasting is not only a maintenance nightmare for other users of the code but also breaks Exupery's perfection principle.
[1] Not implying that interaction and appearance aren't also design, but rather that code and SCSS rules are designed too.
Users also care if something works, and code quality is part of that - eg, imagine what hits users when the same bug is copy pasted into 100 slight variations of some code rather than a single instance.
I think a problem is lack of respect for the fact that a huge part of design is WORK. It takes time and effort. Not innate talent or magic (though those help).
A developer thinks "I need another 5 values from a user, so I'll put another 5 text boxes on end of the form. Done! Wait, this looks like shit, I must not be a good designer."
No! It's shit because you didn't do any design work! It's not that you didn't finish a bad design, it's that you haven't even started any design.
Once I learned some basic colour theory and applied it my work, customers found my products a lot more appealing. I now realise the right colour scheme can control minds - something I wish I'd realized years ago.
I have never found comparison to peers' skill levels to be an accurate judge of my own capabilities. If I did, I never would have become a programmer. I started my first job programming without any computer science education. The average developer at the company had been programming for years and likely had formal education in the topic. My education was business, choosing quantitative classes when I could. My code was awful, my knowledge of data structures and algorithms non-existent, and my skill far below that of my peers. Yet, persistence and a determination to become proficient have made me into a "talented" programmer.
To anyone learning to acquire a new skill, especially one that is very different from the ones you already know, don't get discouraged. The beginning is hard and long. The breadth of the field will feel overwhelming, until you learn the lay of the land. Don't compare yourself against established individuals. Don't ask "why is it so easy for him/her and so hard for me?" Just focus on improvement, only on improvement. Skills are learned, not something innate like "height". That means you can learn them if you are willing to pay the price in humility, effort, and time.
While I agree that design is important, and perhaps a good thing to learn about, as a well-rounded human being, the author left me unconvinced of his thesis: "programmers should learn design." It's important? So is physics. Computers don't work without physics. It's loads of fun? So is physics. You'll get better at it the more you try? So is... basically anything. You'll recognize and appreciate the work of talented designers? And by learning physics, I'll recognize and appreciate the work of talented physicists!
Those same arguments could be used to persuade anyone to learn anything.
For my undergrad degree in engineering (and, to a lesser extent, in grad school) we had to learn to work the user experience process -- interviewing users, figuring out what drives them, how they interact with products, what their needs are, how to run product tests with users, etc. Why? Because we might actually have to do it some day. Not so much with visual design. Visual design courses were offered, but not compulsory.
While learning visual design (or UX, or product design, or whatever) might make you more useful in the workplace, and able to wear more hats, I'm still not convinced it will make you a better _programmer_.
To my understanding, the point is that it will make you more aware of your limitations, which (again, in my opinion) will make you a better programmer. And I don't think your comparison to physics is apt: your customer doesn't see or care about physics (unless you're designing hardware, in which case you already know physics), and you don't work with physicists. Your costumer _does_ see the visual design and UX of whatever you're building (everything has at least UX) and you (potentially) work with visual designers.
I'm an engineer turned designer turned product manager (and sometimes backwards). Keeping yourself open to learning new skills is a growth opportunity that's silly to shut down in general. So the real question is given your life goals, would the set of skills that generally constitute design be valuable ones learn. Specifically, here's some common goals for programmers and how design helps them in it:
- Entrepreneurship: Design is a lot of understanding human psychology. This helps you communicate in talking, documents, better pitch decks, recruiting effectively
- Senior IC/Techical Leader: You can write more clearly, make great presentations that effectively train others, get buy-in more efficiently from management, be blocked less often by designers.
- Engineering Management: So much people work here. Empathizing, creating effective feedback loops with your reports and peers (design teaches you a ton about the value of feedback loops and how to create them), presentations, effective writing.
- Individual Hyperproductive Programming: You learn to understand yourself as a user better. I found that after becoming a designer, I optimized my editor to create the best possible user experience for me, wrote better tests, etc. Most good programmers implicitly do this, but having the vocabulary for how to think of yourself as a user, collect feedback, understand the visual elements that drive your interaction with your tools is massively helpful.
- Product Management: Docs, slides and the usual. Importantly, leading teams of designers and engineers is much easier if you understand their craft well.
The code skills training as a designer made me much better at was feedback loops, understanding human psychology, visual and auditory cues to trigger certain reactions, hierarchy and organization, and many more. It's totally possible you learn these from different experiences in life, but there's lots of value in these skills for most goals programmers have.
As someone with a decade+ long background in digital/product design and a 1 year fresh stint in full stack development, the answer from me is a resounding yes.
I can create apps that have perfect cohesion between design and logic without specs. I can skip the PSD entirely and develop my layouts and styles iteratively as I code. Whenever there are gaps in design decisions or stylesheet errors, I can smooth them out as I'm building the feature for the first time.
Between the UX and the database models, I know how it should work and how it must work.
Before the web programmers often did designer because the whole idea of designers wasn't really so clear cut. Back in the 80's I never met anyone who just designed UI, they were also the developers of the UI as well (I did this for 10 years). Once the web appeared and UIs became more important to marketing, designers with art backgrounds took over. Eventually other specialties appeared to consider the UX, usability etc, which was not art. But in the beginning its was mostly programmers all the way down.
In the context of startups you'll typically want the team to cover programming, business and design. I believe mastering 2 out of those 3 makes you much more valuable in the early stages of a company. I'm not sure why, but typically you'll see founders combine programming & business or design & business. Design & programming is a very rare combination.
In the limit, design is a complete definition of how a thing (product, service, picture, story) should be- with due consideration given to all concerns (technical, practical, emotional, environmental, supernatural, whatever).
If you're solving problems, you're already designing solutions. Now at the moment, (for the programmers among us) when you're solving a problem you may only be considering some subset of the relevant concerns.
Therefore, the very specific question of should you learn visual design can be reduced to: do you want your solutions to consider a larger subset of relevant concerns and be a better approximation of the best possible solution (product, pitch, voodoo doll, etc).
No, but they also shouldn't be expected to produce work that looks well designed. It should be a common understanding that it takes multiple disciplines coming together to build a good product.
I have a degree in Graphic Design but a career in Front-End Web Development, I'm constantly asked to make design decisions (by people that may not even know my background). I feel I'm also able to see the bigger picture when I'm approaching a development problem, and I try to push modular development by asking the designers for modular designs.
All in all it's been incredibly useful to, at the very least, be able to speak design language when interfacing with the team.
I'm a backend developer that studies ux because I do have to jump into the front end sometimes and take pride when something flows better because I know how frustrating bad sites can be. I also am a blender hobbyists with horrible 3D skills and I don't know why I like following along tutorials as at the end of the day 3D design isn't useful to my current job but I enjoy it.
WHat is the programmer coding? if it's backend algorithm heavy stuff, visual design doesn't really translate to that type of work. If it's anything having to do with front-end, the programmer can really compliment his/her programming skills with some visual design acumen
Programming is also visual design. The first thing that stands out when looking at a block of code is the contrasting outline made between the characters and the spacing, and first impressions will be made based on the design merit of that appearance.
This is quite intuitive if you take it to the logical extreme. If someone wrote a program that jammed all of the characters together into one long continuous block of text, you would immediately get negative feelings about the work, even without reading a single character.
The same holds true even when some care went into the visual design of the code. A codebase that does not present a good visual design will feel difficult to work on, even if it is well written from a technical standpoint.
"It suggests that the quest for knowledge includes failure, and that just because one person may know less than others they should not be afraid to ask rather than pretend they already know. In many cases multiple people may not know but are too afraid to ask the "stupid question"; the one who asks the question may in fact be doing a service to those around them" [0]
I believe that both can be learned. People may have natural affinities for one or the other, but in my experience, consistent deliberative practice always pays off. It will also involve struggling to push through plateaus wherein everything seems hopeless.
edit: And since both are highly creative activities, it seems reasonable to me that they would reinforce each other somewhat in terms of total mental ability to think deeply about the problem at hand!
I'm not sure they're uncorrelated, visual design is also about logic and consequences of structure.
In essence, it should be deduced from the end result, for example "the user wants to do X, so what does he need to do it, and what's the most efficient way to present it", similar to how you'd think about designing an API that other developers will use.
If not program, getting a better idea of the constraints of the final application / website would be a start.
For example, learning that web fonts render differently in each browser (so, even if the desktop font looks great in Photoshop, it might not be readable enough in the real application), or the concept of fallback fonts, could be an eye opener for more traditional designers that only deal with static mockups.
It's short and to the point, so it won't take long to read, yet it covers all the basics of design to just the right level for the average developer.
"Design for Hackers" by David Kadavy is also quite popular, but IMO it just takes longer to say the same things.
Amazon links for the lazy:
https://www.amazon.co.uk/Non-Designers-Design-Book-Robin-Wil...
https://www.amazon.com/Non-Designers-Design-Book-4th/dp/0133...
Edit: Since several of the latest comments seem to be saying similar things about programmers not "getting" design, I think one thing that may come as a bit of a revelation is that design starts with a hierarchy of information and there are certain rules for how that information should be presented. There is an artistic aspect to compelling design, but when it comes to things like wireframes and UX modelling, your average programmer probably has more design skills than they realise.