What should a web developer know? More about web or plain programming? I believe it is often far more valuable to know the domain really, really well than it is to be highly skilled in programming.
Web developer’s development skills can be divided into three categories:
- Open web technologies and practices
- Server side web technologies
- Generic technologies and development techniques
This is my incomplete list of things that every web developer should know about the web:
- HTML
- What is the purpose of HTML
- What is semantic HTML
- All the common elements and their attributes
- What is the Doctype and what does it do
- HTML vs. XHTML, what are the practical differences
- HTML5 philosophy and major new additions
- CSS
- Selectors and their browser implementation statuses
- Basics:
margin
,padding
,border
: the box model - Positioning with
float
,position
- Some experience in building a simple layout in pure CSS
- The difference between quirksmode and the standards mode
- General understanding of CSS levels 1–3 and their implementation status in browsers
- JavaScript
- Deep understanding of the language
- Progressive enhancement
- jQuery experience
- Ajax and JSON basics
- Browser manipulation: URL, cookies, etc.
- HTTP
- What does a HTTP request consists of
- Common response codes and their proper use
- How cookies work, what are their limitations?
- How to read and debug HTTP traffic
- Cache control
- Statelessness and how to fake it (and why not to fake it)
- URI
- What is the difference between URL, URI, and IRI
- How is URI structured
- How and when to use the query string
- How does the hash (fragment) work
- Cool URIs don’t change
- Browsers
- Browsers current market share
- Browser differences
- Browser quirks (IE)
- Browsers current and future standards’ implementations and other features
- DOM
- What is DOM and why does it exits
- How to view DOM
- Standard API to modify with JavaScript
- DNS
- How does it work and how browsers use it
- How to use the hosts file
- Usability
- Focus on simplicity
- Usable forms
- Writing for the web
- Accessibility
- What is it and why is it important?
- Accessible forms
- Accessible navigation
- WCAG
- SEO
- Why title is an important element
- Link economy
- Canonical URLs
- Every page is linked to with normal links
- Security
- XSS
- CSRF
- Miscellaneous
- Web feeds (RSS and Atom)
- RESTful web development
- XML
- XSL, XPath
- Overview of W3C standards and other web standards
I probably did not think of everything, so feel free to add your suggestions in the comments.
In addition to that list, you should of course know enough about the server side technologies too. Know thoroughly at least the programming language, web framework, your database of choice, SQL as a language, something about scalability and performance, security basics and so on. Learning will not end on this side either.
Useful generic technologies and development techniques include writing readable code, designing highly reusable object-oriented software, agile methodologies… I won’t try to make a comprehensive list here.
Where to focus?
More often than not a programmer focuses on programming only. That often results into unusable or otherwise bad websites. Web is a domain like no other. Of course, developing in any other platform will be much more effective if you know the domain.
Focusing your learning efforts on open web technologies gives you several benefits:
The first benefit of focusing on the open web technologies is your agility to switch platforms. The more you know about the web, the easier and faster it is to start developing in a new web development platform, from switching CMS’s to a massive leap of one technology stack to another. There is also less of a vendor lock-in, which gives more options for your career.
Second, your ability to work efficiently with web designers grows. You are able to deliver solutions that make their work easier.
Third, the complete solution is likely to be much more web oriented and thus a better one.
Fourth, you learn something that tends to be more long-lived knowledge than typical vendor-specific technologies.
It never ends
No wonder most of us feel sometimes a bit anxious about all the things we have to learn. And when we do learn, it is mostly rendered useless after a couple of years.
A developer is never out of school.
Security – I finally found it, just above the Misc category. I’d prefer seeing security related items within most categories. It goes way beyond XSS and CSRF. Thinking securitywise is a lot more than just “remembering to use htmlspecialchars()”. There are new threats when using AJAX, JS libraries, etc.
As you said, the list is not complete. How about adding these:
Validating your HTML/XML code. Especially, understanding the concepts of wellformedness vs. validity is important. And with XML, there should be an How to really generate well-formed XML item, since people often fuck that up. I’ve seen way too many unescaped ampersands in “RSS feeds” or other “XML input” that somebody generates with bad homegrown code.
You do mention performance, but only on the server side. Performance should be on the client side list, too. It has to do with browsers, AJAX, etc. Today we see a lot of
$('div').load("/anotherpage.php #just-a-small-part")
crap, because people don’t care or they really don’t understand how the browser will do this trick.Unicode/UTF-8/etc should be there, too. It’s not too easy, and every developer will face problems. Joel Spolsky has written a good article on unicode. And yes, even character sets have to do with security.
(Argh, I really hate these semi-HTML comment boxes without preview…)
Thank you for your insightful comment, I agree with you completely.
(I think I fixed your comment like you intended it to be, email me if you need other changes. I really should implement a preview.)