Hacker News new | past | comments | ask | show | jobs | submit login
What’s the web dev equivalent of SICP?
50 points by rigpa on May 8, 2021 | hide | past | favorite | 19 comments
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.



I am sort of arriving towards the conclusion that an SICP is not possible for the web dev space. Web development is dominated by moving targets, moving industry standards, and not-well-thought-out libraries/ patterns etc.. There is clearly no agreement on what counts as the core of web dev (in contrast - what counts as the core of programming, which is the purview of SICP, is generally easy to define).


I think it is deeper then that. Web development has a pretty clear distinction between front and back end, where the values and design goals of each is vastly different. SICP would it self teach you valuable lessons for the back end while only be marginally beneficial to a subset of front-end programming. In fact, in my experience (and this might be a hot take), the front end suffers from back end programmers taking their lessons to the front end where they don’t apply, and may even be considered harmful [fn-1]. This might in fact be the core reason for your stated “not-well-thought-out libraries/patterns” on the front end.

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.


> 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.

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.


Do you think there is any commonality between web front end and desktop programming or native app programming that could be captured in a general way in a SICP type book. I think React, MVVM, “rx” style and what might be called “stateful components” might be the common patterns to talk about across all front ends.


Agree with others here that "web development" isn't quite as neatly bounded as "core computer science principles".

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


Philip And Alex's Guide To Web Publishing, http://philip.greenspun.com/panda/ . It's even almost as old as SICP but as far as I remember, the stuff in it is still mostly valid. Especially the part where it describes javascript as "the blink tag writ large".


Interesting question and honestly I don't think so.

The 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.


Just in case you want to throw up, there's SICP but rewritten in Javascript: https://source-academy.github.io/sicp/


Here you go - https://12factor.net


For the front end there is more an assortment of articles, particularly from <https://alistapart.com/> and <https://www.smashingmagazine.com/>.

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...


I came up with a lasting analysis some time ago. Programming is an engineering discipline, whereas application development is a blended skill including engineering and myriad other disciplines. Don't stare too hard, programming and application development look like the same thing if you do.

On the web, I think there's an argument that application development rather than programming is the dominant activity.


SICP


Came here to ensure this comment existed.


If I understand your intent correctly both of these should be useful.

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


Learn about services, intro to networking, tcp sockets, udp streams, API design, intro to front-end development including HTML and CSS.


I am counting on a more creative answer than mine, but my answer is to read the specs, not only the digested material on MDN, blogs, Stack Overflow, etc.

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


Almost all programming languages have lexical scope/closures and functions. Understanding the scope really helps in all web frameworks. This very basic concept took me 10 years to understand. I have no book recommendations, but recommend reading callbackhell.com


HOP of course. http://hop.inria.fr/

Gambit just demoed their faster variant of it, but hop still looks more impressive to me.


When I read eloquent javascript I thought the are several similitudes between the two books. Maybe you can give it a try.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: