As someone who would like to be a one-man-army / technical co-founder in the world of web development, I've been recently trying to deepen my technical knowledge of the fundamentals. I realized my understanding of the basics was very simplistic and as far away from "hardcore" as imaginable. I spent years working in the industry, and made the giant early mistake of not asking "how does this actually work underneath?" for way too long, so now I'm embarking on the likely life-long journey to fix that.
I realize that it's impossible to gain truly deep knowledge into every aspect of web engineering, but I believe that given time one can still be proficient in most of its areas. More importantly, this knowledge should be abstracted from the "flavor of the month" technology, and it should enable one to quickly learn and adapt. Also I think this knowledge should be pragmatic, practical and highly relevant to the real world and business application.
For starters I began learning more about how programming languages work underneath, which so far Programming Language Pragmatics 3rd ed has been really good at explaining, at just the right level of detail.
I imagine that some of the other fundamental areas of understanding for a web developer would be:
- operating systems
- networking
- databases
- security
- distributed systems
- UX
For these areas, and more if you can identify them, would you folks be able to recommend modern and pragmatic texts that would give one a solid level of depth? I realize that there would be plenty of overlap with a standard CS curriculum, the difference would be in a higher focus on practical application, rather than theory.
http://www.w3.org/Protocols/rfc2616/rfc2616.txt (HTTP standard)
http://en.wikipedia.org/wiki/Representational_state_transfer
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm (Original publication introducing REST)
Not knowing this stuff makes it hard to write applications that perform well and are search engine friendly, so contrary to what people may think, it's often very practical knowledge. Ultimately you should also strive to understand what happens from the moment you type in the URL to the moment the page is displayed on the screen, so some understanding of DNS, basic routing, etc. You should also know how to use all the classic tools: ping, traceroute, host, dig, netcat, ngrep, nmap and so on and so forth, it will make it easier to understand the theoretical things and will very often come handy in practice. It's also a step towards another important goal - knowing your infrastructure, so probably UNIX, your web server of choice, your database server etc. You can go a long way by just reading the manuals and the user guides for those things.
Another aspect is knowing the modern browser well. You should learn some JavaScript, learn to use FireBug or Chrome Developer Tools, learn about the DOM, the security issues that the browsers have to deal with etc. Douglas Crockfords videos are a good way to learn this:
http://www.youtube.com/playlist?list=PL7664379246A246CB
http://www.youtube.com/playlist?list=PL5586336C26BDB324&...
There is a nice book about web security from Michal Zalewski, a well-respected security researcher currently at Google:
http://lcamtuf.coredump.cx/tangled/