Ask HN: Is it worth a back-end developer's time to get into web-design and HTML/CSS
Is it worth investing my time to learn web design and HTML/CSS, or should I source these and focus on other parts of the app?
I'm bootstrapping a site right now, and definitely feel a bit handicapped not being able to create the HTML/CSS and creatives to tie it in with the back end. I figured being able to create sites from start to finish would be helpful for both possible freelancing gigs and bootstrapping sites in the future too.
An option I've thought of was to use free resources for the creatives, and use free HTML/CSS templates, and go from there.
The developer side of me is saying to learn it right from the beginning - start looking into web design tutorials, mainly ones from scratch (PSD/pen and paper to static HTML/CSS).
The business side of me is leaning towards sourcing the web design and HTML/CSS, or partnering up with a web designer (have yet to find one but am familiar with the sites that do that) and trade services or form a team.
I'm sure there are alot of you guys that are jack-of-all-trades and others that specialize in either the front-end or back-end of web development, that have questioned this too. Thoughts?
41 comments
[ 3.3 ms ] story [ 130 ms ] threadHowever, you time is best spent just learning CSS and web page layouts. Web design and graphic design are not the same thing. You can learn to layout web pages with limited artistic talents. When a site may need heavier graphic elements, you're better off going with an expert. Knowing your strengths and weaknesses is very important.
The wonderful thing about the web is that its very easy to stand on the shoulders of giants. With layouts and usability, you don't need to do your own work and testing. Take a look at websites with great layouts and morph their ideas into your own. Read design and usability blogs and try to determine what will be best for you.
Best of luck!
Very often I'll be given a layout which breaks once I started adding code to it, a good html/css understanding will let you fix issues like this without having to pass it back to a designer.
I can think of many times where design skill has paid off, namely a time when our sole designer quit leaving me to fill in for him, but I've found the knowledge to be extremely useful even if I only need it occasionally.
On the other hand, graphic designs is a different story. Developing a good artistic sense will take time and practice. If you plan on developing entire websites on your own, why not spend a little time to graphics design to make things look prettier? However, you don't plan on spending any time on this, then find a good designer :)
I would highly recommend checking out a CHI meeting (Computer-Human Interface a.k.a. UX/UXD). I guarantee you will learn a lot by meeting and listening to designers lecture other designers.
http://www.sigchi.org/local-sigs/
I would also add JavaScript and Ajax to the necessary skill set. If you are a freelancer or job hunting, JS, HTML, and CSS increase the number of gigs that you can tackle. Even when the backend is your primary responsibility, you will often be called upon to do a quick fix in the other areas.
Farming out design is good advice, but often the HTML and CSS is not really usable, so you will need to know enough to make it work on your site.
HTML and CSS are skills that are worth your /time/. Forget the money. You can improve your /own/ life with HTML and CSS.
The more you know, the more powerful you are!
Have you ever been approached by someone from the front end who said, "Man, it's hard to build this page the way I want it because the backend doesn't do XYZ?" and you look at them like, "figure it out!"
You only do that because you can't relate to them. You don't know how hard it is to do a three column layout in CSS so you blow them off and think, "It's been done before go do it."
But that's not the right approach. The right approach is to understand /why/ it's hard from the front-end so you can make your back-end more suitable to the front.
Building complex systems is a conversation between layers. Data comes from the database, goes through the "backend" then gets displayed. At each of these levels, the more one knows about the other, the easier the dialog between the layers.
So, OF COURSE it is worth a back-end developer's time to learn more about the front-end. It's also worth a front-end developers time to learn more about the backend.
YES.
The right approach is to understand /why/ it's hard from the front-end so you can make your back-end more suitable to the front.
I still don't know how to answer when people ask if I am a front-end or a back-end developer. I just don't get it. I used to think I could claim to be a back-end guy because I do know SQL, but I don't know how to make pretty mockups in Photoshop. But now it's apparent that knowing HTML and CSS and JS makes me a "front-end" developer in many people's eyes, so I've gone back to not knowing how to answer. It's like asking whether I walk primarily with my right leg or my left.
I think the dichotomy broke completely when Ajax came on the scene. In earlier times it was possible to pretend that the division between client-side code and server-side code was aligned with the division between the presentation layer and the logic and persistence layers of your app. That alignment was never very clean (there are limits to what you can rearrange with CSS alone, and while JS can theoretically rearrange everything the result is liable to be slow and fragile and terrifying to behold, and obviously the needs of the interface designer need to drive the optimization of the back-end data store, etc.), but you could still pretend. The ever-increasing role of client-side JS makes that view of the world less tenable. Now some logic lives on the client as well as on the server, and Google Gears threatens to give the client persistent storage as well, and the interaction between client and server can potentially have a lot more moving parts, and a developer gains a big advantage by having a basic understanding of the entire stack.
There is a huge body of information about which version's of which browsers work with which feature. This is one of those cases where specialization pays huge dividends and working with someone who keeps up with this field is really useful. Think of it like accounting it's useful to quickly learn the fundamentals, but knowing how to audit a fortune 500 company is overkill.
PS: The problem with learning HTML / CSS / JavaScript is it's got a short shelf life. You can learn C and come back to it in 20 years but GUI side of things keeps evolving so unless you constantly keep up you are basically starting over when you come back in 5 years.
If you're working for other people be a specialist. If you're working for yourself you have to be a generalist. Very difficult to effectively manage and coordinate something you don't really understand.
Think of it this way - html by itself, even without css, is like the skeleton of a body. The programming (backend & javascript) is like the muscles that move stuff around and the css & visual design is the skin, makeup and clothes that define the style. It's a bit simplistic and ignores more advanced interaction design that can help define the skeleton in the first place, but it's a good shorthand for how designers and programmers make stuff, especially in early stages.
So that's a hell yes to learning html/css. Learning web design means more than learning simply the toolkit to create those designs, it's also about developing an eye for what makes an attractive or usable interface, so learning whatever you can there should probably be a hobby that teaches you to appreciate good work. Try cruising the css gallery sites or smashingmagazine for examples.
HTML/CSS isn't hard. And you need to consider if what you're doing will work on multiple browsers, including mobiles. Knowledge about this will mean more visitors, and thus more money.
Now, creative... that's another question. A good design, in the strict aesthetics sense of the word, is very hard. In fact, for some people, it's a whole career :)
Also, while I don't recommend going for the aesthetics route, there's much more involved in webdesign. SEO, usability, accessibility. You should be able to take a pretty PSD from a designer, and develop with ul/li for menus instead of using Flash, for example.
Business wise, it is not good. But for a better understanding of the whole system. I think it is worthy. It is especially good for DIY projects for bootstrap and experiments.
If you're working on any code that's within one tier of the HTML/CSS, you should have a basic understanding of the HTML/CSS.
That general rule applies to most things. The more understanding you have of adjacent concerns, the better you will be at your own task.
If you are like the average geek, you can spend years reading many books on good design and you still will only create ugly, flat, boring sites. Just be aware of your limitations.
One thing that definitely can help you is to screen shot or bookmark every website that you think that is simple and nice. From those example websites, you can start designing your website.
I'm a backend guy who runs an IT department for a top 100 e-commerce site in my day job. Knowing HTML/CSS doesn't do me any practical good there.
For my side projects, I know just enough HTML/CSS to be dangerous. (http://www.almamatersports.com is all programmed by me in a couple hundred hours this year, but has obvious visual bugs on several different browsers, some layout issues, etc, but that didn't stop it from pleasing the guy paying the bills.) For those kinds of things, knowing more at the start of the project would have saved me tons of time and gotten a better looking end result, but wouldn't have changed the clients satisfaction all that much. Then again, the gameplay is so much better this year than last for him that it's not a fair comparison, since for most sites that level of visual bugs would be unacceptable.
When I think about my day job (which is what really pays the bills), in my experience it's much harder to find top-notch back-end developers than it is to find top-notch front end guys. Yes, the very cream of both crops is hard to find, but there's a much larger number of A players in the front-end space, so I'd recommend concentrating and developing your skills on the back-end and just getting a (relatively) tiny bit of exposure to front-end development issues and hiring that expertise out.
I would image that you will find it very simple to pick up and likely very rewarding.
glances at copy of Simple and Direct on bookshelf
Learn HTML, CSS, Javascript, a library like JQuery. You'll need them.
== XHTML/CSS ==
1. Learn basic HTML, understand what "semantic markup" means. I assume you know some HTML already.
2. To understand CSS, understand the box model. Understand inline and block elements. Understand selectors. Understand positioning. The rest of it falls in place from there.
Hopefully you'll have an appreciation for markup and meaning versus presentation at this point.
== JavaScript ==
3. Learn Javascript. Understand that everything is a hashtable. Understand how it handles scoping and understand classless objects. Once you're comfortable with this you're ready to move on.
4. Understand the DOM and how to manipulate it.
5. Read a little on AJAX, I found the DHTML utopia book on Sitepoint.com?myaffiliateid=me was good.
6. After you understand AJAX and DOM, go learn a library like JQuery or whatever else people advocate these days. These libraries are like mana from heaven. They will save you time! Oh, if you did steps 3-5 you'll be productive with a JS library in about 2 minutes. The learning curve is small at this point. Great stuff!
7. Install Firebug and spend an hour or two learning how to use it. Firebug will save you time and console.log is so much better than alert(). Firebug has made me happy.
Now you know how to manipulate sites on the client side. Great! Last step:
== Graphics ==
8. Learn a tool like Photoshop or the GIMP. Understand how to select stuff, copy and paste. Then become familiar with layers and masking. I am not a graphics guy but I've only recently become turned on to the power of masking. Wow. People like you and I can do neat things.
I don't have resources for everything because I scrimped and learned as I went. However this should represent a good order (and some pointers on what to look at) as you pursue this. Good luck!
As for learning XHTML/CSS, http://htmldog.com/ is an incredibly easy tutorial. You'll understand it all in hours.
I learned design by reading a bit on CSS, JS, and reverse engineering & imitating sites that have a certain effect I'm trying to get. Firebug is awesome. jQuery is awesome. Blueprint CSS might be what you need, or it might get in the way, but give it a try.
Oh, and don't be afraid to break the "rules". If your page looks and works the way you want, you win, even if you used (gasp!) tables.
I think my response would be similar to your 'developer-side' response - if at any point in working on a project I find myself confronted with something I do not understand, I have this compulsive urge to figure it out. In the process, I've saved myself thousands of dollars by investing a few days to learn what I need to at the time to get around the problem.
It sounds like you're a great Ruby developer with a leg up on all of the new "ZOMG RAILS!" converts. Don't be too concerned about the "jack of all trades, master of none" category. If you're working on building a company from scratch, product guys/gals are key - people who may not be experts in everything, but can get the job done for rev1 no matter what. If you can play that role yourself, you'll have far fewer people to depend on.
If you decide to work on the frontend yourself, start with raw HTML and forget that CSS exists entirely. This might help you to think of HTML/CSS as a backend developer.
HTML is just XML with a fixed set of elements that are named according to their purpose and have specific functions in a document - and you'll probably only need a small subset of them. So, look at your comp and think of the elements in it; paragraphs, lists, images, buttons, links, etc. Then, start writing what seems like an XML document describing it. Again, don't even think about styling it at this point. Just build the best web page that 1994 ever saw:
Once you've got your document written, you can start to tackle CSS. Since you've got a valid, well-formed document composed of semantically-meaningful elements, you'll find it much easier to style than people who focus upon the look of the document as they write it rather than its well-formed-ness. If you choose to hand it off to a dedicated frontend developer at this point, they'll be grateful that you've provided them with a solid canvas to build on.Good luck building your application; whichever route you choose, let us know when it launches!
And if you'd like any recommendations for either a designer or just someone who can slice and dice a comp, let me know; I've got a few solid friends who charge reasonable rates and have some availability coming up.
You need to know these things as a backend developer and as a programmer period.