Best books on web development?

I’m thinking of building a definitive list of books on web development. Software development in general should not be forgotten, but the focus of the list would be in great web software development.

Only the best books would be listed so that the list could serve as an educational tool. This is why I am asking your help.

What are your favorites? Let me know in the comments! Books on specific server-side technologies are fine too, the list will be categorized.

Without too much thought, here is a short list of 20 books to get you started:

  1. RESTful Web Services
  2. Code Complete
  3. Don’t Make Me Think!
  4. Designing with Web Standards
  5. Letting Go of the Words
  6. Web Analytics: An Hour a Day
  7. High Performance Web Sites
  8. The Pragmatic Programmer
  9. Bulletproof Web Design
  10. Prioritizing Web Usability
  11. The Productive Programmer
  12. Pragmatic Thinking and Learning: Refactor Your Wetware
  13. Practices of an Agile Developer
  14. Clean Code
  15. Agile Software Development with Scrum
  16. Extreme Programming Explained
  17. Refactoring: Improving the Design of Existing Code
  18. Implementation Patterns
  19. Agile Estimating and Planning
  20. Object Thinking

The last 10 books suggested by Sami Poimala, thanks! (I now have to actually read all those.)

Web developers’ areas of expertise

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:

  1. Open web technologies and practices
  2. Server side web technologies
  3. Generic technologies and development techniques

This is my incomplete list of things that every web developer should know about the web:

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
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
Deep understanding of the language
Progressive enhancement
jQuery experience
Ajax and JSON basics
Browser manipulation: URL, cookies, etc.
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)
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 current market share
Browser differences
Browser quirks (IE)
Browsers current and future standards’ implementations and other features
What is DOM and why does it exits
How to view DOM
Standard API to modify with JavaScript
How does it work and how browsers use it
How to use the hosts file
Focus on simplicity
Usable forms
Writing for the web
What is it and why is it important?
Accessible forms
Accessible navigation
Why title is an important element
Link economy
Canonical URLs
Every page is linked to with normal links
Web feeds (RSS and Atom)
RESTful web development
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.

Web-standardit ovat voittaneet

Kolme vuotta sitten Lauri Seppänen ilmeisen epäuskoisena kommentoi ennustustani:

”Ennustan, ettei taulukoilla taita muutaman vuoden päästä kuin maakuntien kotskasivuammattilaiset.”

Merkitsenkö huhtikuun 2009 kalenteriini? :)

Näin jälkikäteen on helppo todeta ennustuksen onnistuneen. Taulukkotaittoa ei ole vähään aikaan nähnyt enää paljon missään, niitä saa ihan tosissaan etsiä.

Kuten Jeffrey Zeldman vasta totesi (viiden minuutin kohdalla videossa):

…but we’ve won, which is kinda amazing. – – Web standards have really won.