What’s the web dev equivalent of SICP?
I know the question doesn’t quite make sense - SICP is the SICP of web dev. What I mean is just, are there any great books on the fundamental principles of web development? Books that would make you better at programming for the web no matter what language or framework you work in.
20 comments
[ 0.27 ms ] story [ 57.2 ms ] threadThe web isn't separate from computers/programming generally, it's just a way of organising things to work.
So learning core programming concepts from things like SICP is still a valid approach combined with working out the truly core parts and studying those.
Once you know which core parts you want to study find the best book on them and go to town.
I work with a lot of web developers who don't really understand HTTP even on a conceptual level for example and that creates issues because they don't have the correct framework to understand how to structure things.
On the web, I think there's an argument that application development rather than programming is the dominant activity.
Too many devs are intimidated by the Web and Internet standard specifications. I agree that it is impossible to read them cover-to-cover (however, with most RFCs and the REST dissertation, you can and should actually do that). Still, when you need to understand a particular section, usually you will find there many interesting details and all of the advanced concepts derived from first principles.
I mean specifically:
- the Internet Standards (RFCs). Read some of them [1] or browse all of them [2]
- the HTML5 living standard [3]. Actually the previous HTML specifications are also interesting, easier for reading and mostly compatible [9]
- ECMAScript living standard [4] or the latest finalized spec [5]
- CSS specifications [6] (they are modular and build on top of each other)
- the original REST proposal formulated in Roy Fielding's dissertation "Architectural Styles and the Design of Network-based Software Architectures": "Chapter 5: Representational State Transfer (REST)" [7]. It is also reformulated in "Principled Design of the Modern Web Architecture" [8]
---
[1] https://security.stackexchange.com/questions/116893/which-ar...
[2] https://www.rfc-editor.org/retrieve/
[3] https://html.spec.whatwg.org/multipage/
[4] https://tc39.es/ecma262/
[5] https://262.ecma-international.org/11.0/
[6] https://www.w3.org/Style/CSS/read.en.html
[7] https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
[8] https://www.ics.uci.edu/~taylor/documents/2002-REST-TOIT.pdf
[9] https://www.w3.org/wiki/HTML/Specifications
As a front end developer my self I’d argue that the front end has a core by it self which is independent—and sometimes even incompatible—with the core of programming. On the front end your user is such an unknown while still being your most important target. General programming doesn’t have this, where your user is most often just you at a later time, and maintainability is often the most important goal.
Then there is the living standards a front end developer must design around. A general programmer has a definite compiler (or an interpreter) they can write for. A front end developer should be aware which technology they can use given their audience’s clients. A front end stack that targets an audience with modern clients will be structured a lot differently then for audience that might have legacy clients. If you suspect your audience might use legacy clients, you have to accommodate that by adding different tools and techniques to your code base. I don’t think SICP—and other literature for generic programming—provides any insight into this. (and why should they?)
---
fn-1: I’m not gonna go as far as stating that SCIP considered harmful for front end developers. I don’t think that is true.
If everyone wrote standards compliant code then the browser vendors and would be forced to update, and the web would be a more coherent place. Browsers that don't stay up-to-date would (rightfully) become quantifiably inferior products and people would likely stop using them if they couldn't render pages (their intended purpose). It's ridiculous that we have to keep compiling code to old standards so big corporate can save a few bucks not upgrading their computers and work stations.
A classic one is Responsive Web Design[1] by Ethan Marcotte. You can also familiarize your self with Rachel Andrew’s work[2] on CSS layout (and I recommend the book The New CSS Layout[3] as a good introduction to layout in modern CSS).
You should also familiarize your self with accessibility (A11Y). I would imagine A11Y and inclusive web development to be the front and center of a chapter 4 like SICP for web devs. Perhaps My Accessibility Journey: What I’ve Learned So Far[4] by Manuel Matuzović is a good one to start, i.e. opinionated while instructing, in the spirit of SICP.
1: https://alistapart.com/article/responsive-web-design/
2: https://www.smashingmagazine.com/2020/01/understanding-css-g...
3: https://abookapart.com/products/the-new-css-layout
4: https://alistapart.com/article/my-accessibility-journey-what...
That said, I'll add MDN Web Docs [1] to the pile of links here as a good resource for practical details. If you're interested in the fundamentals of large-scale data-driven distributed systems (into which category many larger web applications fit), Designing Data-Intensive Applications [2] is quite excellent. NNGroup [3] has a lot of great foundational material on basic concepts of UX, usability, interaction, etc. for digital products.
[1] https://developer.mozilla.org/en-US/ [2] https://www.oreilly.com/library/view/designing-data-intensiv... [3] https://www.nngroup.com
This is being written now and looks very promising https://browser.engineering/
This has been going a couple of years now https://almanac.httparchive.org/en/2020/table-of-contents
Gambit just demoed their faster variant of it, but hop still looks more impressive to me.